使用方法
- 左侧粘贴原文,右侧粘贴修改后的文本。
- 差异立即显示:新增行为绿色,删除行为红色。
- 当缩进变了而内容没变时,打开 忽略首尾空白。
- 折叠未改动的行 会隐藏大段相同内容,只在每处改动周围保留三行上下文。
关于文本对比
最直观的对比方式——第 1 行对第 1 行、第 2 行对第 2 行——在插入一行的瞬间就崩溃了。插入点 之后的所有内容整体错位一行,于是每一行都被报成修改。这样的输出技术上正确,实用上一文不值。
真正能产生可读差异的是找出最长公共子序列:在两段文本中以相同顺序出现(但不必相邻)的
最长一组行。这些行就是未改动的部分,其余的要么是插入、要么是删除。git diff 以及所有严肃
的对比工具都是这么做的。
代价是:经典算法要建一张「一边每行 × 另一边每行」的表。两份五千行的文件意味着两千五百万个 格子,足以让浏览器标签页失去响应。让它变得可用的关键,是先把首尾完全相同的行剥掉——真实的 对比场景里,文件的绝大部分并没有变。两份两万行、只差一行的文件,剥完之后大约只剩一行对一行。
还有一点值得知道,尤其当差异看起来大得离谱时:换行符。在 Windows 保存的文件以回车加换行 结束每一行,在 Unix 上只有换行。它们确实是不同的字节,不做统一处理的对比会把每一行都报成 改动。本工具会统一它们,这几乎总是你想要的——但如果你正是在排查换行符问题,那么被隐藏的 恰恰就是你要找的差异。