OSX에서 vi는 오류가 없음에도 불구하고 예기치 않게 1을 반환하는 것 같습니다.

OSX에서 vi는 오류가 없음에도 불구하고 예기치 않게 1을 반환하는 것 같습니다.

따라서 기본 Mac OSX Yosemite에서 실행한 vi /tmp/foo다음 일부 텍스트를 입력하고 마지막으로 실행하면 :Wq(자주 만드는 오타) :wq... 모든 것이 괜찮아 보이지만 어떤 이유로 종료 코드는 1이 됩니다. 동일한 작업을 반복했지만 이를 수행하지 않으면 :Wq0이 반환됩니다.

이것은 커밋 메시지를 입력하는 git 커밋에 대해 미친 짓입니다. 이 실수를 하면 git 항목 vi가 파일에 기록되지 않기 때문에 갑자기 커밋 메시지가 손실됩니다.

파일에 쓸 때 실제 오류가 없는 한 더 이상 발생하지 않고 항상 0을 반환하도록 이 동작을 수정하려면 어떻게 해야 합니까?

답변1

이는 vim에서 의도적으로 수행됩니다.

  • 이것":wq"명령 호출,ex_exit,
  • 어느 전화getout명목상 종료 코드 포함0,
  • 존재하다getout, ex-mode에서 오류를 확인하는 주석
    /* 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 모드 오류 메시지의 영향을 받는다는 것을 알 수 있습니다.

관련 정보