sublime text 原生不支持文件对比,所有对比功能均依赖插件,且仅做行级文本比对,不理解语法、不识别 git 状态、不支持合并;compare side-by-side 和 diffy 是两个主流插件,但安装名称、使用前提和常见坑点(如编码、换行符、缩进、激活状态)必须严格满足才能正常工作。

Sublime Text 原生不支持文件对比,所有“对比”都是插件提供的行级文本比对,不理解语法、不识别 Git 状态、也不支持合并。别指望它像 VS Code 那样点一下就出「当前 vs HEAD」——你得先选对插件、再踩准前提。
Compare Side-By-Side 插件怎么装才真能用
它是最轻量、最稳的并排对比方案,但名字必须严丝合缝:Compare Side-By-Side(带空格、带连字符、末尾有 S)。搜 CompareSideBySide、Compare Side By Side 或漏掉连字符,都会装到废弃分支,右键菜单压根不出现。
- 先确认
Package Control活着:按Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输Package Control: Install Package回车;如果报错或没反应,说明损坏,得重装 - 等列表完全加载完再输名字,手快输一半就匹配容易选错
- 装完不用重启,但右键菜单只出现在「已打开的文件标签页」上——不是侧边栏、不是编辑区空白处、更不是未保存的
Untitled-1
为什么点了 Compare Side by Side 却全红/没反应
它只认两个硬条件:两个文件都已作为独立标签页打开,且至少有一个被显式激活过(点一下标签页即可)。常见卡点:
- 两个标签页是同一文件的分屏副本(比如拖拽一个
index.js标签到右边),它拒绝对比——必须是不同路径的文件 - 状态栏显示的是
untitled或Untitled-1,哪怕你刚Ctrl+S过,也得再点一次保存确认路径落地 - 一边是
UTF-8 with BOM,另一边是纯UTF-8→ 第一行整行标红;解决:右下角点编码名 →Reopen with Encoding→UTF-8,再保存 - 缩进混用
Tab和 4spaces→ 每行都被当差异;解决:按Ctrl+Shift+P→ 输入Convert Indentation to Spaces - 换行符不统一(
\r\nvs\n)→ 空行位置错位;解决:右下角点换行符标识 → 统一选Unix (LF) - 开了
Word Wrap→ 物理行号乱套,同步滚动失效;对比时务必关掉:View → Word Wrap取消勾选
Diffy 插件怎么调用才不翻车
Diffy 是目前最可靠的离线磁盘文件对比方式,适合核对备份、patch 或跨分支小文件,但它不自动识别 Git 状态,也不支持三路合并。
- 确保两个文件都已保存到磁盘(未保存的 buffer 不参与对比)
- 打开第一个文件,确保它在当前激活标签页
-
Ctrl+Shift+P输入Diffy: Compare with File(注意结尾有省略号),在弹出框中选第二个文件 - 对比窗口以新标签页打开,左侧为当前文件,右侧为被选文件;差异行高亮,但仅限文本 Accept/Reject,不能直接合并
- 常见错误:选反了主从顺序——
Diffy总是把“当前激活文件”当左栏,“你选的文件”当右栏;如果加减号逻辑反了,换过来重试就行 - 大文件(>5MB)可能卡死;建议先确认大小,或改用终端:
git diff --no-index file1.js file2.js,再把输出粘进 Sublime
别碰内置 Text: Diff 命令
这个命令不是为文件对比设计的,而是为选中文本片段服务的。强行用来比两个文件,极易出错:
- 操作路径:全选第一个文件 → 复制 → 切到第二个文件 → 全选 → 右键
Text → Diff - 问题在于:它把两段文本拼成一个长串再按行切分,一旦两文件行数不等或有空行偏移,对齐全乱
- 不支持跨文件路径输入,无法验证来源,也无法复现
- 结果是只读快照,且无上下文行(no context lines),删了哪行、加了哪行全靠猜
真正卡住人的地方从来不是“怎么打开对比窗口”,而是对比结果里哪些红块该信、哪些该忽略——Diffy 和 Compare Side-By-Side 都不会告诉你“这行只是换了变量名,逻辑没变”,它们只回答“字面是否一致”。编码、换行符、缩进、BOM,这些看似边缘的细节,才是实际工作中最常打断流程的点。











