vimを開いてすぐに終了すると、なぜゼロ以外の終了コードを返すのですか?

vimを開いてすぐに終了すると、なぜゼロ以外の終了コードを返すのですか?

Snow Leopardで奇妙な問題に封じ込められました。vim単に実行して終了すると、ゼロ以外の終了コードが表示されます。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

私は2つの可能な説明を考えることができます。

  1. vim実際にはエイリアスです。気づくwhichエイリアスを表示したくない場合は、以下をtype使用する必要があります。(cshやtcshを実行しない限り)

  2. Vim はインストールディレクトリの相対パスでファイルを探します。これはargv[0]、シェルから渡された実行可能ファイルの名前を調べることによって決定されます。相対パスを介して呼び出すと見つかりません。これは技術的には可能ですが、Vimが実際にはそうするとは思いません。

答え3

単にvimを実行して終了すると、ゼロ以外の終了コードが得られます。

これには、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に設定されます。

関連情報