분할 창에서 셸 명령의 출력을 엽니 다


23

해석 된 프로그래밍 언어를 고려하십시오.

을 사용하여 현재 열린 스크립트를 실행할 수 ! interpreter %있으며 실행이 완료된 후 return 키를 사용하여 vim으로 돌아갈 수 있습니다.

현재 창을 실행 된 쉘 명령의 출력으로 바꾸지 않고 대신 새 분할 창에서 출력을 열 수 있습니까? 스크립트를 실행하는 동안 여전히 소스 코드를보고 싶습니다.

시도 :split ! interpreter %했지만 작동하지 않았습니다.

방법이 있습니까? vim 7.3을 사용하고 있습니다.

답변:


28

을 사용 :!하면 외부 명령이 쉘에서 실행되고 맹렬한 출력이 Vim 내에서 캡처되지 않습니다. 터미널에 인쇄 된 내용을 확인한 다음 외부 명령이 완료된 후 컨트롤이 Vim으로 돌아갑니다.

출력을 유지하려면 Vim 버퍼 로 출력을 읽어야합니다 . 이를 위해 :read!명령이 있습니다. 새로운 스크래치 버퍼 를 열려면 다음과 결합하십시오 :new.

:new | 0read ! <command>

현재 버퍼의 파일 이름 ( %)을 외부 명령 에 전달하려면 현재 버퍼에서 :execute이미 평가되도록 을 사용해야 합니다.

:execute 'new | 0read ! interpreter' expand('%')

또는 새 버퍼를 사용하면 이전 버퍼가 대체 버퍼가되고 대신 다음을 사용한다는 사실을 사용 #합니다 %.

:new | 0read ! interpreter #

로 스크래치 버퍼를 제거하십시오 :bdelete!.

출력이 실행되는 동안 비동기 적으로 출력을 보려면 @chaos answer에 언급 된 것처럼 외부 멀티플렉서 또는 플러그인이 필요합니다.


위의 ": execute ..."명령은 저에게 효과적이지만이 .vimrc 항목을 사용하여 F9 키 스트로크에 바인딩하려고 할 때 [nnoremap <buffer> <F9> : execute 'new | 0read! / usr / bin / env python3 'expand ('% ')], 다음 오류가 발생합니다. [/ bin / bash : -c : line 0 :`' 'expand ('% '일치하는 동안 예기치 않은 EOF )]. 몇 가지 이스케이프 시퀀스를 시도했지만 올바른 것은 아닙니다. = :). 어떤 아이디어? 감사합니다.
NYCeyes

2

내가 아는 한에서 할 수 없습니다 vim. 그러나 이와 같은 터미널 멀티플렉서를 사용하십시오 screen. vim을 열기 전에 멀티플렉서를 시작하십시오 :

screen

다음 Enter 키를 누릅니다 ctrl- a Shoritzontal과 ctrl- a |세로 화면을 유출에 대한.

이제 vim분할 화면 중 하나 에서 파일을 엽니 다 . ctrl-를 사용하여 다른 화면으로 이동하십시오 a tab. 두 번째 화면에서는 먼저 새 화면 ( ctrl- a c) 을 열어야 사용할 수 있습니다.

vim 화면에서는 파일을 편집 할 수 있고 다른 화면에서는 파일을 실행하고 메시지와 코드를 영구적으로 볼 수 있습니다.

여기에 대한 빠른 참조screen있습니다.


또는 tmux멀티플렉서 및 vim-dispatch플러그인을 사용 하여 분할 창간에 분할 및 점프를 자동화 할 수 있습니다 .
17:06에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.