如何让diff在终端实现行内文本变化高亮(类似vimdiff/meld)
实现行内文本差异的终端高亮输出
默认diff工具确实是整行标记变化,但完全可以实现行内文本的差异高亮,下面是几种简单可行的方案:
1. 原生diff工具直接实现
原生diff自带行内对比能力,结合颜色参数就能输出终端可识别的ANSI颜色标记:
# 行内差异用颜色直接标记(删除红、新增绿) diff --color=always --word-diff=color file1.txt file2.txt # 用符号包裹差异内容+颜色标记,更清晰 diff --color=always --word-diff=plain file1.txt file2.txt
--word-diff=color会把行内变动的文本直接用背景色区分,--word-diff=plain则会用[-删除内容-]和{+新增内容+}包裹差异部分,同时保留颜色高亮。
2. 用专业工具获得类vimdiff/meld的体验
如果原生diff的效果不够直观,推荐两个专门优化终端差异显示的工具:
- icdiff:主打行内差异高亮,默认左右分栏展示两个文件,行内不同的文本会用鲜明颜色标记,安装后直接运行:
icdiff file1.txt file2.txt - delta:现代diff增强工具,支持语法高亮、细腻的行内差异标记、侧边变更提示,体验接近图形化工具,运行命令:
它还支持自定义颜色主题,能根据你的终端风格调整高亮效果。delta file1.txt file2.txt
3. 关于ANSI颜色码输出
上面的工具默认都会输出带ANSI颜色码的内容,直接在终端就能看到彩色效果。如果需要保存带颜色的输出到文件,记得加上强制颜色的参数(比如diff的--color=always、delta的--color=always),这样文件会保留颜色码,后续用支持ANSI的终端查看器打开即可正常显示。
内容的提问来源于stack exchange,提问作者Cyb10101
相关产品推荐
相关产品推荐

