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
または、他の方法でセットアップを調整しているときに誤って修正したプラグイン。私がそれを修正するために何をしたかを正確に追跡できれば、私は間違いなくその情報で更新します。答えてくれてありがとう。
ありますか 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
私は2つの考えられる説明を考えることができます。
vim
は実際にはエイリアスです。 which
はエイリアスを表示しないので、代わりにtype
を使用する必要があります (cshまたはtcshを実行している場合を除く)。
Vimはインストールディレクトリからの相対パスでファイルを探しに行きます。これはargv[0]
(シェルから渡された実行可能ファイルの名前)を見て決定しますが、呼び出された場合、どういうわけかそのパスを見つけることができません。相対パスを介して。それは技術的には可能ですが、Vimが実際にそうすることはないと思います。
単にvimを実行してから終了すると、ゼロ以外の終了コードが返されます。
Snow LeopardとVimのストックバージョンという同様のシステムでは、これはここでは起こりません。
次のコマンドを試してください。
_$ Sudo dtruss vim +q
_
これにより、Vimが初期化してすぐにシャットダウンする間に行うすべてのシステムコールのリストが表示されます。 (以前に使用したことがある場合、dtruss
はLinuxのstrace
と同等です。)
あなたが探しているのは、エラーコードを示す最後に近い行で、通常は-1です。システムコールの引数を見ると、問題が発生するはずです。可能性が高い可能性の1つはファイルの欠落です。これはおそらくopen()
呼び出しで表示されます。
この方法で実行したときにVimが正常に終了する場合は、おそらくSudo
がdtruss
を実行できるようにするために必要な権限の問題が発生しています。その場合は、おそらく 権限の修復 で修正できます。
この戻りコードの問題が発生しました。私は、永続的なビューを提供する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に設定されていました。