Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

検証環境

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>