vim을 연 후 즉시 종료하면 왜 0이 아닌 종료 코드를 반환합니까?

vim을 연 후 즉시 종료하면 왜 0이 아닌 종료 코드를 반환합니까?

Snow Leopard에서 이상한 문제에 봉착했습니다. vim단순히 실행하고 종료하면 0이 아닌 종료 코드가 표시됩니다.vim

$ vim
# exit immediately using :q
$ echo $?
1

그러나 전체 경로를 사용하면 vim이 동작이 표시되지 않습니다.

$ /usr/bin/vim
# exit immediately using :q
$ echo $?
0

처음에 나는 vim그것이 내 길의 더 이른 곳에서 온 것이라고 생각했지만:

$ which vim
/usr/bin/vim

그래서 나는 헤매고 있습니다. 원인은 무엇일까요?

업데이트: 이 문제는 마술처럼 저절로 해결되어 매우 회의적이었습니다. 현재 가장 좋은 이론은 .vimrc다른 방법으로 설정을 조정하는 동안 실수로 수정한 플러그인에 문제가 있다는 것입니다. 문제를 해결하기 위해 내가 수행한 작업을 정확히 추적할 수 있다면 해당 정보를 반드시 업데이트하겠습니다. 답변해 주셔서 감사합니다.

답변1

vimrc에 있습니까 filetype off? 다음으로 바꿔보세요:

filetype on
filetype off

Tim Pope의 Pathogen을 사용하여 OS X에서 이 문제에 직면했습니다.이 기사이 문제를 해결하는 데 도움이되었습니다. 병원균을 사용한다면..

call pathogen#runtime_append_all_bundles()

...대신 이렇게 하세요.

filetype on
filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
filetype plugin indent on

http://andrewho.co.uk/weblog/vim-pathogen-with-mutt-and-git

답변2

나는 두 가지 가능한 설명을 생각할 수 있습니다.

  1. vim실제로 별칭입니다. 알아채다which별칭을 표시하지 않으려면 다음을 type사용해야 합니다.(csh나 tcsh를 실행하지 않는 한)

  2. Vim은 설치 디렉터리의 상대 경로에서 파일을 찾습니다. 이는 argv[0]셸에서 전달된 실행 파일의 이름을 확인하여 결정됩니다. 상대 경로를 통해 호출하면 찾을 수 없습니다. 이는 기술적으로는 가능하지만 Vim이 실제로는 그렇게 한다고 생각하지 않습니다.

답변3

단순히 vim을 실행한 다음 종료하면 0이 아닌 종료 코드를 얻습니다.

여기에는 Snow Leopard와 Vim의 기본 버전이라는 유사한 시스템이 있기 때문에 그런 일이 발생하지 않습니다.

다음 명령을 시도해 보세요.

$ sudo dtruss vim +q

그러면 Vim이 초기화된 후 즉시 종료될 때 수행하는 모든 시스템 호출 목록이 제공됩니다. ( 이전에 사용한 적이 있다면 Linux에서도 dtruss동일합니다 .)strace

당신이 찾고 있는 것은 오류 코드(일반적으로 -1)를 표시하는 끝 근처의 줄입니다. 시스템 호출의 매개변수를 보면 문제가 발생합니다. 가능한 한 가지 가능성은 파일이 누락되어 통화 중에 표시될 수 있다는 것입니다 open().

sudo이 방법으로 실행할 때 Vim이 완전히 종료된다면 실행을 허용 해야 하는 권한 문제가 있을 수 있으며 dtruss현재 해결 중입니다. 이 경우에는 다음 방법으로 문제를 해결할 수 있습니다.수리 권한.

답변4

이 반환 코드 문제가 발생했습니다. loadview지속적인 뷰를 제공하는 vimrc에서 자동으로 실행되는 명령을 추적해 보았습니다 .

" Persistent views
if has("mksession")
    set viewdir=$HOME/.vimviews
    if has("unix")
        silent execute '!mkdir -p $HOME/.vimviews'
    endif
    au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc)
    au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursor, etc)
endif

파일 이름 없이 버퍼에 들어가면 실행되어 silent! loadview오류를 숨깁니다 .

E32: 파일 이름 없음

이로 인해 반환 코드도 1로 설정됩니다.

관련 정보