假设我用git format-patch
创建了一个补丁。该文件基本上是一个统一的差异与一些元数据。如果我在Vim中打开文件,我可以看到哪些行被修改了,但我看不到修改行中的哪些 * 字符 * 不同。有没有人知道一种方法(在Vim或其他运行在Ubuntu上的自由软件中)来可视化每个字符的差异?
每个字符的diff可视化的反例是执行vimdiff a b
时。
更新Fri Nov 12 22:36:23 UTC 2010
diffpatch对于处理单个文件的情况很有帮助。
update Thu Jun 16 17:56:10 UTC 2016
查看diff-highlight in git 2.9。这个脚本做了 * 正是 * 我最初所寻求的。
8条答案
按热度按时间lx0bsm1f1#
在git中,你可以不提交而合并。先合并你的补丁,然后执行:
注意等号后面的点。
pxiryf3j2#
这里有一些版本的输出噪声比
git diff --word-diff-regex=<re>
小,需要的输入比git diff --color-words --word-diff-regex=<re>
少,但与git diff --color-words --word-diff-regex=<re>
等效。简单(突出显示空间变化):
简单(突出个性变化;不突出显示空间变化):
更复杂(突出显示空间变化):
一般来说:
其中
<re>
是一个定义“单词”的正则表达式,用于标识更改。这些标记的噪声较小,因为它们为更改的“单词”着色,而仅使用
--word-diff-regex=<re>
将匹配的“单词”与着色的-/+
标记包围起来。lnxxn5zx3#
上面的正则表达式(from Thomas Rast)在标点符号/字符级别上分离diff片段方面做得很好(同时不像
--word-diff-regex=.
那样嘈杂)。我发布了结果输出here的屏幕截图。
更新:
This article有一些很好的建议。具体来说,git repo的
contrib/
树有一个diff-highlight
perl脚本,它显示了细粒度的突出显示。快速开始使用它:
t1rydlwq4#
鉴于你在问题中提到了Vim,我不确定这是否是你想要的答案:)但Emacs可以做到这一点。打开包含diff的文件,确保你在
diff-mode
中(如果文件名为foo.diff
或foo.patch
,这会自动发生;否则输入M-xdiff-mode
RET),转到您感兴趣的大块,然后点击C-c C-b为refine-hunk
。或者用M-n一次一个块地遍历文件;它会自动进行精炼。jv2fixgn5#
如果你不反对安装NodeJS,有一个名为“diff-so-fancy”(https://github.com/so-fancy/diff-so-fancy)的软件包,它非常容易安装,并且可以完美地工作:
编辑:刚刚发现它实际上是一个 Package 的官方差异突出显示.至少对于像我这样的perlophobes来说,它更容易安装,GitHub页面也有很好的文档记录:)
iibxawm46#
我不知道每个字符的差异工具,但有一个每个字的差异工具:wdiff。
参考示例Top 4 File Difference Tools on UNIX / Linux – Diff, Colordiff, Wdiff, Vimdiff。
vddsk6oq7#
经过一番研究,我注意到这个问题最近在Vim邮件列表中出现了两次。NrrwRgn plugin被提到bothtimes(制作两个狭窄的区域并区分它们)。使用Christian Brabandt描述的NrrwRgn感觉更像是一种变通方法,而不是解决方案,但也许这已经足够好了。
我试用了NrrwRgn,它与:diffthis一起,对于说明单个文件中每个字符的差异确实很有用。但这花了很多时间。我的Vimscript是相当生 rust ,但它可能是脚本。也许可以增强NrrwRgn以提供所需的功能。
想法呢?
pxyaymoc8#
diffr是我现在选择的工具。
在Windows上安装:
winget install -e --id Rustlang.Rustup
cargo install diffr
git config --global core.pager "diffr | less -R"
git config --global interactive.difffilter diffr
如果
less
有问题:winget install jftuga.less