我使用“git diff with vimdiff”作为指导,将git diff封装到vimdiff中,除非有许多文件发生更改,否则它会按预期工作。

当有多个文件的变化,我运行git diff,它打开第一个文件,退出vimdiff的第一个实例后,我呈现以下消息:

external diff died, stopping at filename

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

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


当前回答

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的difftool,它是专门用来做这些事情的。

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

git config diff.tool vimdiff

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

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>

在我的例子中,我将<工具名称>设置为nvim -d,并使用

git d <file>

如果你想永久地使用vimdiff来表示git的diff,你可以设置~/。gitconfig文件:

git config --global diff.tool vimdiff

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

如果只是临时使用vimdiff,可以每次都执行以下命令:

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

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

导航命令,

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

混叠(示例)

git config --global alias.d difftool

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

先进的用例,

默认情况下,git使用-R选项调用vimdiff。你可以用git配置——global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'来覆盖它。这将以可写模式打开vimdiff,允许在差分时进行编辑。 :wq在vim中循环到变更集中保存的下一个文件。