文本 / 代码在线对比

两段文本或代码按行比对,左右双栏高亮新增、修改、删除的行,支持忽略大小写与空白字符。

改完配置想确认到底动了哪几行、代码评审时想快速看出改动范围、比对两份日志的差异,这类需求不需要打开庞大的 IDE,但要求结果准确、能一眼看清。在线文本对比最容易踩的坑是只能比 JSON,换成 SQL 或 Shell 脚本就没法用。

把两段内容贴进左右双栏即可按行比对:新增、修改、删除分别高亮,顶部给出差异行数统计,还可以选择忽略大小写与空白字符以过滤格式噪音。比较完全在浏览器内存里完成,涉及线上配置、密钥文件或未公开代码时内容也不会离开本机。

按行比对是怎么算出来的

文本差分通常基于最长公共子序列或 Myers 差分算法:先把两段文本切成行序列,再求出把左边变成右边所需的最少增删操作,剩下的部分就是相同行,差异统计的是新增与删除的行数。需要理解的是算法只看行的增删,所以一段内容被整体移动时,它会显示成「原位置删除 + 新位置新增」两处改动,而不是「移动」,这也是差异看起来比实际改动多的原因。

忽略大小写与空白该何时使用

跨平台对比配置文件时,行尾的 CRLF 与 LF、行末多余空格、Tab 与空格混用都会产生大量假差异,先忽略空白才能看到真正的改动。但对比 YAML、Python、Makefile 这类对缩进敏感的文件时必须保留空白判断,否则会漏掉直接导致运行失败的关键变化。忽略大小写适合比对各系统导出的键名与环境变量名,比对代码时通常不建议开启。

为什么不做 JSON 专用对比

JSON 可以做结构化对比:先解析成对象再按键路径比较,能区分「值改了」和「键只是换了位置」,不受格式化影响。但日志、SQL、Shell、Markdown、配置片段没有可解析的语法,只能按行比。本工具定位是通用文本差分,不做语法解析,因此输入什么都能比;代价是它不会替你判断某处改动在语法上是否等价。

广告

常见问题

文本对比和 JSON 对比有什么区别?
文本对比按行比较,不做语法解析,任何内容都能用;JSON 对比会先解析成对象,能忽略键的顺序与缩进差异,指出具体哪个键的值变了。比较接口返回的 JSON 时后者更准确,比较日志或代码时按行对比才合适。
为什么只是换行符不同也显示所有行都变了?
因为严格按行比对时 CRLF 与 LF 不被视为相同,两边每一行都判定为不同。开启忽略空白选项即可过滤这类差异,或者先在编辑器里统一换行符再对比。
忽略空白之后差异还是很多怎么办?
常见原因是两边缩进整体差了一级,或者文件被格式化工具重排、长行被拆成了多行。这类改动在行级别上是真实存在的,工具无法自动合并;可以先用格式化工具统一风格,再对比真正的内容差异。
对比的内容会被上传吗?
不会。差分计算在浏览器内存里完成,页面不会发出任何包含文本内容的请求。对比线上配置、密钥或未公开代码同样安全,刷新页面后内容即丢失,也不会写入本地存储。

相关工具

广告