如何可视化统一差异文件中的每个字符差异?
假设我使用git format-patch
创build了一个git format-patch
。 该文件基本上与一些元数据统一差异。 如果我在Vim中打开文件,我可以看到哪些行已被修改,但是我看不到哪些字符在更改的行中有所不同。 有没有人知道一种方式(在Vim或其他一些在Ubuntu上运行的免费软件)来显示每个字符的差异?
每个字符差异可见的计数器示例是在执行vimdiff ab
。
更新周五11月12日22:36:23 UTC 2010
diffpatch对于使用单个文件的场景很有帮助 。
更新Thu Jun 16 17:56:10 UTC 2016
在git 2.9中检查diff-highlight 。 这个脚本完全是我最初寻求的。
考虑到你在这个问题中对Vim的引用,我不确定这是否是你想要的答案:)但Emacs可以做到这一点。 打开包含diff的文件,确保处于diff-mode
(如果文件名为foo.diff
或foo.patch
自动发生,否则inputMx diff-mode
RET ),转到您感兴趣的模块并且击中了Cc Cb为refine-hunk
。 或者用锰一次一个文件地穿过文件; 这将自动完成。
在git中,你可以合并而不提交。 先合并你的补丁,然后做:
git diff --word-diff-regex=.
注意等号后面的点。
(评论转换为每个请求的答案)
与git diff --word-diff-regex=<re>
相比,输出噪声较小的版本需要的inputless于git diff --color-words --word-diff-regex=<re>
。
简单(突出显示空间变化):
git diff --color-words
简单(突出个人angular色变化;不突出显示空间变化):
git diff --color-words=.
更复杂(突出空间变化):
git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
一般来说:
git diff --color-words=<re>
其中<re>
是为了识别变化而定义“词”的正则expression式。
这些都不那么嘈杂,因为它们为变化的“单词”着色,而仅使用--word-diff-regex=<re>
围绕具有彩色-/+
标记的匹配“单词”。
git diff --color-words="[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+"
上面的正则expression式( 来自Thomas Rast )在标点符号/字符级别上分离差异片段(虽然不像--word-diff-regex=.
那样吵杂)。
我在这里发布了结果输出的屏幕截图。
更新:
本文有一些很好的build议。 具体来说,git仓库的contrib/
tree有一个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
如果您对安装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
编辑:刚刚发现它实际上是官方diff-highlight的包装…至less它更容易安装像我这样的perlophobes和GitHub页面很好地logging:)
我不知道每个字符的差异工具,但有一个每字差分工具:wdiff。
请参阅UNIX / Linux上的前4个文件差异工具 – 差异,Colordiff,Wdiff,Vimdiff 。
经过一番研究,我发现这个问题最近在主Vim邮件列表上出现了两次。 NrrwRgn插件被提及两次 (使两个狭窄的地区和差异)。 使用Christian Brabandt描述的NrrwRgn更像是一种解决方法,而不是解决scheme,但也许这已经足够了。
我尝试了NrrwRgn,它与:diffthis一起,对于说明单个文件中每个字符的差异是非常有用的。 但它花了很多击键。 我的Vimscript是相当生锈的,但它可能是脚本。 也许NrrwRgn可以被增强来提供所需的function。
思考?