検証環境
OS X 10.9.5
状態
コミット時に以下のようなエラーメッセージが出力されコミットに失敗してしまう。
$ git commit
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
対応
コミット時のエディタを指定する。
指定する際にはシンボリック・リンクの"vi"ではなく、実体の"vim"を指定する。
$ git config --global core.editor "vim"
補足
今回の障害は、エディタが0以外の終了コードを返すことが原因である。
core.editorが未設定かつ、環境変数EDITORが設定されていない場合、コミット時のエディタとしてviが呼び出される。
追加インストール等をしていない状態ならば、/usr/bin/viは、/usr/bin/vimへのシンボリック・リンクになっている。
gitからの呼び出しではなく直接コマンドにより、vimを起動してファイルを編集した後の終了コードを確認すると、シンボリック・リンク経由で起動した場合のみ、終了コードが1になっている。
$ which {vi,vim}
/usr/bin/vi
/usr/bin/vim
$ ll /usr/bin/{vi,vim}
lrwxr-xr-x 1 root wheel 3929 15:29 /usr/bin/vi@ -> vim
-rwxr-xr-x 1 root wheel 1472736929 15:28 /usr/bin/vim*
$ vi code.rb
$ echo$?
1
$ vim code.rb
$ echo$?
0
シンボリック・リンク経由の起動を回避するため、コミット時のエディタに"vim"を指定する。
追記
もっと発生の原因を特定するために.vimrc
の内容を絞り込んだ結果、filetype off
が原因であることが分った。
ログ出力を指定して実行した結果、エラーが発生していることが分かる。
$ /usr/bin/vi -V9vi.log code.rb
...Errordetectedwhileprocessing/usr/share/vim/vim73/ftoff.vim:line11:E216:Nosuchgrouporevent:filetypedetect*...
autocommand
で登録されたコマンドを削除するためにau!
コマンドを実行しているが、削除対象が無いためエラーとなっている。
試しにfiletype off
より前にfiletype on
を記述しておくとエラーとならず終了コードも0となる。
また、呼び出し方としてシンボリック・リンクが問題となっているかを確認するために、適当な名前で新規にシンボリック・リンクを作成した結果、パスとしてvi
となっている場合のみ終了コードが1になってしまう事が分った。
$ cat .vimrc
filetype off
$ sudo ln -s /usr/bin/vim /usr/bin/aaa
$ /usr/bin/aaa code.rb
$ echo$?
0
$ sudo mv /usr/bin/aaa /usr/bin/vi
$ /usr/bin/vi code.rb
$ echo$?
1
Homebrewでインストールしたvim
ではどうなるかというと、ログ上では同じエラーが発生しているが、終了コードには影響しない。ついでにUbuntu 14.04上でも試してみたが終了コードは0である。
…OS Xに初期状態でインストールされている Vim version 7.3固有の問題のようですが、もうVim version 7.4を使用するのでここまで。