#検証環境
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 3 9 29 15:29 /usr/bin/vi@ -> vim
-rwxr-xr-x 1 root wheel 1472736 9 29 15:28 /usr/bin/vim*
$ vi code.rb
$ echo $?
1
$ vim code.rb
$ echo $?
0
シンボリック・リンク経由の起動を回避するため、コミット時のエディタに"vim"を指定する。
#追記2(解決)
いつの間にかツイートされてて、さらに答えが出ました。感謝。
「vi」という名前で起動すると、vi互換動作になり、vim限定の命令が無効になってしまうのが原因。
仕様通りの動作で、vi互換になるには他の条件もあるそうです。
これで、別バージョンで同じ状態になっても、しっかり対応できそうです。
さらに「ex」だとラインエディターになるそうです。
現環境で確認したら、しっかりvimでした。
$ ls -l /usr/local/bin/ex
lrwxr-xr-x 1 stupiddog admin 28 11 1 17:49 /usr/local/bin/ex@ -> ../Cellar/vim/7.4.488/bin/ex
$ ls -l /usr/local/Cellar/vim/7.4.488/bin/ex
lrwxr-xr-x 1 stupiddog admin 3 11 1 17:47 /usr/local/Cellar/vim/7.4.488/bin/ex@ -> vim
#追記1
もっと発生の原因を特定するために.vimrc
の内容を絞り込んだ結果、filetype off
が原因であることが分った。
ログ出力を指定して実行した結果、エラーが発生していることが分かる。
$ /usr/bin/vi -V9vi.log code.rb
...
Error detected while processing /usr/share/vim/vim73/ftoff.vim:
line 11:
E216: No such group or event: 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を使用するのでここまで。