当我有一个差异时,我如何给它上色,使它看起来更好?

我想它的命令行,所以请没有GUI解决方案。


当前回答

字符级色差: 安装ccdiff

ccdiff -r /usr/share/dict/words /tmp/new-dict

其他回答

当yum install colordiff或apt-get install colordiff由于一些超出你直接控制的疯狂限制而不是一个选项时,或者你只是感觉疯狂,你可以用一行sed来重新发明轮子:

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

把它扔到一个shell脚本中,并通过它管道统一的差异输出。

它使大块标记为蓝色,突出显示新/旧文件名和添加/删除的行,分别为绿色和红色背景它将使尾随空格2的变化比colordiff更明显。


顺便说一句,突出显示与修改行相同的文件名的原因是,要正确区分文件名和修改行,需要正确解析diff格式,这不是用正则表达式可以解决的问题。突出显示它们在视觉上“足够好”,使问题变得微不足道。也就是说,有一些有趣的微妙之处。

2但不是尾随制表符。显然制表符没有得到它们的背景设置,至少在我的xterm中是这样。它确实使制表符与空格的变化脱颖而出。

diff的手册页没有建议从内部进行着色的解决方案。请考虑使用色差。它是diff的包装器,产生与diff相同的输出,除了它使用彩色语法高亮显示来增强输出以增加可读性:

diff old new | colordiff

或者是:

colordiff old new

安装:

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

我建议你试试diff-so-fancy。我在工作中使用它,现在看起来确实很棒。它提供了许多选项,非常容易配置你想要的差异。

你可以通过以下方法安装:

sudo npm install -g diff-so-fancy

或者在Mac上:

brew install diff-so-fancy

然后,你可以像这样突出你的差异:

diff -u file1 file2 | diff-so-fancy

下面是另一个解决方案,它调用sed来插入适当的颜色ANSI转义序列,分别以红色、绿色和青色显示+、-和@行。

diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"

与此问题的其他解决方案不同,此解决方案没有显式地阐明ANSI转义序列。相反,它调用tput setaf和tput sgr0命令来生成ANSI转义序列,分别设置适当的颜色和重置终端属性。

要查看tput setaf的每个参数的可用颜色,使用以下命令:

for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo

下面是输出的样子:

下面是tput setaf和tput sgr0命令生成适当的ANSI转义序列的证据:

$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d                                   .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d                                   .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d                                   .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d                                .(B.[m

你可以改变Subversion配置使用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