说我得到了使用git format-patch
创建的补丁。该文件基本上是一个带有一些元数据的统一差异。如果我在Vim中打开文件,我可以看到哪些行已被修改,但我看不到更改行中的哪些字符不同。有没有人知道(在Vim或其他一些在Ubuntu上运行的免费软件)可视化每个角色的差异?
可视化每个字符差异的计数器示例是执行vimdiff a b
时。
更新星期五12月12日22:36:23 UTC 2010
diffpatch is helpful表示您使用单个文件的情况。
2016年6月16日星期六17:56:10更新
结帐diff-highlight in git 2.9。这个脚本完全我最初寻找的东西。
答案 0 :(得分:156)
在git中,您可以在不提交的情况下进行合并。首先合并您的补丁,然后执行:
git diff --word-diff-regex=.
注意等号后的点。
答案 1 :(得分:123)
以下某些版本的输出噪音低于git diff --word-diff-regex=<re>
,并且输入的次数少于git diff --color-words --word-diff-regex=<re>
,但相当于git diff --color-words
。
简单(突出显示空间变化):
git diff --color-words=.
简单(突出显示单个字符更改;不突出显示空格更改):
git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
更复杂(突出显示空间变化):
git diff --color-words=<re>
一般来说:
<re>
其中--word-diff-regex=<re>
是正则表达式,定义&#34;单词&#34;为了识别变化。
它们的噪音较小,因为它们会改变变化的&#34;单词&#34;,而只使用-/+
围绕匹配的&#34;单词&#34;带有彩色{{1}}标记。
答案 2 :(得分:44)
git diff --color-words="[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+"
上面的正则表达式(from Thomas Rast)在标点符号/字符级别上分离差异片段(但不像--word-diff-regex=.
那样嘈杂)。
我发布了结果输出here的屏幕截图。
更新:
This article有一些很棒的建议。具体来说,git仓库的contrib/
树有一个diff-highlight
perl脚本,可以显示细粒度的高光。
快速开始使用它:
$ curl https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight > diff-highlight
$ chmod u+x diff-highlight
$ git diff --color=always HEAD~10 | diff-highlight | less -R
答案 3 :(得分:13)
鉴于你在问题中引用了Vim,我不确定这是否是你想要的答案:)但是Emacs可以做到这一点。打开包含差异的文件,确保您在diff-mode
(如果文件名为foo.diff
或foo.patch
这会自动发生;否则键入 Mx diff-mode
RET ),转到你感兴趣的大块头,然后点击 Cc Cb 获取refine-hunk
。或者使用 M-n 逐步浏览文件一个块;这将自动完成精炼。
答案 4 :(得分:4)
如果您对安装NodeJS没有任何反对意见,那么就会有一个名为“diff-so-fancy”(https://github.com/so-fancy/diff-so-fancy)的软件包,它非常易于安装并且运行良好:
npm install -g diff-so-fancy
git diff --color | diff-so-fancy | less -R
编辑:刚刚发现它实际上是官方差异突出显示的包装器...至少对像我这样的perlophobes安装更容易,并且GitHub页面已经很好地记录了:)
答案 5 :(得分:2)
我不知道每个字符差异工具,但有一个单词差异工具:wdiff。
参考示例Top 4 File Difference Tools on UNIX / Linux – Diff, Colordiff, Wdiff, Vimdiff。
答案 6 :(得分:1)
经过一番研究后,我发现这个问题最近在Vim的主要邮件列表中出现了两次。提到NrrwRgn plugin both times(制作两个较窄的区域并将它们区分开来)。使用Christian Brabandt所描述的NrrwRgn更像是一种解决方法,而不是解决方案,但也许这已经足够了。
我尝试了NrrwRgn,它与:diffthis一起,对于说明单个文件的部分内容中的每个字符差异确实很有用。但它花了很多次击键。我的Vimscript非常生疏,但可能会编写脚本。也许可以增强NrrwRgn以提供所需的功能。
思想?