Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用vimdiff查看所有“git diff”_Git_Vim_Diff_Vimdiff - Fatal编程技术网

使用vimdiff查看所有“git diff”

使用vimdiff查看所有“git diff”,git,vim,diff,vimdiff,Git,Vim,Diff,Vimdiff,我使用“”作为指导,设置了git diff,将其包装到vimdiff中,它按照预期工作,除非有许多文件进行了更改 当有多个文件发生更改时,我运行git diff,它会打开第一个文件,退出第一个vimdiff实例后,我会看到以下消息: external diff died, stopping at filename 这与我习惯的行为完全不同。我在过去使用SVN时也有类似的设置,当与多个文件进行比较时,我会查看第一个文件,然后使用:wq写入并退出,然后打开下一个有差异的文件 Git的情况并非如此。

我使用“”作为指导,设置了git diff,将其包装到vimdiff中,它按照预期工作,除非有许多文件进行了更改

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

external diff died, stopping at filename
这与我习惯的行为完全不同。我在过去使用SVN时也有类似的设置,当与多个文件进行比较时,我会查看第一个文件,然后使用
:wq
写入并退出,然后打开下一个有差异的文件


Git的情况并非如此。我尝试了
:n[ext]
,但这样做并不能用原始文件填充左侧窗口,从而使其与修改后的版本有所不同。

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

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

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

git config --global diff.tool vimdiff
git config --global difftool.prompt false
键入
git difftool
将产生预期的行为

导航命令,
  • :vim中的qa
    循环到变更集中的下一个文件,而不保存任何内容
别名(示例) 。。将允许您键入
git d
来调用vimdiff

高级用例,
  • 默认情况下,git使用-R选项调用vimdiff。您可以使用git config--global difftool.vimdiff.cmd'vimdiff“$LOCAL”“$REMOTE”覆盖它。这将以可写模式打开vimdiff,允许在扩散时进行编辑
  • :wq
    在vim中循环到变更集中的下一个文件,并保存变更

对于想要使用git中未列出的另一个diff工具的人,可以使用
nvim
。以下是我最终使用的:

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

如果要永久使用
vimdiff
进行
git diff
,可以设置
~/.gitconfig
文件:

git config --global diff.tool vimdiff
然后您可以使用
gitdifftool
来区分

如果您只想临时使用
vimdiff
,您可以每次运行该命令:

git difftool --tool=vimdiff

快到了!修改了一点,这正是我要找的+1尽管如此!vimdiff合并工具最近进行了更新:(和其他一些提交,但这是最大的一个)。不确定下一个维护版本何时发布,但如果您愿意从git.git构建,升级将属于您!只有我的两分钱:我的
df
别名为
diff
dt
别名为
difftool
。此外,在Vim中键入
:qa
将循环到下一个变更集而不保存任何内容。此解决方案非常好,只是在保存变更时必须键入“:w!”,而不是:w@jonyamo设置别名应始终基于我们使用某些命令的频率。我经常使用
git diff
而不是
git difftool
。所以我把
d
化名为'diff',把
'dt'化名为
difftool'。可用性比使用模式创建别名更重要。如何让“git diff”使用vimdiff?这个答案让我使用别名。如果我的别名“diff”不起作用。@Asenar“这个解决方案很好,只是在保存更改时必须键入
:w!
,而不是
:w
”。这是因为git使用
-R
选项调用
vimdiff
。您可以使用git config--global difftool.vimdiff.cmd'vimdiff“$LOCAL”“$REMOTE”覆盖它。。这将在可写模式下打开vimdiff。您负责mergetool,而不是difftool。但这仍然是一个有用的答案+1.@dotancohen真的很感谢,我从来没有注意到现在我犯了一个愚蠢的错误,可以编辑我的答案了。@NanheKumar,@dotancohen,在上面的答案中用
diff
替换
,也就是说,
git config--global diff.tool vimdiff
nvimdiff
现在作为一个工具受到支持,因此您可以执行
git config--global diff.tool nvimdifmdiff
git d <file>
git config --global diff.tool vimdiff
git difftool --tool=vimdiff