我正在尝试使用 vimdiff+ dirdiff.vim在 Vim 中区分使用 Git 版本化的多个文件。
对于 Mercurial,可以使用mercurial extdiff扩展。
我在网上找到的将 Vim 与 Git diff 集成的唯一方法是在单个文件上使用 vimdiff,如本文所述。
有谁知道如何使用vimdiff+dirdiff+git?
我正在尝试使用 vimdiff+ dirdiff.vim在 Vim 中区分使用 Git 版本化的多个文件。
对于 Mercurial,可以使用mercurial extdiff扩展。
我在网上找到的将 Vim 与 Git diff 集成的唯一方法是在单个文件上使用 vimdiff,如本文所述。
有谁知道如何使用vimdiff+dirdiff+git?
git-diffall是我需要的,非常感谢。在这个关于 git difftool的页面和这个关于从命令行运行 vim+dirdiff 的帮助下,我写了我$HOME/.gitconfig的:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE
[difftool]
prompt = false
放入 git-diffall my后PATH,我可以区分例如带有分支dev的工作目录:
git diffall dev
如果我想从 Vim 永久修改工作目录,这--copy-back也是我需要的:
git diffall --copy-back dev
从1.7.11版本开始,“git difftool”学习了“--dir-diff”选项来简化事情并且git-diffall不再需要。
.gitconfig包含:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE '+syntax off'
例如,使用分支区分工作目录dev是通过以下方式完成的:
git difftool -d dev
Tim Pope 的逃犯是 vim 的典型 git 插件。它可能没有 dirdiff 的功能,但它确实完美地集成git status了输出,通过键映射可以轻松地在修改后的文件之间导航。然后,您的输出中列出的任何文件git status都可以轻松地与D映射进行差异化,从而允许您自定义进入更改的确切更改。
监视Vim 模块 fugitive 的提交会很有趣,因为从(git 1.7.11,2012年 6 月)开始,git 现在可以区分目录(即在打开之前显示所有要比较的文件difftool)
参见“git difftool给目录比较? ”
因此,添加该功能fugitive.vim将是从文件到文件差异方法的演变。
然而,Zyx在评论中指出了这种方法的局限性:
完成这项工作所需要做的就是:
git diff --name-status和git cat-file,仅此而已(除了一些
vimscript代码)。
而且,与 不同的是,这适用于任何支持git difftoolvcsdiff和 vcs的 VCScat-file
Zyx 提到了他的项目aurum的逐个文件方法的示例:
我的 aurum 具有类似 dirdiff 的功能(
AuVimDiff full打开一堆选项卡以vimdiff查看有差异的文件),并且它从未使用任何类型的difftool支持。
(见脚本aurum / autoload / aurum / vimdiff.vim)
Zyx 补充道:
对于想要将此功能添加到逃犯的人来说,它不是一个很好的指南:
实际git diff --name-status调用隐藏在 git 驱动程序中的一个由s:git.status访问为调用的函数中repo.functions.status(因为 mercurial 使用hg status -r rev1:rev2,而不是hg diff --name-status,我觉得这很合乎逻辑)。
因此,您必须在这里遍历三个抽象级别(存储库接口、shell 命令包装器以及只有实际的 git 调用)。
从头开始编写所有内容更快
Git 不直接支持目录差异,但可以通过 3rd 方扩展来完成。
签出git diffall(披露:我写了这个脚本)。此脚本与工具集一起使用git config diff.tool <TOOL>以执行真正的目录差异。
另外,请参阅以下相关问题: