文本对比 打开工具

末尾换行差异:␊ 与 ∅ 标记在说什么

两份文本内容一字不差,对比却显示有一行不同——大概率是末尾换行。它在编辑器里看不见,在 git 里却是一条真实改动,还会触发「\ No newline at end of file」这类提示。

标记怎么读

所以「左边末行是 ␊、右边末行是 ∅」就表示新文本把末尾的换行删掉了,反之则是加了一个。两类在肉眼看来完全一样,只有标记能区分。

为什么这件事值得较真

POSIX 规范里「文本文件应以换行结尾」,很多命令行工具(cat、sed、wc)依赖这一点:末行没有换行时,某些工具会把最后一行与下一段输出拼在一起。

版本控制里它是一条真实 diff;代码评审里它会制造「明明没改却显示有改动」的困惑;配置文件被某些解析器读取时,末行缺换行可能导致最后一个键值被忽略。

CRLF 为什么不算差异

Windows 用 CRLF(\r\n)换行,Unix 用 LF(\n)。浏览器读取文本时会把两者统一成 LF,所以只改换行符风格不会被判为差异——这样跨平台协作时不会满屏都是假差异。

反过来说,如果你的本意就是检查换行符风格(比如排查为什么 git 显示整个文件都改了),这个工具帮不上,需要用 file 命令或编辑器的行尾设置查看。

怎么避免这类差异

仓库里放 .gitattributes 统一行尾,编辑器开启「保存时确保文件末尾有换行」,CI 里加一条检查(如 git diff --check)。三件事做完,这类差异基本不会再出现在 review 里。

上面这些都不用装软件,也不用注册:打开页面就能用。

打开文本对比 →

常见问题

为什么我看不到 ␊ 标记?

标记显示在每行行尾,深色文字容易忽略。把窗口拉宽、或切换到内联视图会更容易看到。它不参与复制,复制结果里是纯文本。

能在对比结果里直接删掉多余换行吗?

不能。工具只做比较不修改内容。要修就在编辑器里改,改完再对比一次确认。

末尾多个空行会被当成差异吗?

会。空行也是行,多一个空行就是多一行内容,会显示为新增。这与「末尾换行」是两件事:前者是多了一行空行,后者是最后一行没写完就结束了。