Vim : 분할 화면에서 작업중 인 스크립트를 실행하십시오.


16

디버깅 및 추가 개발을 위해 빈번한 실행이 필요한 작은 파이썬 스크립트를 작성 중입니다.

vim 화면을 분할하고 키 입력으로 스크립트를 한 부분에서 실행할 수 있습니까?

답변:


9

이 줄을 .vimrc에 추가하십시오.

command R !./%

그런 다음 Vim에서 스크립트를 실행하기 위해 ": R"을 입력하면됩니다 ( vim-run-current-file ).


10

빔은 (당신이 의미하는 경우)를 참조하지 않으며, 이맥스 또는 케이트와 같은 내장 쉘을 지원하지 않습니다 이 유래 질문을 .

David Spillet가 맞습니다 .gnu 화면에서 vim을 실행할 수 있습니다.

$ screen vim foo.txt

그러나 그것은 터미널에서 원격으로 창 관리자와 유사한 것을 제공합니다-ssh 또는 X가없는 상자에서 사용될 때 매우 유용하지만 로컬에서는 다른 xterm을 열고 그들 사이를 전환 할 수 있습니다. *

어쨌든, 생성하는 출력을 보면서 편집중인 파일을 볼 수 없다는 사실을 잘 알고 있으면 Jack M의 팁은 좋지만 짧을 수 있습니다.

:map ;e :w<cr>:!python %<cr>

같은 목적으로, 나는 이것을 내 안에있다 ~/.vimrc:

au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif

fun! CallInterpreter()
    if exists("b:interpreter")
         exec ("!".b:interpreter." %")
    endif
endfun

map <F5> :call CallInterpreter()<CR>

#!첫 번째 줄에 shebang ( ) 이있는 모든 파일이 실행됩니다 . 인터프리터를 사용하여 파일을 실행하므로 실행 권한이 필요하지 않습니다.

* (화면에는 출력에서 ​​복사하여 붙여 넣기, 활동 / 비 활동에 대한 숨겨진 창 모니터링, 여러 터미널에서 동시에 세션을 사용할 수 있으며 모든 프로그램을 종료 한 상태에서 로그 아웃 할 수있는 매우 깔끔한 기능이 있습니다. 실행-그것은 강력한 도구입니다).


나는 금 BufEnter 같은 줄에 (의 \하다면) 첫 줄을 넣을 때까지 자동 명령은 나를 위해 일을하지 않았다하지만 난 \ 제거
제이슨 Axelson

Vim은 기본적으로 쉘을 지원하지 않을 수도 있지만이 흥미로운 쉘 플러그인을 언급하고 싶었습니다. vim.org/scripts/script.php?script_id=2771
Mr Mikkél

:map ;e :w<cr>:!python %<cr>명령이 실행되었음을 "확인"(?)하기 위해 vim 버퍼에 내용을 반향하려고합니다. 단순히 명령을 자동으로 실행하려면 어떻게해야합니까? :map <silent> ...작동하지 않는 것 같습니다.
Johnny Utahh

5

가장 자세한 방법은 (스크립트가 실행 가능해야 함) 아마도 다음과 같습니다.

 :!%

이것이 작동 :!./%하려면 스크립트를 현재 디렉토리에서 찾을 수 있도록 수정해야했습니다 .
Paul Wintz

그리고 나는 전문가가 아니지만 !vim에게 bash 명령으로 다음과 같은 것을 실행하도록 지시하므로 그렇게 할 수 있습니다 !echo "Hello". 는 %현재 파일의 이름으로 확장됩니다.
Paul Wintz

2

분할 화면이 아닐 수도 있지만 이것은 나에게 잘 작동합니다.

map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>

이것은 ;e현재 파일을 작성하고 python을 사용하여 실행하도록 매핑 됩니다 (python이에 있다고 가정합니다 PATH).


2

Bexec 정력 플러그인은 당신이 원하는 것을 정확히 않습니다. 키보드 단축키가 포함되어 있습니다.




0

넣어 이 작은 조각을 (같은 하나의 키 입력으로 현재 파일을 실행하기 위해 당신의 .vimrc에 F5) 새로운 분할 창 버퍼에 결과를 표시합니다.

:! 괜찮지 만 결과를 보려면 터미널로 전환해야합니다.

당신이 그것을 할 수 ctrl-z있고 vim을 다시 가져와 fg도 여전히 컨텍스트를 많이 전환해야한다는 것을 의미합니다.

스 니펫의 작동 방식은 먼저 실행 파일을 기반으로 추측 filetype한 다음 현재 파일을 인수로 실행하여 실행합니다.

다음으로 편리한 유틸리티 메소드 는 출력을 가져 와서 새 버퍼로 덤프합니다.

완벽하지는 않지만 일반적인 워크 플로에는 매우 빠릅니다.

아래에 복사 한 스 니펫은 다음과 같습니다.

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>

" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
  let filetype_to_command = {
  \   'javascript': 'node',
  \   'coffee': 'coffee',
  \   'python': 'python',
  \   'html': 'open',
  \   'sh': 'sh'
  \ }
  let cmd = get(filetype_to_command, &filetype, &filetype)
  call RunShellCommand(cmd." %s")
endfunction

" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
"   :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
  echo a:cmdline
  let expanded_cmdline = a:cmdline
  for part in split(a:cmdline, ' ')
     if part[0] =~ '\v[%#<]'
        let expanded_part = fnameescape(expand(part))
        let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
     endif
  endfor
  botright new
  setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
  call setline(1, 'You entered:    ' . a:cmdline)
  call setline(2, 'Expanded Form:  ' .expanded_cmdline)
  call setline(3,substitute(getline(2),'.','=','g'))
  execute '$read !'. expanded_cmdline
  setlocal nomodifiable
  1
endfunction

-1

vim에 대해서는 잘 모르지만 일반적으로 screen유틸리티를 사용 하여 화면을 분할 할 수 있습니다 . ctrl+ a, S(자본 S입니다 참고) 디스플레이를 분할하고 당신이 가진 두 가지 사이를 전환 할 수 있습니다 ctrl+ a, tab(윈도우가 비어있는 경우, 사용 ctrl+는 a, n열려있는 다른 창으로 이동하거나 ctrl+ a, c새로 만들) .

디스플레이를 둘 이상으로 분할하고 ctrl-a, : resize를 사용하여 분할의 크기를 변경할 수 있습니다. 나는이 방법으로 화면을 자주 사용하며, 요청하는 단일 키 솔루션은 아니지만 매우 편리 할 수 ​​있습니다.


Vim에서 작동하고 있습니까? 내 vim에서 응답하지 않는 것 같습니다 (파일간에 분할하기 위해 slpit 명령을 사용합니다).
Adam Matan

이것은 vim이 아닌 GNU 화면 명령입니다.
innaM

네. 화면 내에서 vim을 실행하는 것에 대해 이야기하고 있습니다.
David Spillett

vim 분할은 vim 창의 영역 (또는 실행중인 터미널)에서 발생하는 것입니다.
hasen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.