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.