用vimdiff查看所有`git diffs`


209

我设置git diff为使用“ 带有Vimdiff的Git Diff ”包装为vimdiff,除非有很多更改的文件,否则它将按预期工作。

当有多个具有更改的文件并且我运行时git diff,它将打开第一个文件,并在退出vimdiff的第一个实例后,显示以下消息:

external diff died, stopping at filename

这是与我以前完​​全不同的行为。过去我使用SVN进行了类似的设置,当比较多个文件时,我将检查第一个文件,然后使用写入并退出,然后:wq打开下一个有差异的文件。

Git并非如此。我尝试了:n[ext],但是这样做并没有用原始文件填充左窗口,因此可以将其与修改后的版本进行比较。

Answers:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

键入会git d产生预期的行为,:wq在vim循环中键入更改集中的下一个文件。


22
只是我的两分钱:我已df别名diffdt别名为difftool。另外,:qa在Vim中键入内容将循环到下一个更改集,而不保存任何内容。
JC Yamokoski 2012年

2
该解决方案很棒,除了在保存更改时必须键入“:w!”之外。代替:w
Asenar

2
@jonyamo设置别名应始终基于我们使用某些命令的频率。我经常使用git diffgit difftool。因此,我已将别名化为' ddiff'和'dt' to difftool'。可用性比使用模式创建别名更重要。
Habeeb Perwad 2014年

如何使“ git diff”使用vimdiff ?,此答案使我使用别名。如果我别名为“ diff”,则不起作用。
Rombus '16

6
@Asenar “此解决方案很棒,除了保存更改时必须键入:w!而不是:w“。那是因为git调用vimdiff了该-R选项。您可以使用覆盖它git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'。这将以可写模式打开vimdiff。
wisbucky

103

您可以尝试git difftool,它是专门用来做这些事情的。

首先,您需要将diff工具配置为vimdiff

git config diff.tool vimdiff

然后,当您想要比较时,只需使用git difftool代替即可git diff。它会按您期望的那样工作。


1
差不多了!修改了一下,这正是我想要的。+1!
chuckg's

1
vimdiff mergetool最近已更新:git.kernel.org/?p=git​​/…(以及其他一些提交,但这是最大的提交)。不确定何时发布下一个维护版本,但是如果您愿意从git.git进行构建,升级将是您的!
卡斯卡贝尔

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
您需要的是mergetool,而不是difftool。但这仍然是一个有用的答案。+1。
dotancohen

@dotancohen真的,谢谢,我从来没有注意到,现在我可以编辑我的答案了。
南河库玛尔

1
@NanheKumar,@dotancohen,替换mergediff上面的答案会做的伎俩, git config --global diff.tool vimdiff
2013年

2

对于想使用git中未列出的其他差异工具的人,请使用nvim。这是我最终使用的:

git config --global alias.d difftool -x <tool name>

就我而言,我设置<tool name>为,nvim -d并使用

git d <file>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.