sublime text 的 remove duplicate lines 仅删除相邻重复行,非全局去重;真正全局去重要先排序再执行 unique,或使用 filter lines 插件保留原始顺序。

Sublime Text 自带的排序 + 去重不是“一键去重”,而是两步强耦合操作:必须先 sort_lines,再用 unique 或正则,否则重复行大概率删不干净。
为什么直接点 Remove Duplicate Lines 会漏掉重复项
Sublime 的 Edit → Permute Lines → Unique(快捷键 Ctrl+Shift+U)只删除**相邻重复行**,行为等同于 Unix 的 uniq,不是 sort -u。原始数据如果是 apple、banana、apple、cherry,它不会动第二个 apple——因为前后不挨着。
- 适用场景:日志里连续刷屏的错误、粘贴时手抖多按了几次回车
- 不适用场景:从多个 API 合并的 ID 列表、手动拼接的配置项、CSV 导出后去重
- 真正要全局去重,只有两个可靠路径:排序 +
Unique,或排序 + 正则替换
排序后去重的正确操作顺序
顺序错一步,结果就不可靠。默认行为下,大小写和数字都会干扰结果,得提前干预。
- 先全选目标文本(
Ctrl+A),确保每行至少有一个可见字符被包含;只点光标或框中部分单词无效 - 执行
sort_lines:Ctrl+F9(Win/Linux)或Cmd+F9(Mac)——注意这不是按整行语义排,而是比首非空字符的 ASCII 值 - 若含大小写混用(如
Apple和apple),排序前先统一格式:Ctrl+K, Ctrl+L全转小写 - 若含数字字符串(如
log2.txt、log10.txt),原生排序会得出log10.txt在log2.txt前,此时要么补零,要么装Natural Sort插件 - 排序完成后,再执行
Ctrl+Shift+U或菜单Edit → Permute Lines → Unique
想保留原始顺序?别用 sort_lines + unique
如果你处理的是代码文件(比如函数声明列表),需要“删掉后面重复的定义,但第一个必须留下”,sort_lines 会打乱所有行序,完全不可接受。
- 推荐方案:安装
Filter Lines插件,调出命令面板(Ctrl+Shift+P),输入Filter Lines: Unique回车 - 替代方案:用正则
^(.*$)\n(?=.*^\1$)(开启. matches newline和正则模式),它只删后续重复行,首行不动 - 注意:
Filter Lines插件在 >10MB 大文件中更稳;而正则在超长行或嵌套换行符时可能匹配失败
自定义降序和数值排序能省掉一半操作
Sublime 没有原生 Z-A 快捷键,也没数值排序,但这两类需求高频到值得花 2 分钟配好。
- 降序:打开
Preferences → Key Bindings,加一条:[{"keys": ["ctrl+shift+f9"], "command": "sort_lines", "args": {"reverse": true}}] - 数值排序:装
Natural Sort插件后,选中 →Ctrl+Shift+P→ 输入Natural Sort: Sort Ascending - 别依赖
Sort Lines (Case Sensitive)菜单项——它只是个独立命令,不是开关,每次都要手动选
最常被忽略的是:排序前没检查是否混有空行或全空白行,它们会被排到最前面,导致去重后第一行意外变空;还有人把 Ctrl+Alt+R(Reverse)和 Ctrl+Shift+U(Unique)记混,按错一次就删数据,没法完整撤销。











