使用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来解决这个问题。 然而,他以“我还想解决问题的根源”为结尾。
尝试这个:
- 启动一个
git commit
让自己进入一个vim
编辑器。 - 按
<CTRL> + Z
停止进程并退回到TTY -
做一个
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
-
回到你的vim进程,用
fg %1
(或者你的git commit
被列为的停止工作号)。
那个shell输出告诉我们的是…
- 我正在使用ttys005
- 在称为
git
的TTYbash
,称为vi
git
-
vi
的完整path是/usr/bin/vi
-
vi
命令是vim
的符号链接 - 调用
<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
标志的情况下才能使用它。