使用vimdiff查看所有' git diff '

我设置了git diff来包装到vimdiff,使用“Git Diff与Vimdiff”作为指导,除非有很多文件发生变化,否则它会像预期的那样工作。

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

external diff died, stopping at filename

这和我以前的行为完全不同。我过去在SVN上有类似的设置,当对多个文件进行差异时,我会检查第一个文件,然后使用:wq编写并退出,下一个有差异的文件将打开。

Git不是这样的。我尝试了:n[ext],但这样做不会用原始文件填充左窗口,以便它可以与修改后的版本进行区分。

144525 次浏览

你可以尝试git difftool,它被设计来做这些事情。

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

git config diff.tool vimdiff

然后,当你想要diff时,只需使用git difftool而不是git diff。它会像你期望的那样工作。

git config --global diff.tool vimdiff
git config --global difftool.prompt false

输入git difftool会产生预期的行为。

导航命令,

  • 在vim中:qa循环到更改集中的下一个文件而不保存任何东西。

混叠(示例)

git config --global alias.d difftool

.. 将允许你输入git d来调用vimdiff。

先进的用例,

  • 默认情况下,git使用-R选项调用vimdiff。你可以用git配置重写它——global difftool.vimdiff.cmd 'vimdiff "$LOCAL"“REMOTE"美元”。这将以可写模式打开vimdiff,允许在差分时进行编辑。
  • 在vim中:wq循环到更改集中保存更改的下一个文件。
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

对于那些想要使用git中未列出的另一个diff工具的人,比如使用nvim。这是我最终使用的:

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

在我的例子中,我将<tool name>设置为nvim -d并调用diff命令

git d <file>

如果你想永久地为git diff使用vimdiff,你可以设置~/.gitconfig文件:

git config --global diff.tool vimdiff

然后你可以使用git difftool来diff。

如果你只想临时使用vimdiff,你可以每次都运行这个命令:

git difftool --tool=vimdiff