当我有一个差异时,我如何给它上色,使它看起来更好?
我想它的命令行,所以请没有GUI解决方案。
当我有一个差异时,我如何给它上色,使它看起来更好?
我想它的命令行,所以请没有GUI解决方案。
当前回答
到目前为止还没有人提到delta。它支持带有语法高亮的语法彩色差异视图。
其他回答
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
使用Vim:
diff /path/to/a /path/to/b | vim -R -
或者更好的是,VimDiff(或vim -d,打字更短)将并排显示两个、三个或四个文件之间的差异。
例子:
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
我使用grc(通用着色器),它允许您对包括diff在内的许多命令的输出进行着色。
它是一个Python脚本,可以封装在任何命令中。因此,不是调用diff file1 file2,而是调用grc diff file1 file2来查看着色的输出。我有别名diff到grc diff使它更容易。
下面是另一个解决方案,它调用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
我建议你试试diff-so-fancy。我在工作中使用它,现在看起来确实很棒。它提供了许多选项,非常容易配置你想要的差异。
你可以通过以下方法安装:
sudo npm install -g diff-so-fancy
或者在Mac上:
brew install diff-so-fancy
然后,你可以像这样突出你的差异:
diff -u file1 file2 | diff-so-fancy