Vi (m)에서 편집중인 파일을 실행하고 SciTE와 같이 분할 창에서 출력을 얻는 방법은 무엇입니까?
물론 다음과 같이 실행할 수 있습니다.
:!scriptname
그러나 스크립트 이름을 작성하지 않고 화면 하단 대신 분할 창에서 출력을 얻는 방법을 피할 수 있습니까?
답변
이 make
명령은. makeprg
옵션에 설정된 명령을 실행합니다 . %
현재 파일 이름에 대한 자리 표시 자로 사용 합니다. 예를 들어, Python 스크립트를 편집하는 경우 :
:set makeprg=python\ %
네, 공간을 탈출해야합니다. 그 후에 간단히 실행할 수 있습니다.
:make
원하는 경우 autowrite
옵션을 설정할 수 있으며 다음 을 실행하기 전에 자동으로 저장됩니다 makeprg
.
:set autowrite
이것은 실행 부분을 해결합니다. 파일로의 리디렉션을 포함하지 않는 분할 창으로 출력을 가져 오는 방법을 모릅니다.
답변
현재 버퍼의 파일 이름에 액세스하려면 %
. 변수로 가져 오려면 expand()
함수를 사용할 수 있습니다 . 새 버퍼로 새 창을 열려면 :new
또는을 사용하십시오 :vnew
. 명령의 출력을 현재 버퍼로 파이프하려면을 사용하십시오 :.!
. 함께 모아서:
:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
분명히 ruby
원하는 명령으로 대체하십시오 . execute
파일 이름을 따옴표로 묶을 수 있도록 사용 했으므로 파일 이름에 공백이 있으면 작동합니다.
답변
Vim에는 !
VIM 창에서 직접 쉘 명령을 실행하는 ( “bang”) 명령이 있습니다. 또한 파이프와 연결된 명령 시퀀스를 시작하고 stdout을 읽을 수 있습니다.
예를 들면 :
! node %
명령 프롬프트 창을 열고 명령을 실행하는 것과 같습니다.
cd my_current_directory
node my_current_file
자세한 내용은 “Vim 팁 : 외부 명령 작업” 을 참조하십시오.
답변
내 vimrc에 바로 가기가 있습니다.
nmap <F6> :w<CR>:silent !chmod 755 %<CR>:silent !./% > .tmp.xyz<CR>
\ :tabnew<CR>:r .tmp.xyz<CR>:silent !rm .tmp.xyz<CR>:redraw!<CR>
이렇게하면 현재 버퍼를 쓰고 현재 파일을 실행 가능하게 만들고 (unix 만 해당) 실행 (unix 만 해당)하고 출력을 .tmp.xyz로 리디렉션 한 다음 새 탭을 만들고 파일을 읽은 다음 삭제합니다.
분석 :
:w<CR> write current buffer
:silent !chmod 755 %<CR> make file executable
:silent !./% > .tmp.xyz<CR> execute file, redirect output
:tabnew<CR> new tab
:r .tmp.xyz<CR> read file in new tab
:silent !rm .tmp.xyz<CR> remove file
:redraw!<CR> in terminal mode, vim get scrambled
this fixes it
답변
내가 사용한 쉘 스크립트의 경우
:set makeprg=%
:make
답변
Vim 8에는 대화 형 터미널이 내장되어 있습니다. 분할 창에서 현재 bash 스크립트를 실행하려면 :
:terminal bash %
또는 짧게
:ter bash %
%
현재 파일 이름으로 확장됩니다.
에서 :help terminal
:
The terminal feature is optional, use this to check if your Vim has it:
echo has('terminal')
If the result is "1" you have it.
답변
맵을 통해 약간 더 침입적인 메커니즘을 사용합니다.
map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>
저장하지 않아도되게 만든 다음 가십시오. 바로 가기.