如何让git difftool使用gvim(gvimdiff)?

7

似乎git发生了变化,导致它不再与gvim作为差异工具正常工作。具体来说,我总是使用gvim -geometry标志来最大化窗口。现在,我最终会得到一个空白的窗口(空/零行文件)。


我们需要您的实际git配置才能提供帮助。另外,当您推测“git中的更改”时,提到Git版本是有意义的,对吧?! - Ingo Karkat
2个回答

5

好的,我找到了答案。为了正确工作,gvim必须保持在前台,并且不能像通常那样分叉出一个新进程。这可以通过在启动gvim(或gvimdiff)时使用-f--nofork标志来实现。

我现在设置了以下可行的别名:

alias gitdg='git difftool --noprompt --extcmd="gvim -d --nofork -geometry 220x80+2000+40" '

请注意单引号和双引号的使用,以确保zsh shell正常运行。
我使用gvim选项-geometry配置差异窗口大小为220行x80列。"+2000+40"表示窗口的左上角相对于所有监视器的左上角水平偏移2000像素,垂直偏移80像素,因此该窗口将出现在我2个监视器设置中的右侧监视器上。尝试将其设置为-geometry 160x40+60+20以查看更改的效果。

1
如果你愿意,你也可以用“gvimdiff”代替“gvim -d”。 - Alan Thompson
1
在Windows Server 2012R2上,我能够使用以下命令:git difftool --no-prompt --extcmd="'C:\Program Files (x86)\Vim\vim81\gvim' -d -f",这使我达到了我想要的目的。谢谢。 - Jim

5
在Windows Server 2012R2上,将以下内容添加到我的.gitconfig文件中也适用于我。 我的经验是,对于我的设置,-d和-f并不是必要的。 即使这是Windows,确保您使用正斜杠“/”来表示路径信息。
[alias]
    d = difftool
[diff]
    tool = gvimdiff
[difftool]
    prompt = false
[difftool "gvimdiff"]
    path = "C:/Program Files (x86)/Vim/vim81/gvim.exe"

样例运行...

c:\>git d index.html

我还发现我在我的_vimrc中为diffexpr定义了一个函数,需要这样注释掉...
"set diffexpr=MyDiff()

...这允许“新的”内置差异在gVim中起作用。通过这些更改,gui vim中的一切都可以运行。


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