search
LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

Macでgit commitが失敗する場合の対応

検証環境

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
vi.log
...
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を使用するのでここまで。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5