쉘에서 Vim 명령을 실행하는 방법은 무엇입니까?


12

이것은 멍청한 질문 일지 모르지만 나와 함께하십시오.

새 작업 환경을 설정할 때 수행하는 일반적인 작업 중 일부를 자동화하고 있으며 Vim 명령을 자동화하고 싶습니다 :BundleInstall(모든 Vim 플러그인 설치용).

쉘에서 이것을 실행할 수 있습니까?

또는 스크립트를 Vim으로 실행 :BundleInstall하고 실행 하고 완료 될 때까지 기다렸다가 종료 할 수 있습니까?

감사.

답변:


14

로부터 vim(1)매뉴얼 페이지

+ {명령}

-c {명령}

첫 번째 파일을 읽은 후에 {command}가 실행됩니다. {command}는 Ex 명령으로 해석됩니다. {command}에 공백이 있으면 큰 따옴표로 묶어야합니다 (이것은 사용되는 쉘에 따라 다릅니다). 예 : Vim "+ set si"main.c

참고 : 최대 10 개의 "+"또는 "-c"명령을 사용할 수 있습니다.


3
감사! 나는 바보처럼 느껴질 줄 알았다 ... :-/ 맨 페이지를 철저히 읽지 않은 것에 대해 나에게 정확하게 봉사한다. 나는을 사용하여 끝났다 vim +BundleInstall +qall!.
imiric

4

다음과 같이 명령을 실행할 수 있습니다.

vim -E -c BundleInstall -c q

터미널에서 Vim 창을 열지 않습니다.

참고 : 첫 번째 답변에는 -s다른 응용 프로그램에 필요했던 옵션이 포함 되었지만 여기에는 BundleInstall명령 을 정의한 플러그인 소싱을 포함하여 Vim의 초기화가 많이 이루어지지 않았으므로 여기에 잘못되었습니다 .


1
고맙지 만 어떤 이유로 든 작동하지 않습니다.
imiric

1
이제 이유를 봅니다. -s특정 메시지를 금지하는 것 이상 (초기화도 금지 함)을 잊어 버렸 으므로 BundleInstall의 정의가 제공되지 않았습니다. 첫 전에 다음과 같은 옵션을 추가하는 것입니다 해결하는 한 가지 방법 -c: --cmd 'runtime plugin/bundle.vim'. 해당 파일 이름을 편집하십시오. 참조하십시오 :help -s-ex.
garyjohn


0

vim을 수동으로 시작한 것처럼 완전히로드해야하는 상황에서는 다음과 같이 작동합니다.

vim -c "autocmd! CursorHold * <commands to run>"

예를 들어, 출력을 :map셸에서 파일 로 리디렉션하고 싶었지만 vim-airline 이 해당 탭을 표시 한 후에 만 ​​생성 되는 매핑을 캡처하려고했습니다 (모든 버퍼 이름이 열린 상태로 표시됨). 이것은 비동기 적 -c으로 파일에 대한 리디렉션을 실행하는 것이 매핑을 할 시간을주지 못했습니다. 더 좋은 방법이있을 수 있지만, 특히 이미 (0.1 초)로 updatetime설정되어 이벤트가 발생할 100때까지 걸리는 시간에 영향을 미칩니다 CursorHold. 기본적으로 vim은 4 초로 설정합니다.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.