[原创] MacOS下的那些diff工具

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 命令试一下,大概会是下面这样的效果:
grc with diff
文章来源:https://www.codelast.com/
 colordiff 软件:直接输出彩色的diff
嫌上面安装 grc 的方法烦?可以直接安装 colordiff 软件:

brew install colordiff

再用 colordiff file1 file2 命令来显示diff,大概会是下面这样的效果:
colordiff
可以看到这个效果和 grc + diff 差不多,所以考虑到简单,直接用colordiff就好了。
文章来源:https://www.codelast.com/
 icdiff:左右双屏的diff对比工具,很直观
上面的diff命令,都是上下形式来展示,我觉得看起来很难受。icdiff 软件可以改变这种情况。安装:

brew install icdiff

命令 icdiff file1 file2 的效果如下:
icdiff
看到没,不仅左右对照,而且还彩色高亮显示,超级直观!
文章来源:https://www.codelast.com/
 vim -d:基于vim的左右双屏对比
使用 vim -d file1 file2 命令,就可以在vim中左右双屏展示差异了:
vim -d
但是注意:当一行内容太长的时候,vim在diff模式下不会把内容自动换行显示,看起来很不方便,你可以用 :set wrap 命令来开启自动换行。
如果要让光标在左右屏之间切换,按两下快捷键 Ctrl+w 即可。
缺点:当一行内容超长的时候,即使开启了自动换行,在一行内跳转也是极不方便的,而且鼠标又不能滚动文本,我觉得不爽。
文章来源:https://www.codelast.com/
 code --diff:基于VSCode的左右双屏对比
什么?你天天使用的VSCode也能用做 diff 工具?没错:
code --diff file1 file2
这样就能在VSCode编辑器里展示出两个文件的 diff 啦:
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一次,所以就不想再用了。
Meld
文章来源:https://www.codelast.com/
 超长文本行的diff高亮显示
上面提到的命令行的diff工具,在遇到超长文本行+某些内容的时候,在显示diff的时候都有这样那样的问题。
例如,file1 的第一行和 file2 的第一行都有一万个字符,但它们仅仅在其中的5个字符有差异,那么diff工具理论上应该高亮显示出那5个字符。
但实际上,当这行的内容有些特殊的时候,命令行diff工具可能会高亮显示出整行,而不是那5个字符;或者高亮显示的是多于那5个字符的一块区域。总之它有可能没法精确地标识出diff的部分。
这里举一个例子:
1.txt 和 2.txt 的第一行都超长,它们只在几个字符上有差异:
VSCode diff long line
可见VSCode正确地只高亮了有差异的部分。
文章来源:https://www.codelast.com/
如果用 icdiff 1.txt 2.txt 来查看差异,就非常扯蛋了,它没能像VSCode一样仅标识出diff的部分,而是把整行都标识成了diff,辣眼睛:
icdiff deal with long line

在这种情况下,VSCode和Meld都可以正确标识出diff的内容。
所以图形化diff工具还是有用的,别只迷信命令行。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):
wechat qrcode of codelast
以及我的微信视频号:

发表评论