文本对比工具
把两段文本、代码或配置并排粘贴进来,立即看出哪些内容被新增、被删除,哪些保持不变。对比完全在你的浏览器中完成,粘贴的任何内容都不会被上传。
- 文件永不离开你的设备
- 免费,无需注册
- 无水印
- 加载后可离线使用
如何文本对比工具
- 1
粘贴两个版本
把原始文本粘贴进左侧输入框,把修改后的版本粘贴进右侧输入框。
- 2
选择对比模式
用"按行"逐行对比——这是代码和配置文件的标准做法——或者切换到"按词",精确看出相近的行里到底哪些词发生了变化。
- 3
阅读高亮后的差异
新增内容以绿色高亮,删除内容以红色高亮,未改变的内容保持普通样式。如果需要分享,可以把结果复制为纯文本差异格式。
按行对比是怎么判断"相同"的
在高亮显示的背后,一个对比工具解决的是一个具体的匹配问题:给定两份文字列表,找出以相同相对顺序同时出现在两份文档里的最长行序列——这个共同序列里的一切都被认为未发生变化,其余的一切则被标记为新增或删除。这正是"最长公共子序列"这个理念背后的直觉,几乎所有通用的对比算法都是围绕它构建的,包括 Git 自己使用的算法。这也解释了一个乍看有点奇怪的细节:把一段文字从文档底部移动到顶部,通常会被报告为一次大的删除加一次大的新增,而不是一次单独的"移动"操作——算法只是在寻找一个共同的顺序,而被搬动的一段文字,恰恰在它的旧位置和新位置都破坏了这个顺序。
这也解释了为什么按行模式下,对一个长行的单字符修改会把整行标记为发生了变化:算法把整行当作不可再分的单元来比较,所以"除了一个字母之外完全相同的行"和"一行完全不同的内容"会被同等对待——两者都无法通过相等性检查,都会被计为一行删除、一行新增。这正是切换到按词模式能有所帮助的地方,因为它把同一套底层思路应用到了低一级的粒度上,把每个词而不是每一行当作被匹配的单元。
什么时候按词对比比按行对比更有用
按行模式是任何"行本身就是一个有意义单元"的场景的正确默认选择——源代码、JSON 对象、CSV 行、日志条目——因为在这些格式里,一行通常代表一个完整的想法,知道某一特定行发生了变化,本身就是有用的信息,与行内哪个字符发生了移动无关。当有意义的单元比一行更小时,按词模式就变得更有用:一段散文、一条合同条款,或者一份长文档里的一句话,这时真正有意思的变化通常是单独一个词或短语,周围的句子完全相同。按行逐行对比这样的文本,会因为一处一个词的改动,就把整段标记为"发生了变化",这在技术上没错,但在你重新通读整段文字之前,几乎没有告诉你任何真正变了什么。
一条实用的经验法则是:对任何结构化或按行组织的内容,先用按行模式;当按行模式的结果显示出两大块看起来几乎一样的红色和绿色时,再切换到按词模式——这种模式正是一个信号,说明真正的差异很小,被埋在了大量未改变的文字之间。
除了对比散文之外的常见实际用途
在合并之前对比两个版本的源代码是教科书式的用例,但同样的技术在代码评审之外用途广泛:对比一份配置文件的两次导出,精确找出正常部署和出问题的部署之间到底哪一项设置发生了变化;核对一份 CSV 导出的两个版本,确认只有预期中的那些行被改动过;或者把一份合同草稿和上一版对比,找出对方修改的每一处条款,而不必再逐字重新通读整份文档。在所有这些场景里,一个对比工具的价值都是一样的——它把"这两样东西是否不同、如果不同又在哪里"从一次手动逐行阅读,变成了一个立即可见的直观答案。
常见问题
两段文本会被上传到服务器吗?
不会。两段文本完全在你的浏览器里用 JavaScript 进行对比——任何时候都不会有内容通过网络发送。页面加载完成后你可以断开网络连接,对比依然能正常工作,你可以亲自验证这一点。
到底什么才算一处"差异"?
在"按行"模式下,两行文字作为完整单元进行比较——哪怕只有一个字符发生变化,整行都会被标记为从原文中删除、并在修改版中新增。在"按词"模式下,同一行会改为逐词比较,所以只有真正变化的那个词会被高亮,其余部分保持普通样式。前导和尾随空白、空行和换行符,在两种模式下都被当作真实内容处理——一行仅仅因为尾随空格不同,也依然会被报告为发生了变化。
这个工具能处理代码、JSON 或配置文件,而不只是普通文字吗?
可以——按行对比正是 Git 这类版本控制工具所使用的技术,在这里对源代码、JSON、YAML、CSV 行、日志文件或任何其他按行组织的格式,工作原理完全相同。按词模式则更适合处理散文、合同或文档,在这些场景里,有意义的改动通常是句子里的一个短语,而不是整行内容。
能处理大文档吗?
可以。几千行以内的对比几乎瞬间就能完成。每次按键都会重新计算差异,但会以较低的渲染优先级进行,所以即使在对比一大段粘贴内容的同时,打字也依然流畅——对于非常庞大或差异极大的文档,对比本身可能需要稍长一点时间,但绝不会让页面卡死。
"新增 N 行、删除 M 行"这个计数指的是哪些行?
它统计的是整个对比中新增和删除的行(在按词模式下则是词)总数——和你自己数一遍结果里每一行绿色和红色所得到的数字完全一样。未改变的行不计入其中。
我能把差异结果导出为纯文本,而不是彩色视图吗?
可以。"复制差异"按钮会复制一份纯文本版本,每一行前面带有"+"、"-"或空白标记(和 Git 以及大多数命令行 diff 工具用的约定一样),方便你粘贴进邮件、工单或代码评审评论里。