OSXでは、viはエラーがないにもかかわらず予期せず1を返すようです。

OSXでは、viはエラーがないにもかかわらず予期せず1を返すようです。

したがって、デフォルトのMac OSX Yosemiteで実行し、いくつかのvi /tmp/fooテキストを入力して最後に実行した場合:Wq(よく作成するタイプミス):wq...すべてが問題ないようですが、何らかの理由で終了コードは1になります。同じ操作を繰り返したがそれを実行しない場合は、:Wq0が返されます。

これは、コミットメッセージを入力するgitコミットについてクレイジーです。この間違いをすると、gitエントリviがファイルに書き込まれないため、突然コミットメッセージが失われます。

ファイルに書き込むときに実際のエラーがない限り、これ以上発生せずに常に0を返すようにこの動作を変更するにはどうすればよいですか?

答え1

これはvimで意図的に行われます。

  • これ":wq"コマンド呼び出し、ex_exit
  • どの電話getout名目上終了コードを含む0
  • 存在するgetout、ex-modeでエラーを確認するコメント
    / * Exモードで実行すると、エラーのためゼロ以外のシャットダウンで終了しました。
     *コード。 POSIXではこれが必要ですが、
     *基準。 */
    if(exmode_active)
        終了値+ = ex_exitval;
  • このex_exitval変数はエラーメッセージによって設定されます。emsg:
    Called_emsg = TRUE;
    if(emsg_silent==0)
        ex_exitval = 1;
  • そしてex_exitvalいいえ削除されました。

したがって、exモードでは、「すべての」エラーメッセージ(:コマンド) この結果を生成します。クイックチェックにより、viモードZZもexモードエラーメッセージの影響を受けることがわかります。

関連情報