Sublime Text需借助Diffy等插件调用系统diff命令实现文件对比,核心是确保系统已安装diff、插件正确安装并配置diff_command路径,且文件编码统一为UTF-8。

怎么用 Sublime Text 内置的 diff 功能对比两个文件
Sublime Text 本身不带图形化双栏 diff 工具,但通过 diff 命令行工具 + 插件或快捷操作,能快速比对内容差异。关键不是“有没有”,而是“怎么调用系统已有的 diff”。
- 确保系统已安装
diff(macOS / Linux 默认有;Windows 需装 Git for Windows 或 WSL,并把git\usr\bin加进 PATH) - 打开两个待比对的文件 → 全选第一个文件内容 → 右键 → Copy → 切到第二个文件 → 全选 → 右键 → Paste → 此时会弹出「Replace?」提示,点 No → 然后按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Diff: Compare with Clipboard并回车 - 如果没看到这个命令,说明没装
Diffy或SublimeDiff这类插件 —— 它们是让内置 diff 能用的关键,不是可选项
为什么 Diff: Compare with Clipboard 不出现
这不是 Sublime 自带功能,而是依赖第三方插件注入的命令。原生 Sublime 的 view.run_command("diff") 是空壳,没绑定实际逻辑。
- 最常用的是
Diffy:通过 Package Control 安装后,自动注册Diff: Compare with Clipboard和Diff: Compare Current File with... - 注意:
Diffy默认用系统diff -u,若你改过 shell 的diff别名(比如 alias diff='icdiff'),它可能报错或无输出 —— 建议在Diffy.sublime-settings里显式指定"diff_command": ["diff", "-u"] - Windows 用户若用 Git Bash 的
diff,路径含空格(如C:\Program Files\Git\usr\bin\diff.exe),必须用双引号包裹,否则插件启动失败且无提示
对比同一文件修改前后(撤销前 vs 当前)
这是高频场景,但 Sublime 没提供「和上一保存版本比对」的按钮。得靠临时快照 + 手动触发 diff。
- 编辑中想看改了啥:先按
Ctrl+Shift+P→ 输入Save without Build(或直接Ctrl+S),再按Ctrl+Alt+Shift+T(默认绑定为new_window,需手动改键绑)→ 更可靠的做法是:右键标签页 → Clone File,然后在新标签页里按Ctrl+Z回退到上一状态,再用Diff: Compare with Clipboard对比 - 别依赖「File History」类插件:它们常读取 .sublime-project 缓存,而 Sublime 不自动保存历史快照,容易比错
- 如果只是想确认某段代码是否被改过,用
Ctrl+Shift+P→Revert File更直接 —— 比对只是辅助,还原才是目的
diff 结果乱码或显示不全
常见于含中文、emoji 或宽字符的文件,本质是编码识别失败,不是 diff 工具问题。
- Sublime 默认用 UTF-8 解码,但
diff命令输出是 raw bytes。若文件是 GBK 编码,diff -u输出的汉字会变成乱码 —— 解决方法:先用 Sublime 把两个文件都转成 UTF-8(File → Save with Encoding → UTF-8),再对比 - diff 输出超长时(比如 5000+ 行),Sublime 的 diff view 可能卡顿甚至崩溃 —— 这时候不如直接终端执行:
diff -u file1.txt file2.txt | less - 某些插件(如
SublimeDiff)会把 diff 结果写入新 buffer,但默认禁用语法高亮 —— 可手动在新 tab 中按Ctrl+Shift+P→Set Syntax: Diff让 +− 号变色
真正麻烦的从来不是怎么调出 diff,而是搞清当前 buffer 的编码、系统 diff 的路径、插件是否真生效 —— 这三者只要一个没对上,就只能看到空白结果或报错。

















