열린 직후에 종료하면 vim에서 0이 아닌 종료 코드를 반환하는 이유는 무엇입니까?


15

vimSnow Leopard에서 이상한 문제가 발생했습니다 vim. 간단히 실행 한 다음 종료 하여 0이 아닌 종료 코드를 얻습니다 .

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

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

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

처음에 나는 vim내 길의 어딘가에서 오는 줄 알았지 만 :

$ which vim
/usr/bin/vim

그래서 나는 길을 잃었다. 이 문제의 원인은 무엇입니까?

업데이트 :이 문제는 마술처럼 스스로 해결되어 매우 의심 스럽습니다. 내 현재 최고의 이론은 .vimrc다른 방법으로 설정을 조정하는 동안 실수로 수정 ​​한 플러그인 또는 플러그인에 문제가 있다는 것입니다. 문제를 해결하기 위해 수행 한 작업을 정확하게 추적 할 수 있으면 해당 정보로 업데이트됩니다. 답변 주셔서 감사합니다.


-u NONEvim에게 설정 파일을 전혀로드하지 않도록 지시 하는을 추가하여 Makefile에서 수정했습니다 . 상황에 따라 도움이 될 수 있습니다.
Boldewyn

답변:


14

당신이 있습니까 filetype off당신의 vimrc에? 다음과 같이 바꾸십시오.

filetype on
filetype off

OS X에서 Tim Pope 's Pathogen을 사용하여이 문제 가 발생했습니다. 이 기사를 통해 문제를 해결할 수있었습니다. 병원체를 사용하는 경우 ...

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


이것은 좋은 지적입니다. 나는 이미이 특정 문제를 해결했지만 실수로 내 다른 곳에서 실수로 오류를 수정했다고 의심하게되었습니다 .vimrc.
행크 게이

이것은 병원체가 아닌 Vundle을 제외하고는 동일한 문제를 해결했습니다.
Jonah Braun

다른 +1을 추가하는 것과 마찬가지로 이것은 오래된 수정이지만 OSX 시스템에서 Vundle을 사용 하여이 문제를 해결하는 데 효과적이었습니다. 그냥 filetype on기존 위에 던졌습니다 filetype off.
Mikey TK

8

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

  1. vim실제로는 별명입니다. 참고 which별칭을 표시하지 않습니다, 당신은 사용해야하는 type대신에 (당신이 CSH 또는 tcsh를 실행하지 않는 한).

  2. Vim은 설치 디렉토리를 기준으로 경로에서 일부 파일을 찾습니다.이 디렉토리 argv[0]는 쉘에서 전달 된 실행 파일의 이름을 보고 결정 하며 상대 경로를 통해 호출 된 경우 해당 경로를 찾지 못합니다. 그것은 기술적으로 가능하지만 Vim은 실제로 그렇게 생각하지 않습니다.


7

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

스노우 레오파드 (Snow Leopard)와 Vim의 스톡 버전과 비슷한 시스템에서는 여기서 일어나지 않습니다.

이 명령을 시도하십시오 :

$ sudo dtruss vim +q

Vim이 초기화되고 즉시 종료되는 동안 모든 syscall 목록을 얻을 수 있습니다. ( 이전에 사용했던 Linux의 경우 dtruss와 동일합니다 strace.)

찾고있는 것은 끝에 가까운 줄이며 일반적으로 -1 오류 코드를 보여줍니다. 시스템 호출에 대한 인수를 보면 문제가 발생할 수 있습니다. 가능성이 높은 가능성 중 하나는 파일이 누락되어 open()통화 에 표시 될 수 있습니다.

이 방법을 실행하면 빔이 정상적으로 종료되면, 당신은 아마 권한 문제가 sudo수 있도록 필요한 dtruss실행이 주변에 점점에 있습니다. 이 경우 권한복구 하여 문제를 해결할 수 있습니다 .


죄송합니다. 현재 작업중인 컴퓨터에이 동작이 없습니다. 그래도 집에있는 기계에 다시 들어가면 확인해 볼 것입니다.
행크 게이

당신이 그것을 알아낼 수 없다면, dtruss질문에 출력을 추가하십시오 . (또는 적어도 마지막 25 줄 정도) 이해하기 어려운 것이 다른 답을 올바른 답으로 인도 할 수 있습니다.
워렌 영

@nlucaroni : 다행입니다. 그러나 후손을 위해, 내 대답의 두 가지 아이디어 중 어느 것이 그것을 고쳤습니까? 즉, sudo"수정 된" 권한 문제가 있어 복구 권한을 실행해야한다는 것을 알려 주었습니까? 아니면 오히려 dtrusssyscall 오류 를 보여 주었습니까? 그렇다면 어떤 오류가 발생했으며 그 이유는 무엇입니까?
워렌 영

없는 파일을 열 때 syscall 오류가 발생합니다. 동료가 방금 다른 사람의 zipp'd .vim디렉토리 및를 가져 왔으며 .vimrc사용하지 않는 플러그인에서 전체 경로와 누락 된 파일이있었습니다.
nlucaroni 2013

2

이 리턴 코드 문제가 발생했습니다. 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로 설정되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.