Sublime Text原生不支持项目级差异对比,需组合使用SideBarEnhancements比路径、Find All in Files筛同名文件、命令行diff预筛选及Diffy逐个比对,并务必统一编码与换行符。

Sublime Text 本身不支持项目级差异对比,所谓“对比两个项目”,实际只能靠组合策略:先找出哪些文件路径不同、哪些内容不同,再逐个处理。没有一键扫完整个文件夹树并高亮所有差异的原生能力,也别指望插件能全自动完成。
用 SideBarEnhancements + 系统 diff 扫目录结构差异
想快速知道 A 项目比 B 项目多了哪些文件、少了哪些文件,不能靠肉眼翻侧边栏——得让系统帮你列出来。
- 先装
SideBarEnhancements(通过 Package Control 安装) - 在侧边栏中,按住
Ctrl(Windows/Linux)或Cmd(macOS),点击选中两个项目根目录(必须是文件夹,不是单个文件) - 右键 →
Diff→ 此时 Sublime 会调用你配置的外部命令,比如 macOS 上默认走opendiff,但新版 macOS 已移除它;更通用的做法是改配置为:{ "advanced": { "diff": ["diff", "-r", "$file", "$file2"] } }注意:$file2只在双选文件夹时生效 - 终端输出的是纯文本结构差异(类似
Only in A: xxx.py),不带颜色、不自动打开 GUI,但胜在准确、无编码干扰
这个方法只比路径和文件名,不读文件内容。如果你发现某文件在两边都存在,但内容可能不同,就得进下一步。
用 Find All in Files 快速定位“同名但内容不同”的文件
这是最实用、也最容易被忽略的技巧:不打开任何 diff 插件,直接用 Sublime 自带的全局搜索筛出可疑文件。
- 按
Ctrl+Shift+F(Win/Linux)或Cmd+Shift+F(macOS)打开Find All in Files - 在
Where栏填入两个项目的绝对路径,用英文逗号隔开:/path/to/project-a,/path/to/project-b - 在
Find栏输入一个项目里必然存在、且不太可能被删改的“锚点字符串”,比如:__version__ =、"main":、def setup_app(—— 越具体越好,避免匹配到注释或字符串字面量 - 勾选
Whole Word和Match Case,取消Regex - 点
Find,结果会按文件分组显示。如果某个文件只在一边出现,说明它很可能被删了、重命名了,或者根本没同步过去
这个操作不依赖插件、不卡顿、不乱码,适合几百个文件的中等规模项目。但它没法告诉你“同一文件里哪几行变了”,只是帮你把范围从“整个项目”缩小到“这几个文件”。
批量对比同名文件?别手动,用命令行预筛选
想对 project-a/foo.py 和 project-b/foo.py 逐个运行 diff,又不想一个个右键点开——那就别在 Sublime 里硬扛。
- 先在终端里跑一遍:
diff -rq project-a project-b | grep 'differ$',它会列出所有同名但内容不同的文件路径 - 把输出保存成列表,比如:
project-a/utils.py project-b/config.json
- 然后在 Sublime 里用
Ctrl+P(Goto Anything)快速打开这些路径,再用Diffy: Compare with Active View逐个比——这样比盲目全开高效得多 - 注意:
Diffy默认读磁盘文件,所以确保你已经Ctrl+S保存了所有修改,否则它比的是旧版本
这一步的关键在于接受 Sublime 的定位:它是编辑器,不是 diff 工具。让它做它擅长的事——打开、高亮、跳转;把“发现差异”的体力活交给 shell。
中文/GBK/含 BOM 文件对比前必须统一编码
几乎所有“对比结果全是红块绿块但内容明明一样”的问题,根源都在编码和换行符上,不是插件坏了。
- 打开每个待比文件,在窗口右下角点击当前编码名(如
UTF-8或Western (ISO 8859-1))→ 选Reopen with Encoding→ 强制指定为UTF-8 - 再点右下角换行符标识(如
Windows (CRLF))→ 选Convert Line Endings→ 统一为Unix (LF) - 保存后再对比。不执行这步,
FileDiffs和Diffy都会把 BOM 字节或\r\n当作真实内容差异来标红 - 别信插件“自动识别编码”——Sublime 加载文件时就决定了文本流,插件只在这个流上做行比对,不会回退重读
项目级对比真正难的从来不是功能有没有,而是你是否愿意在对比前花 30 秒统一编码和换行符。跳过这步,后面所有操作都是在错误前提下反复验证错误结果。











