따라서 기본 Mac OSX Yosemite에서 실행한 vi /tmp/foo
다음 일부 텍스트를 입력하고 마지막으로 실행하면 :Wq
(자주 만드는 오타) :wq
... 모든 것이 괜찮아 보이지만 어떤 이유로 종료 코드는 1이 됩니다. 동일한 작업을 반복했지만 이를 수행하지 않으면 :Wq
0이 반환됩니다.
이것은 커밋 메시지를 입력하는 git 커밋에 대해 미친 짓입니다. 이 실수를 하면 git 항목 vi가 파일에 기록되지 않기 때문에 갑자기 커밋 메시지가 손실됩니다.
파일에 쓸 때 실제 오류가 없는 한 더 이상 발생하지 않고 항상 0을 반환하도록 이 동작을 수정하려면 어떻게 해야 합니까?
답변1
이는 vim에서 의도적으로 수행됩니다.
/* Ex 모드에서 실행할 때 오류로 인해 0이 아닌 종료로 종료되었습니다. * 코드. POSIX에서는 이것이 필요하지만 * 기준. */ if(exmode_active) 종료 값 += ex_exitval;
- 이
ex_exitval
변수는 오류 메시지에 의해 설정됩니다.emsg
:
Called_emsg = TRUE; if (emsg_silent == 0) ex_exitval = 1;
- 그리고
ex_exitval
는안 돼요삭제되었습니다.
따라서 ex 모드에서는 "모든" 오류 메시지(:
명령)이 결과를 생성합니다. 빠른 확인을 통해 vi 모드 ZZ
도 ex 모드 오류 메시지의 영향을 받는다는 것을 알 수 있습니다.