VIM에서 외부(bash) 명령을 분리할 수 있습니까?

VIM에서 외부(bash) 명령을 분리할 수 있습니까?

다음과 같은 상황을 고려하여

  1. 파일을 쓰고 싶어요
  2. 파일이 있는 디렉토리로 변경
  3. bash 명령 실행
  4. 이전 디렉토리로 변경

나는 다음 명령을 수행했습니다

command Asc execute ":w | :cd %:p:h | !ansible-playbook --syntax-check % "

이것은 지금까지 작동하는 것 같습니다. 그러나 이전 디렉터리로 다시 변경해도 :cd -작동하지 않는 것 같습니다.

command Asc execute ":w | :cd %:p:h | !ansible-playbook --syntax-check % | :cd -"

내 생각에는 파이프와 그 뒤의 내용이 vim이 아닌 bash에 의해 해석되는 것 같습니다.

이 문제를 극복하는 방법은 무엇입니까? 아니면 전혀 방법이 없나요?

PS: 저는 vim의 autochdir 옵션을 알고 있습니다.

답변1

~에서:h :!:

A '|' in {cmd} is passed to the shell, you cannot use it to append a Vim command.  See :bar.

하지만 다음과 같이 할 수 있습니다.

command Asc execute ":w | ! cd %:p:h; ansible-playbook --syntax-check %"

cd실행 중인 셸만 디렉터리를 변경하므로 return 이 필요하지 않습니다 .

관련 정보