文本对比工具

对比两段文本,精确看出哪些行被新增、删除或未改动。全部在浏览器内运行,内容不会上传。

所有处理均在你的浏览器内完成,数据不会上传。

使用方法

  1. 左侧粘贴原文,右侧粘贴修改后的文本。
  2. 差异立即显示:新增行为绿色,删除行为红色。
  3. 当缩进变了而内容没变时,打开 忽略首尾空白
  4. 折叠未改动的行 会隐藏大段相同内容,只在每处改动周围保留三行上下文。

关于文本对比

最直观的对比方式——第 1 行对第 1 行、第 2 行对第 2 行——在插入一行的瞬间就崩溃了。插入点 之后的所有内容整体错位一行,于是每一行都被报成修改。这样的输出技术上正确,实用上一文不值。

真正能产生可读差异的是找出最长公共子序列:在两段文本中以相同顺序出现(但不必相邻)的 最长一组行。这些行就是未改动的部分,其余的要么是插入、要么是删除。git diff 以及所有严肃 的对比工具都是这么做的。

代价是:经典算法要建一张「一边每行 × 另一边每行」的表。两份五千行的文件意味着两千五百万个 格子,足以让浏览器标签页失去响应。让它变得可用的关键,是先把首尾完全相同的行剥掉——真实的 对比场景里,文件的绝大部分并没有变。两份两万行、只差一行的文件,剥完之后大约只剩一行对一行。

还有一点值得知道,尤其当差异看起来大得离谱时:换行符。在 Windows 保存的文件以回车加换行 结束每一行,在 Unix 上只有换行。它们确实是不同的字节,不做统一处理的对比会把每一行都报成 改动。本工具会统一它们,这几乎总是你想要的——但如果你正是在排查换行符问题,那么被隐藏的 恰恰就是你要找的差异。

常见问题

为什么在开头插入一行,后面的内容没有被全部标成改动?

因为对比找的是最长公共子序列,而不是拿第 1 行比第 1 行、第 2 行比第 2 行。朴素的逐行比较会把插入点之后的每一行都报成修改——技术上没错,实用上毫无价值。找出最长的共同行序列,才是结果可读的原因。

Windows 与 Unix 的换行符会被当成差异吗?

不会。对比前会先统一换行符,所以同一个文件在 Windows(CRLF)和 Linux(LF)上保存的两份会显示为完全相同。这是刻意的——那个差异在字节层面真实存在,但几乎从来不是你要找的东西。

我的文本会被上传吗?

不会,对比在你的浏览器内完成。这一点在这个工具上比在别的工具上更重要,因为需要做 diff 的往往是两个尚未公开的版本——一份合同草稿、一份未发布的配置、一个补丁。

「差异过大无法对比」是什么意思?

算法要建一张表,大小是两边行数相乘。两份几千行且毫无共同行的文件会需要数百万个格子,足以让标签页卡死。工具会先剥掉首尾相同的行,这已经覆盖了绝大多数真实场景;当剥完仍然过大时,它选择明确拒绝,而不是假死。

能显示同一行内部的改动吗?

目前不能——修改过的行会显示成「一删一增」。按行对比是结果稳定可预期的原因;行内的字符级高亮是可能的后续增强。

它能替代 git diff 吗?

两者回答的是不同问题。git diff 比较的是仓库中被跟踪文件的不同版本;而这个工具面向的是「两段文本就摆在眼前」的场景——从邮件里、聊天记录里、两个接口返回里粘出来的内容,跟仓库没有关系。