在命令行上着色diff

当我有一个差异,我怎么能着色,使它看起来不错? 我想要它的命令行,所以请不要GUI的解决scheme。

diff页提示本身内部没有彩色化的解决scheme。 请考虑使用colordiff 。 它是diff的一个包装器,它产生与diff相同的输出,除了它使用彩色语法高亮来增加输出以提高可读性:

 diff old new | colordiff 

要不就:

 colordiff old new 

安装:

  • Ubuntu / Debian: sudo apt-get install colordiff
  • OS X: brew install colordiff或者port install colordiff

使用Vim :

 diff /path/to/a /path/to/b | vim -R - 

或者更好的是, VimDiff (或vim -d ,键入较短)将显示两个,三个或四个文件之间的差异并排。

例子:

 vim -d /path/to/[ab] 

 vimdiff file1 file2 file3 file4 

实际上似乎还有另外一个select(当我遇到上述问题时,我最近才注意到):

 git diff <file1> <file2> 

如果你有Git(你可能已经在使用),那么即使文件本身不受版本控制,你也可以使用它进行比较。 如果默认情况下没有启用,那么在这里启用色彩支持似乎比前面提到的一些解决方法容易得多。

而对于yum install colordiffapt-get install colordiff情况,由于某些超出您的直接控制范围的疯狂约束而无法select, 或者您只是觉得疯狂 ,您可以使用sed行重新创build轮子:

 sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/' 

把它放在一个shell脚本中,并通过它pipe道统一的差异输出。

它使蓝色标记为蓝色,并分别突出显示新/旧文件名以及绿色和红色背景中添加/删除的行。 1这将使得尾随空间2的变化比colordiff更容易明显。


1顺便说一句,高亮文件名与修改后的行相同的原因是为了正确区分文件名和修改后的行,需要正确parsingdiff格式,这不是用正则expression式解决的问题。 突出显示他们同样的作品“足够好”在视觉上,使问题微不足道。 这就是说,有一些有趣的微妙之处 。

2但不是尾随标签。 显然标签不会获得他们的背景设置,至less在我的xterm。 它确实使选项卡和空间的变化脱颖而出。

diff --color选项被添加到GNU diffutils 3.4(2016-08-08)

这是大多数发行版的默认diff实现,很快就会得到它。

在3.5上看起来像这样:

在这里输入图像说明

有:

 diff --color -u \ <(seq 6 | sed 's/$/ a/') \ <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/') 

我还要求diff-highlight字级差异: https : //lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html

显然是在提交c0fa19fe92da71404f809aafb5f51cfd99b1bee2(2015年3月)中添加的。

你可以改变颠覆configuration使用colordiff

〜/的.subversion / config.diff

  ### Set diff-cmd to the absolute path of your 'diff' program. ### This will override the compile-time default, which is to use ### Subversion's internal diff implementation. -# diff-cmd = diff_program (diff, gdiff, etc.) +diff-cmd = colordiff 

通过: https : //gist.github.com/westonruter/846524

我使用grc (Generic Colouriser),它允许你为包括diff在内的许多命令输出。

这是一个可以围绕任何命令的Python脚本。 因此,不是调用diff file1 file2 ,而是调用grc diff file1 file2来查看色彩输出。 我有diff grc diff使其更容易。

有色, 字级 diff输出

以下是脚本和diff-highlight的function :

彩色差异截图

 #!/bin/sh -eu # Use diff-highlight to show word-level differences diff -U3 --minimal "$@" | sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' | diff-highlight 

( 感谢@ retraceile对sed突出显示的回答 )

由于wdiff接受在插入和删除的开始和结束处指定string的args,因此可以使用ANSI颜色序列作为这些string:

 wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2 

例如,这是比较两个CSV文件的输出:

CSV文件的差异输出

https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html中的示例;