Git提交信息在vi中丢失

31

我打字很笨拙,也不经常使用vi/vim,但我用它来提交信息。然而,如果你在编辑提交信息时输入了错误的命令(比如 :Wq 而不是 :wq),当你使用:wq:x正确关闭vim中的提交信息后,你会得到以下结果:

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

通常,一个错误的命令(比如:W)并不会有问题——vim 会忽略它,您可以继续处理文件并保存它,但是在git提交消息中,一旦我打错字,我就无法挽回地丢失了提交消息。

这是怎么回事,我该怎么解决?(使用通过homebrew安装的git 1.9.1,在OS X 10.9中打包的vim 7.3)


我的解决方案和其他问题一直是切换到 nano - Darkhogg
6
虽然其他人可能会回答您确切的问题,但我有一个小技巧要分享:在我使用的 macOS 上的 git 版本(通过 XCode 安装),我可以通过查看存储库的 .git 目录中的 COMMIT_EDITMSG 文件来恢复“丢失”的提交信息。 - martian111
3个回答

40

您应该将 vim 设置为不与 shell 分离并处于前台。您可以使用以下命令来实现此操作:

git config --global core.editor vim -f

来自这个人:

   -f          Foreground.  For the GUI version, Vim will not fork and detach from the shell it
               was  started in.  On the Amiga, Vim is not restarted to open a new window.  This
               option should be used when Vim is executed by a program that will wait  for  the
               edit  session  to  finish (e.g. mail).  On the Amiga the ":sh" and ":!" commands
               will not work.

2
我不确定在不引用该值的情况下如何使其工作。我认为最后一部分应该加上引号:"vim -f" - David Cook

1

我的解决方案:

git config --global core.editor vim

我认为这就是Vim和Vi之间的区别(尽管大多数平台上的vi实际上是在兼容模式下运行的Vim)。请注意,Git默认使用vi,你可以从文档中了解到:

首选项顺序是$GIT_EDITOR环境变量,然后是core.editor配置,然后是$VISUAL,然后是$EDITOR,最后是编译时选择的默认值,通常是vi

在我的机器上(macOS),完整路径没有任何区别(这是预期的);vim/usr/bin/vim相同,vi/usr/bin/vi相同。

注意:你也可以从错误消息中了解到程序的信息:

error: There was a problem with the editor 'vi'.

引用的vi正是你的编辑器命令。你可以通过以下方式进行验证

GIT_EDITOR='false -a -b' git commit

-1

正如几篇帖子中提到的那样,vim 退出时会返回非零的退出代码。您可以通过显式设置 git 编辑器为完整的 vim 路径来解决此问题:

git config --global core.editor /usr/bin/vim

如果我没记错的话,我是通过安装Homebrew版的Vim解决了这个问题。确保你的路径设置正确。


我刚刚检查了一下 - 打开vim,输入了错误的命令,然后正确地输入了:wq,并检查了退出代码(echo $?),退出代码为0。 - Ayush

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