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


15

vimSnow Leopardで奇妙な問題が少し発生してい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他の方法で設定を微調整しているときに、自分またはプラグインに問題があり、誤って修正したことです。私がそれを修正するために行ったことを正確に追跡できれば、私は間違いなくその情報で更新します。答えてくれてありがとう。


Makefileでを追加して修正しました-u NONE。これは、vimに設定ファイルをまったくロードしないように指示します。状況によっては役立つ場合があります。
ボルデウィン

回答:


14

あなたは持っていますfiletype offあなたのvimrcに?置き換えてみてください:

filetype on
filetype off

OS XでTim Popeの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
ハンクゲイ

これにより、PathogenではなくVundleを除いて、私にとって同一の問題が修正されました。
ジョナブラウン

別の+1を追加するのと同じように、これは古い修正ですが、OSXシステムでVundleを使用してこの問題を修正するのに役立ちました。ちょうどfiletype on既存の上に投げたfiletype off
マイキーTK

8

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

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

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


7

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

ここでは似たようなシステム、Snow Leopard、およびVimのストックバージョンでは発生しません。

このコマンドを試してください:

$ sudo dtruss vim +q

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

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

この方法で実行したときにVimが正常に終了した場合は、おそらく許可の問題があります。実行sudoを許可dtrussするために必要なのは、この問題を回避することです。その場合は、おそらく権限修復することで修正できます。


申し訳ありません-私は今作業中のマシンを使用していますが、この動作はありません。ただし、ホームマシンに再度アクセスしたら、必ずチェックしてください。
ハンクゲイ

理解できない場合はdtruss、質問に出力を追加してください。(または、少なくとも、最後の25行程度)。あなたにとって理解できないことは、別の答えにつながる可能性があります。
ウォーレンヤング

@nlucaroni:それを聞いてうれしい。しかし、後世のために、私の答えの2つのアイデアのどちらがそれを修正しましたか?つまり、アクセス許可の問題をsudo「修正」し、「アクセス許可の修復」を実行する必要があることを知らせましたか?それともdtruss、システムコールエラーを示したのではなく、もしそうなら、どのエラーと失敗したのですか?
ウォーレンヤング

存在しないファイルを開く際のsyscallエラー。私の同僚は、他の人のzipp'd .vimディレクトリとを取得したばかり.vimrcで、物事にはフルパスがあり、未使用のプラグインからのファイルがありませんでした。
nlucaroni

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.