使用vim来更新janus之后破坏的git commit消息

在更新janus vim分发之后,使用vim提交消息似乎有问题。 最好的例子就是在做一个git pull来取得别人的改变。 显示vim编辑器,我键入我的提交信息,我input w q而不是提交工作,我得到以下错误信息:

 error: There was a problem with the editor 'vi'. Not committing merge; use 'git commit' to complete the merge. 

然后我必须手动提交:(

我怎样才能让git和vim很好的搭配?

经过一番search后,结果发现答案是运行以​​下内容:

 git config --global core.editor $(which vim) 

Nat Ritmeyer已经给出了正确的解决scheme 。 我会给你的理由。

正如Steve Tooke所解释的那样 ,隐藏你的~/.vimrc或者明确告诉git使用vim的完整path来解决这个问题。 然而,他以“我还想解决问题的根源”为结尾。

尝试这个:

  1. 启动一个git commit让自己进入一个vim编辑器。
  2. <CTRL> + Z停止进程并退回到TTY
  3. 做一个ps并注意你的TTY(你用tty命令得到的号码),就像…

     $ tty /dev/ttys005 $ ps PID TTY TIME CMD 17547 ttys005 0:00.15 -bash 65126 ttys005 0:00.02 git commit 65127 ttys005 0:00.10 vi .git/COMMIT_EDITMSG $ which vi /usr/bin/vi $ ll /usr/bin/vi lrwxr-xr-x 1 root wheel 3 Oct 3 17:40 /usr/bin/vi -> vim $ jobs [1]+ Stopped git commit 
  4. 回到你的vim进程,用fg %1 (或者你的git commit被列为的停止工作号)。

那个shell输出告诉我们的是…

  1. 我正在使用ttys005
  2. 在称为git的TTY bash ,称为vi git
  3. vi的完整path是/usr/bin/vi
  4. vi命令是vim的符号链接
  5. 调用<CTRL> + Z停止了git commit命令,它在作业堆栈中是#1。

所以, vi是和vim相同的命令?!?! 是的,但vim注意到它的argv[0]vi并且以兼容模式运行 。 这可能会导致问题取决于你的.vimrc

最好的解决scheme是告诉git使用vim,但是我build议你不要假设你的vimpath和其他人一样(也许你是通过brew install vim

 git config --global core.editor $(which vim) 

这可能是一个插件或你的.vimrc文件中的东西。 在安全模式下加载vim来编辑提交消息的最好方法是使用:

 git config --global core.editor '/usr/bin/vim -f -u NONE' 

每当我从远程仓库获取并将其与另一个分支合并时,我都面临同样的问题。

在terminalinput这个固定它给我

git config --global core.editor $(which vim)

如果由于某种原因, git config --global core.editor /usr/bin/vim不起作用,请尝试不使用--global标志。 我只能在没有--global标志的情况下才能使用它。