dan*_*ann 475 unix diff command-line colors
当我有差异时,我怎样才能将它着色以使其看起来很好?我希望它用于命令行,所以请不要使用GUI解决方案.
kaj*_*aji 587
手册页diff建议没有内部着色的解决方案.请考虑使用colordiff.它是一个包装器diff,产生与diff相同的输出,除了它使用彩色语法高亮增强输出以增加可读性:
diff old new | colordiff
Run Code Online (Sandbox Code Playgroud)
要不就:
colordiff old new
Run Code Online (Sandbox Code Playgroud)
安装:
sudo apt-get install colordiffbrew install colordiff或port install colordiffJoh*_*web 324
使用Vim:
diff /path/to/a /path/to/b | vim -R -
Run Code Online (Sandbox Code Playgroud)
或者更好的是,VimDiff(vim -d或更短的类型)将并排显示两个,三个或四个文件之间的差异.
vim -d /path/to/[ab]
Run Code Online (Sandbox Code Playgroud)
vimdiff file1 file2 file3 file4
Run Code Online (Sandbox Code Playgroud)
小智 165
实际上似乎还有另一种选择(我最近才注意到,当遇到上述问题时):
git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>
Run Code Online (Sandbox Code Playgroud)
如果您有Git(您可能已经在使用它),那么您将能够使用它进行比较,即使文件本身不受版本控制.如果默认情况下没有为您启用,那么在此处启用颜色支持似乎比前面提到的一些解决方法容易得多.
Cir*_*四事件 87
diff --color 选项被添加到GNU diffutils 3.4(2016-08-08)
这是diff大多数发行版的默认实现,很快就会得到它.
Ubuntu 18.04有diffutils3.6,因此拥有它.
在3.5它看起来像这样:
测试:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
Run Code Online (Sandbox Code Playgroud)
显然在commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2(2015年3月)中添加.
我还要求提供word level diff,如下所示diff-highlight:https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
ret*_*ile 69
而对于那些场合,当一个yum install colordiff或apt-get install colordiff不是一种选择,由于超出你的直接控制一些疯狂的约束,或者你只是感到疯狂,你可以重新发明了线的sed轮:
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
Run Code Online (Sandbox Code Playgroud)
把它扔进shell脚本并通过它管道统一diff输出.
它使hunk标记变为蓝色,并分别突出显示新/旧文件名以及绿色和红色背景中添加/删除的行.1 它将使跟踪空间2的变化比colordiff更明显.
1顺便提一下,突出显示与修改行相同的文件名的原因是,要正确区分文件名和修改后的行,需要正确解析diff格式,这不是正则规则要解决的问题.突出显示它们同样在视觉上"足够好"并使问题变得微不足道.也就是说,有一些有趣的细微之处.
2但不是尾随标签.显然,标签不会得到他们的背景设置,至少在我的xterm中.它确实使标签与空间变化有点突出.
Azd*_*325 16
您可以更改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
Run Code Online (Sandbox Code Playgroud)
来自:https://gist.github.com/westonruter/846524
Tom*_*ale 10
彩色,字级 diff输出
以下是使用以下脚本和diff-highlight执行的操作:
#!/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
Run Code Online (Sandbox Code Playgroud)
(感谢@ retracile对sed突出显示的回答)
由于wdiff接受args在插入和删除的开头和结尾指定字符串,因此可以使用ANSI颜色序列作为这些字符串:
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
Run Code Online (Sandbox Code Playgroud)
例如,这是比较两个CSV文件的输出:
https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html中的示例
下面是另一种解决方案,它调用sed插入相应的ANSI转义序列为颜色来显示+,-和@在红色,绿色和青色线,分别。
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
Run Code Online (Sandbox Code Playgroud)
与该问题的其他解决方案不同,此解决方案没有明确说明ANSI转义序列。相反,它调用tput setaf和tput sgr0命令来生成ANSI转义序列以分别设置适当的颜色和重置终端属性。
要查看的每个参数的可用颜色tput setaf,请使用以下命令:
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
Run Code Online (Sandbox Code Playgroud)
这是输出的样子:
这是tput setafand tput sgr0命令生成适当的ANSI转义序列的证据:
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
Run Code Online (Sandbox Code Playgroud)
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
Run Code Online (Sandbox Code Playgroud)
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
Run Code Online (Sandbox Code Playgroud)
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160285 次 |
| 最近记录: |