web-dev-qa-db-ja.com

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

SnowLeopardで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または、他の方法でセットアップを調整しているときに誤って修正したプラグイン。私がそれを修正するために何をしたかを正確に追跡できれば、私は間違いなくその情報で更新します。答えてくれてありがとう。

15
Hank Gay

ありますか filetype offあなたのvimrcで?置き換えてみてください:

filetype on
filetype off

OS XでTim PopeのPathogenを使用してこの問題が発生しました。 この記事 が問題の解決に役立ちました。 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

14
Brandon Bloom

私は2つの考えられる説明を考えることができます。

  1. vimは実際にはエイリアスです。 whichはエイリアスを表示しないので、代わりにtypeを使用する必要があります (cshまたはtcshを実行している場合を除く)。

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

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

Snow LeopardとVimのストックバージョンという同様のシステムでは、これはここでは起こりません。

次のコマンドを試してください。

_$ Sudo dtruss vim +q
_

これにより、Vimが初期化してすぐにシャットダウンする間に行うすべてのシステムコールのリストが表示されます。 (以前に使用したことがある場合、dtrussはLinuxのstraceと同等です。)

あなたが探しているのは、エラーコードを示す最後に近い行で、通常は-1です。システムコールの引数を見ると、問題が発生するはずです。可能性が高い可能性の1つはファイルの欠落です。これはおそらくopen()呼び出しで表示されます。

この方法で実行したときにVimが正常に終了する場合は、おそらくSudodtrussを実行できるようにするために必要な権限の問題が発生しています。その場合は、おそらく 権限の修復 で修正できます。

7
Warren Young

この戻りコードの問題が発生しました。私は、永続的なビューを提供するvimrcでサイレントに実行されているloadviewコマンドまでさかのぼります。

" 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に設定されていました。

2
David Thomas