diff命令是最常用的、比较两个文本文件差异的工具。但在很多情况下,它并不那么好用,比如你想高亮显示差异的内容时,单纯的diff命令就做不到了。
本文讨论了在macOS系统下,diff命令的一些“增强版”工具,让你用起来更方便。
➤ 安装、设置好 Homebrew 并保持最新
在macOS里,为了方便快捷地安装各种软件包,首先你要装好Homebrew,具体过程这里不详述,可参考这个链接。
文章来源:https://www.codelast.com/
➤ 让 diff 命令彩色化:通过 grc 配合
单纯的 diff 命令本身并不直接提供高亮显示差异内容的功能。diff 命令通常输出两个文件之间的差异,包括新增的行、删除的行以及修改的行,但它使用的是标准的文本输出,没有颜色高亮。
为了让 diff 命令输出彩色的内容,可以安装 grc(Generic Colouriser)软件:
brew install grc
安装完成后,修改 ~/.bash_profile 文件,添加一行:
alias diff='/usr/local/bin/grc /usr/bin/diff'
然后重新打开终端,再用 diff file1 file2 命令试一下,大概会是下面这样的效果:
文章来源:https://www.codelast.com/
➤ colordiff 软件:直接输出彩色的diff
嫌上面安装 grc 的方法烦?可以直接安装 colordiff 软件:
brew install colordiff
再用 colordiff file1 file2 命令来显示diff,大概会是下面这样的效果:
可以看到这个效果和 grc + diff 差不多,所以考虑到简单,直接用colordiff就好了。
文章来源:https://www.codelast.com/
➤ icdiff:左右双屏的diff对比工具,很直观
上面的diff命令,都是上下形式来展示,我觉得看起来很难受。icdiff 软件可以改变这种情况。安装:
brew install icdiff
命令 icdiff file1 file2 的效果如下:
看到没,不仅左右对照,而且还彩色高亮显示,超级直观!
文章来源:https://www.codelast.com/
➤ vim -d:基于vim的左右双屏对比
使用 vim -d file1 file2 命令,就可以在vim中左右双屏展示差异了:
但是注意:当一行内容太长的时候,vim在diff模式下不会把内容自动换行显示,看起来很不方便,你可以用 :set wrap 命令来开启自动换行。
如果要让光标在左右屏之间切换,按两下快捷键 Ctrl+w 即可。
缺点:当一行内容超长的时候,即使开启了自动换行,在一行内跳转也是极不方便的,而且鼠标又不能滚动文本,我觉得不爽。
文章来源:https://www.codelast.com/
➤ code --diff:基于VSCode的左右双屏对比
什么?你天天使用的VSCode也能用做 diff 工具?没错:
code --diff file1 file2
这样就能在VSCode编辑器里展示出两个文件的 diff 啦:
如果你想修改diff显示的颜色,你甚至可以修改VSCode的配置(settings.json)来实现:
"workbench.colorCustomizations": {
"diffEditor.insertedTextBackground": "#fc00ce7c",
"diffEditor.removedTextBackground": "#4542f97c",
"diffEditor.insertedLineBackground": "#d9f4db66",
"diffEditor.removedLineBackground": "#e6dbe066",
}
在这个例子中,workbench.colorCustomizations 里的配置都是我添加的。
diffEditor.insertedTextBackground 配置的是 file1 里的diff内容的颜色;
diffEditor.removedTextBackground 配置的是 file2 里的diff内容的颜色;
diffEditor.insertedLineBackground 配置的是 file1 里的diff行的背景色;
diffEditor.removedLineBackground 配置的是 file2 里的diff行的背景色。
文章来源:https://www.codelast.com/
➤ Meld:图形化的双屏/三屏diff对比工具
MacOS下的Meld是另一个图形化diff工具。这个软件类似于Linux下的 meld 软件,它不仅可以对比两个文件的 diff,还可以对比三个文件的diff。
不过我在M2 CPU的MacOS上用起来,时不时会crash一次,所以就不想再用了。
文章来源:https://www.codelast.com/
➤ 超长文本行的diff高亮显示
上面提到的命令行的diff工具,在遇到超长文本行+某些内容的时候,在显示diff的时候都有这样那样的问题。
例如,file1 的第一行和 file2 的第一行都有一万个字符,但它们仅仅在其中的5个字符有差异,那么diff工具理论上应该高亮显示出那5个字符。
但实际上,当这行的内容有些特殊的时候,命令行diff工具可能会高亮显示出整行,而不是那5个字符;或者高亮显示的是多于那5个字符的一块区域。总之它有可能没法精确地标识出diff的部分。
这里举一个例子:
1.txt 和 2.txt 的第一行都超长,它们只在几个字符上有差异:
可见VSCode正确地只高亮了有差异的部分。
文章来源:https://www.codelast.com/
如果用 icdiff 1.txt 2.txt 来查看差异,就非常扯蛋了,它没能像VSCode一样仅标识出diff的部分,而是把整行都标识成了diff,辣眼睛:
在这种情况下,VSCode和Meld都可以正确标识出diff的内容。
所以图形化diff工具还是有用的,别只迷信命令行。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):
以及我的微信视频号: