Sublime Text 不支持跨项目批量 diff,需依赖 git 或系统命令生成差异数据后再用 Sublime 可视化:git status --porcelain 列变更、diff -r 直接比目录、Find in Files 快速定位内容改动,插件因无法遍历目录和聚合状态而无法实现真正项目级 diff。

Sublime Text 本身不支持跨项目批量 diff,所有“项目级差异”操作都得绕开编辑器,靠 git 或系统命令驱动,再把结果导入 Sublime 做可视化处理——它不会自动扫描目录、识别新增/删除文件、也不维护状态快照。
用 git status --porcelain 快速列出变更文件
这是最稳、最轻、兼容性最强的起点。只要两个项目都在 Git 仓库里(哪怕只是临时 git init),就能用它生成机器可读的变更列表:
- 进第一个项目根目录,运行
git status --porcelain,复制输出(每行形如M src/main.js、?? config.yaml) - 进第二个项目根目录,同样执行,保存两份输出到不同文本文件(比如
a.txt和b.txt) - 用 Sublime 打开这两个文件,全选 →
Ctrl+Shift+P→ 输入Diff→ 选Text: Diff,就能看到哪些文件被修改/新增/删除 - 注意:
--porcelain输出不含颜色和空格干扰,但不区分“工作区 vs 暂存区”,若需精确 staging 状态,改用git diff --name-status --cached
diff -r 直接比对两个项目目录(无 Git 也行)
当项目没用 Git,或你想跳过版本控制语义、直接看字节级差异时,终端 diff -r 是唯一可靠路径:
- Linux/macOS:运行
diff -r /path/to/project-a /path/to/project-b | grep -E "^(diff|Binary|Only)" > diff-report.txt,过滤掉冗余行后,用 Sublime 打开diff-report.txt - Windows:用
fc /r(功能弱)或装diffutils后调用同名命令;更推荐在 WSL 里跑原生diff -r - 中文路径要加
--strip-trailing-cr防 CRLF/LF 错位,否则大量“假差异” - 大目录慎用:
diff -r不跳过node_modules,建议先grep -v过滤或用--exclude-dir=node_modules
用 Sublime 的 Find in Files 批量定位差异内容
当你已有变更文件列表(比如从 git status 复制来),想快速扫一遍“到底改了什么”,别一个个点开:
- 在 Sublime 中按
Ctrl+Shift+H(macOSCmd+Shift+H)打开Find in Files面板 - 在
Where栏粘贴文件路径,空格或换行分隔(如:src/ api/ lib/utils.ts) -
Find栏留空,勾选Regular Expression和Whole Word,点Find All - 底部结果面板会平铺所有匹配文件的全文,Ctrl+Click 行号可跳转——相当于把多个文件“压成一层”浏览
- 缺点:不显示行级差异,只提供上下文;若某文件在两个项目中内容完全一样,它也不会标出“无变化”
为什么插件做不到真正“项目级 diff”
几乎所有 Sublime 插件(包括 FileDiffs、Diffy、GitSavvy)都卡在同一个瓶颈:它们只能处理“已打开的标签页”或“单个文件路径”,无法主动遍历目录树、聚合状态、生成结构化报告。
-
GitGutter只盯当前文件,20 个标签页打开也看不出哪几个属于同一 commit -
GitSavvy的gs_show_file_diff要手动触发每个文件,不能gs_show_all_diffs -
Compare Side-by-Side和Sublimerge均要求两个文件都已保存且路径存在,无法比对内存缓冲区或临时 patch - 所有插件对编码、换行符、BOM 敏感,一旦两个项目用不同工具链生成,乱码和错位就是默认行为,不是 bug
真正的项目差异分析必须由外部工具完成,Sublime 只负责“展示”和“跳转”。别指望它替代 git diff --stat 或 meld . —— 它连递归扫描都得你手动写 shell 脚本驱动。

















