使用方法
- 01把原始文本粘贴到左侧,把修改后的文本粘贴到右侧。
- 02选择粒度:散文和代码改动用行,改动句子用词,标点级工作用字符。
- 03当大小写或行尾空白差异不应计入时,打开忽略大小写或忽略行尾空白。
- 04读取统计卡片——编辑距离、相似度、长度和未变数量——然后查看并排或统一视图,复制你需要的内容。
示例读数
把一个五行函数与七行修订版相比:
| 指标 |
行模式 |
词模式 |
| 共享单元 |
3 |
34 |
| 插入 / 删除 |
4 / 2 |
19 / 5 |
| 编辑距离 |
6 |
24 |
| 相似度 |
50.0% |
73.9% |
| 长度 |
5 → 7 |
39 → 53 |
行模式下,面板把最初两行变化配成带高亮改动词的“修改”行,然后显示三行相同和两行插入——共 7 行并排。词模式把同一处编辑看得轻得多:92 个词元中 24 处编辑,得到 73.9%。把文本与自身比较得到距离 0、相似度 100% 和空的统一 diff。
算法如何解读一处改动
Myers 算法寻找最短编辑脚本——把一串词元变成另一串所需的最少插入和删除——其时间与编辑距离成正比,这也是它在相似文件上保持快速的原因。面板把距离报告为插入 + 删除单元数,把相似度报告为 2·LCS / (|a| + |b|),其中 LCS 是最长公共子序列的长度;因此五行文件中的两行改动(三行未变)代价是 4 次编辑,读作 60% 相似。行模式随后把相邻的“先删后插”对合并成“修改”行,并在其中运行词级对比,这就是为什么显示看起来像编辑器的 diff,而不是一堆红绿行。
限制与诚实的假设
- 词元上限。
- 每侧上限为 20,000 个词元;超过时面板会要求选择更粗的粒度,而不是卡死。
- 无移动检测。
- 从一处移到另一处的块会被报告为一次删除加一次插入,相似度相应下降。
- 空白是词元。
- 词模式按空白和标点切分,因此重新排版会显示为真实编辑,除非你打开忽略选项。
- 它不做的事。
- 它不合并三个版本或解决冲突,也不比较二进制文件——JWT 和 Cron 处理各自的格式。
移动一个块会重写分数
取六行,把第一行移到末尾,行 diff 报告两次编辑;把一个段落移过 500 行的文件,同样的视觉变化可能报告几十次,因为每个移动的位置都可能破坏对齐。粒度也很重要:对代码文件用字符模式会把一个重命名的变量变成数百次编辑,而行模式会把一切隐藏在改动行内部。读相似度数字时要想着粒度,当移动很重要时,比较重新构建的文本或查看统一 diff,而不是相信百分比。
用在何处
上线前审查改动
粘贴配置或生成文件的前后版本,读取统一 diff,确认每个 hunk 都是有意为之——插入的正是你想添加的行。
检查变换是否无损
重新排版、脱敏或模板化应只改变它声称改变的内容;diff 把未触及的行显示为相同,并量化其余移动的部分。
隐私
两段文本和计算出的 diff 都留在你的浏览器中;不上传、不存储、不记录任何内容。
参考文献
- Myers, E.W.,An O(ND) Difference Algorithm and Its Variations,Algorithmica 1(2), 251–266, 1986,doi.org (访问日期:2026-10-07)——最短编辑脚本算法。
- Wikipedia,Diff,en.wikipedia.org (访问日期:2026-10-07)——diff 格式、hunk 与统一语法。
- Wikipedia,Longest common subsequence,en.wikipedia.org (访问日期:2026-10-07)——相似度度量的基础。
- GNU Project,Diffutils manual,gnu.org (访问日期:2026-10-07)——参考命令行 diff 行为。
本页计算器
精选工具,点开即用;小工具可直接试算,数值会带入完整计算器。