更新Janus后,使用vim提交git消息出现问题

51

更新Janus Vim分发后,使用Vim进行提交消息时似乎出现了问题。最好的例子就是在执行git pull以获取别人的更改时。Vim编辑器被显示出来,我输入我的提交消息,然后输入:wq,但提交没有生效,我收到以下错误消息:

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

我之后必须手动提交 :(

如何让git与vim友好共处?

5个回答

100

经过一番谷歌搜索,结果发现答案是运行以下命令:

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

2
请阅读以下与编程有关的内容:相关阅读 tooky.co.uk/there-was-a-problem-with-the-editor-vi-git-on-mac-os-x/ - Bradley Flood

11

Nat Ritmeyer提供了正确的解决方案。我会告诉你原因。

正如Steve Tooke所解释的那样,隐藏你的~/.vimrc或显式地告诉git使用完整路径到vim可以解决这个问题。然而,他以"我仍然想找到问题的根源"结束。

尝试以下步骤:

  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
  • 使用fg %1(或者你的 git commit 的作业号)回到你的vim进程。

  • 这个Shell输出告诉我们的是...

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

    所以,vi和vim是相同的命令?!? 是的,但是vim注意到它的argv[0]vi,并以兼容模式运行。这可能会根据你的.vimrc文件中的内容引起问题。

    最好的解决方案是告诉git使用vim,但我建议你不要假定你的vim路径与其他人的相同(也许你是通过brew install vim安装的)

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

    5

    这可能是一个插件或者您的.vimrc配置文件中的某些设置。在安全模式下加载vim以编辑提交信息最好的方法是使用以下命令:

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

    请参考http://vimdoc.sourceforge.net/htmldoc/starting.html#vim-arguments,[Mr Wilde](http://stackoverflow.com/users/1009774/mr-wilde)建议在前台运行`vim`,保持与git进程的连接,并且不使用`vimrc`配置文件(没有插件)。这确实解决了我来这里的问题,但也引入了其他问题,因为这会导致`vim`的形式非常有限。 - Bodhi

    2

    每次我从远程仓库获取并与另一个分支合并时,都会遇到相同的问题。

    在终端中输入以下命令可以解决该问题:

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

    请注意,保留HTML标签。


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

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接