Sublime原生Diff仅高亮差异,无法提取独有行;需用Diffy插件手动筛选或comm/grep命令实现集合运算,大文件应转向VS Code或命令行。

Sublime 本身不提供“提取互不相同行”这种集合运算功能,必须靠插件或外部命令;原生 Text: Diff 只高亮差异,不分离、不导出、不去重。
为什么不能用内置 Diff 直接提取不同行
Sublime 的 Text: Diff 命令(右键 → Text → Diff 或 Ctrl+Shift+D)只做视觉标记:红色删、绿色增,但结果不可编辑、不生成新文件、不区分“仅A有”和“仅B有”。它本质是 diff 输出的简化渲染,不是 set difference 工具。
- 你无法复制出“只在 file1 中出现的行”这个子集
- 所有高亮行都混在一起,没有标记归属(哪边独有、哪边共有)
- 空行、缩进、BOM、换行符不一致时,整行误判为“不同”,导致提取结果污染
用 Diffy 插件 + 手动筛选(轻量、免外部依赖)
Diffy 是目前最稳定、零配置的文本对比插件,虽不直接输出差集,但能快速定位独有行,适合小文件(
- 确保两个文件已打开为独立标签页,编码一致(右下角点开确认都是
UTF-8,不是UTF-8 with BOM) - 右键任一标签页 →
Diffy: Compare with Active View(注意不是 “Compare with Tab”) - 新标签页中,左侧是当前激活页,右侧是被比对页;
-开头行为左独有,+开头行为右独有 - 全选整个 diff 结果 →
Ctrl+H(替换)→ 查找^-.*$(正则模式开启),替换成空 → 得到所有左独有行;同理查^\+.*$提取右独有行
⚠️ 注意:Diffy 不忽略空格或大小写,所以 print("a") 和 print("A") 会被当作两行不同 —— 这不是 bug,是设计如此。
用命令行 comm 或 grep 真正提取差集(可靠、可复现)
如果你需要可复用、可脚本化、严格按行集合运算的结果,别在 Sublime 里硬扛。直接用 shell 命令更准更快:
- 先保存两个文件(比如
a.txt和b.txt),并确保已排序(comm要求):sort a.txt > a_sorted.txt<br>sort b.txt > b_sorted.txt
- 提取仅在
a_sorted.txt中出现的行:comm -23 a_sorted.txt b_sorted.txt - 提取仅在
b_sorted.txt中出现的行:comm -13 a_sorted.txt b_sorted.txt - 不想排序?用
grep -vxFf:grep -vxFf b.txt a.txt(提取 a 中有、b 中无的行)
这些命令输出的是纯文本流,可直接重定向保存:grep -vxFf b.txt a.txt > only_in_a.txt。Sublime 只用来打开结果文件即可。
大文件或需频繁操作时,绕过 Sublime 直接用 VS Code 或命令行
超过 1 万行的文件,Diffy 会卡顿,Text: Diff 渲染崩溃,Compare Side-By-Side 同步滚动失灵。此时 Sublime 已不是合适工具:
- VS Code 自带
File: Compare Active File With…,支持语法感知 diff,右键可“Copy Line”单独提取 - Python 一行搞定:
set(open('a.txt')).difference(set(open('b.txt')))(注意编码和换行符处理) - 真正要工程化处理,就该用
git diff --no-index a.txt b.txt配合--diff-filter=U或解析 patch 格式
Sublime 的优势是快开快关、轻量编辑,不是数据清洗。强行让它干集合运算,最后花在排查编码/换行符/缩进上的时间,远超直接敲两行命令。

















