在diff输出中显示行内的差异

24

这个StackOverflow回答有一张KDiff3的图片,突出显示了行内差异。请问是否有一种工具可以在命令行上展示相同的效果(例如,通过颜色)?

另一种思考这个问题的方式是希望能够在补丁文件中对每个差异进行比较。


尝试使用git项目中的此perl脚本这篇博客对其进行了描述。请查看我的gist,以了解我如何设置它(分页器部分)。 - Steven Lu
1
https://unix.stackexchange.com/questions/11128/diff-within-a-line - Ciro Santilli OurBigBook.com
Ciro:是的,包括我的回答:使用emacs的ediff模式... - WHO's NoToOldRx4CovidIsMurder
这个回答解决了你的问题吗?使用'diff'(或其他任何工具)获取文本文件之间的字符级差异 - Roman Riabenko
6个回答

16

我不知道这是否足够符合您的命令行需求,但是vimdiff可以做到这一点(甚至支持显示颜色)。例如,请参见此相关问题中的图片。


10

我尝试了所有我能找到的工具:wdiff、dwdiff、kdiff3、vimdiff来展示两行长且略有不同的文本之间的区别。我最喜欢的是diff-highlight(git contrib的一部分)

  • 支持diff格式 - 相对于需要两个文件的工具(如dwdiff),这是一个很大的优势,例如如果您需要可视化单元测试的输出
  • 使用黑白或彩色进行高亮显示,如果将其连接到colordiff,则可以实现彩色高亮
  • 逐字符进行高亮显示 - 用于比较没有空格的长行非常有帮助(比wdiff更好)

安装

在Ubuntu上,您可能已经将其作为git contrib的一部分(安装在git deb软件包中)。 从/usr/share/doc/git/contrib/diff-highlight/diff-highlight复制或链接到您的~/bin文件夹中。

使用示例

cat tmp.diff | diff-highlight | colordiff

结果:

输入图片描述


5

另一种直观的查看所有单词级别差异的方式(虽然不是并排显示)是使用wdiffcolordiff(您可能需要安装两者)。一个示例是:

wdiff -n {file-A} {file-A} | colordiff

您可以选择将此内容导入less -R中以滚动查看输出结果(-R用于在less中显示颜色)。


2
这是唯一一个对我有效的没有使用 Vim 的解决方案。 - Manux

3

我曾经遇到过类似的问题,不想使用vimdiff。我发现dwdiff(Debian可用)比wdiff更具有优势。

dwdiff最有用的功能是您可以使用-d [CHARS]自定义分隔符,因此它对于比较各种输出非常有用。它还内置了颜色,使用-c标志即可。


2
您可能可以使用 colordiff 来实现此功能。
在他们的 man page 中:

传递给 colordiff 的任何选项都会 传递到 diff 中,除了 colordiff 特定的选项 'difftype', 例如:

colordiff --difftype=debdiff file1 file2

'difftype' 的有效值为:diff、 diffc、diffu、diffy、wdiff、debdiff; 这些分别对应普通差异、上下文差异、统一差异、 并排差异、wdiff 输出和 debdiff 输出。当 colordiff 无法自动确定差异类型时,请使用这些覆盖。

我没有测试过,但并排输出(由 diff -y file1 file2 生成)可能会给您提供等效的行内差异。

1
你也可以将diff输出导入到colordiff中,但我确认它不起作用。 - Sam Brightman

2

ccdiff是一款方便的专用工具,可用于此任务。以下是使用它的示例:

ccdiff example output

默认情况下,它会用颜色突出显示差异,但也可以在不支持颜色的控制台上使用。

该软件包已包含在Debian的主要存储库中:

ccdiff 是一款着色的 diff 工具,还会对更改的行内部进行颜色标记。

所有显示两个文件之间差异的命令行工具都无法清晰地显示微小的变化。ccdiff 试图提供与 diff --colorcolordiff 相似的外观和感觉,但将着色输出的显示从着色的删除和添加行扩展到更改行中删除和添加的字符的颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接