Git 无法在 Cygwin 中启动 Vim

Kaz*_*ark 6 cygwin vim git vimdiff

我让 Git 在我的工作笔记本电脑(Windows 7)上的 Powershell 环境中使用 Vim。当我提交或使用我的git vimdiff别名时,它会弹出 Vim 。

我在 Cygwin 下尝试了相同的设置(本质上是一个 Unix 人)但是当我输入git commitor 时git vimdiff,Vim 没有弹出;看起来,虽然,Git 正在等待 Vim,因为该操作永远不会完成,直到我Ctrl- C(之后需要一分钟左右的时间才能恢复)。我可以使用内联提交消息 ( git commit -m "I would rather type this in Vim")进行提交,并且可以使用vim和从终端启动 Vim/Vimdiff vimdiff。我在多个地方将我的编辑器设置为 Vim:

$ echo $EDITOR
vim
$ git config --get core.editor
vim
Run Code Online (Sandbox Code Playgroud)

(一开始我并没有在Git中明确设置,只是在环境变量中设置了,还是出现了同样的问题。)

看来我在 Cygwin 中运行 Windows Git。作为 Cygwin 的新手,当我第一次问这个问题时,我没有意识到这一点。我可以看到这可能会如何导致问题,但是在玩了之后我还没有能够解决它。

有没有人见过这个问题?知道如何修复它吗?

Kaz*_*ark 10

感谢@skarface,我已经解决了关于提交的这个问题。首先,正如我在问题的编辑中提到的,结果我不是在 Cygwin 中运行 Cygwin Git,而是实际的 Windows Git。因此,集成问题是有道理的:它没有找到vimvimdiff

我必须做:

git config --global core.editor C:/cygwin/bin/vim.exe
Run Code Online (Sandbox Code Playgroud)

我不知道为什么上述工作,因为:

$ which vim
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)

但:

$ ls C:/cygwin/usr/bin
ls: cannot access C:/cygwin/usr/bin: No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以不确定为什么这是有效的路径,但确实如此。


我现在已经解决了关于差异的问题。我不得不:

$ git config --global diff.tool vimdiff
$ git config --global difftool.vimdiff.cmd  'C:/cygwin/bin/vim.exe -d "$LOCAL" "$REMOTE"'
Run Code Online (Sandbox Code Playgroud)

这让我可以用 Git 启动 Vimdiff,但仍然有一些小问题。我可以查看文件,但工具本身无法区分,出现以下错误:

差异错误

看起来这里发生的事情是 Git 以某种方式搞砸了 Vim 的shell选项。在我的.vimrc,我把这个命令:

set shell=bash
Run Code Online (Sandbox Code Playgroud)

现在一切顺利。