
Sublime Text 没有真正意义上的“全局保序去重”原生命令——所有看似一键的操作,要么只删相邻重复(Remove Duplicate Lines),要么必然打乱顺序(Sort Lines: Unique)。你得先明确:要保序?要处理大文件?还是只要快速清掉粘贴时多出来的空行或日志刷屏?选错路径,删一半就停了,还找不到漏在哪。
为什么 Remove Duplicate Lines 总是删不干净
它不是在全文建哈希表比对,而是逐行扫描,只判断「当前行是否和上一行完全相同」。哪怕两行内容一模一样,中间隔了一行其他文本,它就直接跳过。
- 对空白字符极度敏感:
"abc"和"abc "(末尾空格)算两行 - 换行符不统一时失效:Windows 的
\r\n和 Unix 的\n混用,^和$锚点会错位 - 不支持忽略大小写、不支持按列匹配、不能跳过空行
- 快捷键无默认绑定,必须从命令面板(
Ctrl+Shift+P)里搜才能调出
想保序去重?用正则 ^(.*$)\n(?=.*^\1$) 手动清理
这个正则能匹配「后面还有相同行」的所有重复出现项(除第一个),适合代码、配置项、API 返回列表等依赖原始顺序的场景。
- 打开查找面板(
Ctrl+F),勾选 Regular Expression 和 Whole Line - 输入:
^(.*$)\n(?=.*^\1$) - 点 Find All,再按
Ctrl+Shift+L转为多光标,按Delete删除所有匹配行 - ⚠️ 前提:先统一换行符(
File → Line Endings → Unix),否则\n匹配失败 - ⚠️ 大于 10MB 的文件慎用——Sublime 正则引擎会明显卡顿,甚至假死
大文件或高频处理?别硬扛,换外部命令
超过 5 万行时,Sublime 的排序和正则性能断崖式下降,内存占用陡增。这时候系统工具更稳、更快、更可控。
- Linux/macOS 终端:
awk '!seen[$0]++' file.txt > dedup.txt(保序) 或sort -u file.txt > dedup.txt(排序后去重) - Windows PowerShell:
Get-Content file.txt | ForEach-Object { if ($seen[$_.Trim()]++ -eq 1) { $_ } } | Set-Content dedup.txt(保序,需手动Trim()) - 跨平台 Python 一行:
python3 -c "print(''.join(dict.fromkeys(open('file.txt'))))" > dedup.txt - 注意:所有外部命令都绕过 Sublime 编码/换行符陷阱,但要求文件已保存——未保存的缓冲区内容无法被读取
插件装哪个?只认 Filter Lines 和 Find Duplicate Lines
别搜名字带“Duplicate”的插件——90% 只是包装了 Remove Duplicate Lines,没新增逻辑。真正值得装的只有两个:
-
Filter Lines:安装后命令面板搜Filter Lines: Unique,行为等价于awk '!seen[$0]++',支持选区、保序、轻量稳定 -
Find Duplicate Lines:提供Remove All Duplicates,自动哈希判重,不依赖排序;但默认只保留首次出现行,不支持“保留末次”或“按某列优先” - ⚠️ 插件不能解决首尾空格问题:如果
"id:123"和"id:123 "都存在,它们仍会被视为不同行——处理前先用正则\s+$清尾空格更实际
最常被忽略的其实是“重复”的定义本身:是整行?某几列?是否该忽略大小写或不可见字符?没想清这点,换十个命令或插件,删完还是不对。

















