因为,有一天突然发现git提交的时候不能写log了,于是就发现了这个诡异的问题。还好万能的网友已经给出了解决办法。
git + vim + mac, 下才会出现这样的情况。
原贴在这里:http://www.phpvim.net/app/vim/fix-issue-there-was-a-problem-with-editor-vim.html
和 Subversion 一样,Git 也可以为 Commit Message 设置一个默认的编辑器,命令如下:
不过我在 Mac OS X 系统使用 Git 的过程中,偶尔会遇到如下的情况:
这种情况基本上都是出现在我打错字的时候,开始以为是输入法引起的 Vim 状态异常,不过出现的次数多了才慢慢发现一个规律——如果在 Vim 中编辑文本时因为按键失误出现类似这样:E492: Not an editor command… 的错误信息时,必然无法提交。
查了一下 ProGit 的文档后了解到:如果 Git 的 Commit Hooks 检测到脚本的返回非零状态码的话(Non-Zero Code,表示有错误发生),会阻止本次提交。到这里问题就比较清晰了,显然是 Vim 非正常退出返回了 Non-Zero Code。
为了验证猜测,我作了如下操作,打开终端 Vim,随便输入几个无效指令,造成 Exxx 之类的错误,然后立刻使用 :q 退出,观察返回値,结果:
果然是这样呢!
后来在 Google Group: vim_mac 这个帖子中找到了解决的办法,就是使用完整的 Vim 路径—— /usr/bin/vim :
不太清楚 Mac OS X 中 Vim 为何会有这种问题,Bram 老大亲自现身作了解释:
Vim 在遇到 Exx Error 时返回 Non-Zero code 是为了兼容 Posix,不过这种情况应该只会出现在使用 Ex Mode 时,Normal/Insert Mode 是不会这样的。