Gary Bernhardt가 스크린 캐스트에서하는 것처럼 Vim에서 쉘 명령을 실행하는 방법은 무엇입니까?
저는 Gary Bernhardt의 Destroy All Software 스크린 캐스트, 특히 A Compiler from Scratch를보고 있습니다. 그곳에서 그는 Vim을 떠나지 않고 쉘 명령을 실행합니다. 나는 그가 일반적인 Vim 구문을 사용하고 있다고 확신합니다. 예를 들어 1 분 표시 : :!chmod u+x compiler.rb
. 내 컴퓨터에서이 작업을 수행하면 창이 셸 명령을 실행하도록 전환 된 다음 Enter 키를 눌러 편집기로 돌아 가야합니다. 이것은 Vim의 정상적인 행동이라고 생각합니다. 다른 사람들은 이전에 이것을 물어 봤지만 Gary처럼 어떤 대답도하지 않는다고 생각합니다.
나는 그의 .vimrc파일, 특히 스크린 캐스트가 업로드되기 전의 마지막 버전을 살펴 봤지만 내가 찾고있는 행동을 얻기 위해 그가 무엇을 변경했는지 알 수 없었다. 다운로드했지만 여전히 올바른 동작을 얻지 못하기 때문에 분명히 뭔가를 놓치고 있습니다. 그의 플러그인 중 어느 것도 이것과 관련이있는 것 같지 않아서 대부분 무시했습니다.
내가 사용이 TMUX하는 솔루션을 찾고, 또는 물건과 같은 아니에요 거의 확신 :split
, :term
, :below terminal
, 또는 :silent
. 나는 Vim 이외의 것을 사용하는 답변을 찾고 있지 않으며 Gary는 Vim과 몇 가지 플러그인을 사용하고 있다고 생각합니다.
나는 Gary가 Vim에 대해 구체적으로 이야기하는 스크린 캐스트를 보았지만 그는이 질문에 대해 언급하지 않았거나 (또는 나는 그것을 이해하지 못했습니다), 누군가가 :! <shell command>
텍스트 편집기를 떠나지 않고 사용 방법을 알아 냈다 면 정말 감사 할 것입니다. 이 문제를 해결하도록 도와주세요. 이전에 언급 한 옵션을 Mac과 Linux 모두에서 테스트했지만 원하는대로 작동하지 않았으며 두 플랫폼에서 작동하는 솔루션에 만족할 것입니다.
답변
비디오는 빨리 지나가지만 나는 그것을 멈 췄고 그가 다음을 입력하는 것을 본 것 같습니다.
:!chmod u+x %
그러면 다음 출력이 생성됩니다.
:!chmod u+x compiler.rb
[No write since last change]
"compiler.rb" 5L, 42C
Press ENTER or type command to continue
따라서 실제로 Vim 은 명령이 완료된 후 "Enter 키를 누르십시오"라는 메시지를 표시하지만 너무 빨리 눌렀 던 것 같습니다 (이미 예상 했습니까? 아니면 다음 명령을 누르기 시작 했습니까?). 건너 뛰었습니다.
여기에 관련된 두 가지 설정이 있습니다. 첫 번째는 명령을 실행하는 동안 대체 화면에서 전환하지 못하도록하는 것이고 두 번째는 외부 명령에 의해 변경된 파일을 자동으로 다시로드하는 것입니다 (권한 만 변경 되었더라도).
그의 GitHub dotfiles 저장소를 살펴보면 실제로 2017-06-29 (해당 비디오가 게시 된 시점) 현재 vimrc에서 두 설정을 모두 볼 수 있습니다.
- 대체 화면에서 전환 하지 않도록 Vim을 구성하는 것은 다음 스 니펫으로 구성됩니다 .
" Prevent Vim from clobbering the scrollback buffer. See
" http://www.shallowsky.com/linux/noaltscreen.html
set t_ti= t_te=
- 이 설정으로 외부 작업이 완료된 후 파일을 자동으로 다시로드하도록 Vim을 구성 합니다 .
set autoread
이 두 가지 설정을 켜면 [No write since last change]
메시지를 받지 못한다는 점을 제외하고는 거의 정확히 같은 효과를 재현 할 수 있습니다 . 나는 그가 chmod
명령 직전에 파일을 작성했다고 말할 수 있기 때문에 그것이 어디에서 오는지 잘 모르겠습니다 . (증거로, 상태 표시 줄은 [+]
파일 이름 옆에 수정 된 버퍼를 표시하지 않습니다 .)
아마도 그의 vimrc의 다른 것일 수도 있습니다. 이론적으로는 GitHub에서 가져 와서 똑같이 시도하는 것이 가능해야합니다. 비디오가 Vim 7.4를 사용하는 것 같아서 그것도 일부일 수 있습니다.
여전히 그의 GitHub dotfiles repo를 살펴보면 Vim이 스크롤 백 버퍼 를 막도록 허용 한 것 같아서 그 부분에 대한 마음을 바꿨습니다.
그 부분이 여전히 관심이 있다면 , 그 동작을 구현하는 플러그인 vim-altscreen을 살펴볼 수 있습니다 . " 대체 화면 :!{cmd}과 :w !{cmd}관련한 차이점" 질문에 대한 토론 , 특히 @ user938271의 예외적 인 답변을 참조하십시오 .