Sublime Text 的 Remove Duplicate Lines 命令仅删除相邻重复行,必须先执行 Sort Lines 排序才能有效去重;若需保持原序,应使用正则 ^(.*)(\n\1)+$ 替换,或借助插件实现全局保序去重。

Sublime Text 自带的 Sort Lines 命令本身**不会自动删除重复行**,它只排序——这是最常被误解的一点。要真正去重,必须配合“排序 + 去重”两步,或用正则手动处理。
怎么用 Sort Lines 实现去重(必须先排序)
Sublime 的 Sort Lines 是去重的前提,因为 Remove Duplicate Lines(内置命令)**只删除相邻重复行**。如果重复行不挨着,直接运行会无效。
- 选中你要处理的文本区域(或全选
Ctrl+A) - 执行
Sort Lines:Ctrl+Shift+P→ 输入Sort Lines→ 回车 - 再执行
Remove Duplicate Lines:Ctrl+Shift+P→ 输入Remove Duplicate Lines→ 回车
这两步缺一不可。跳过排序,Remove Duplicate Lines 会漏掉大部分重复项。
为什么 Remove Duplicate Lines 不是“智能去重”
这个命令底层逻辑非常简单:逐行比对,仅当当前行与上一行**完全相同且紧邻**时才删掉当前行。它不建哈希表、不缓存、不回溯。
- 输入:
apple banana apple cherry
→ 执行后仍是原样(因为两个apple不相邻) - 输入:
apple apple banana cherry
→ 执行后变成apple banana cherry
- 空行、首尾空格、大小写都会影响判断(
Apple≠apple)
不想排序?用正则快速去重(更灵活但需注意边界)
如果不能改变原始顺序(比如日志按时间排列),就别用 Sort Lines,改用正则替换:
-
Ctrl+H打开替换面板,勾选. (Regex) - 查找框填:
^(.*)(\n\1)+$
- 替换框留空
- 点击
Replace All
说明:\1 指向第一组捕获内容,(\n\1)+ 匹配后续所有完全相同的紧邻行。这个表达式只处理**连续重复块**,不跨段落;若想全局去重保序,得用插件(如 Text Pastry 或 Advanced CSV 配合列操作)。
容易忽略的细节:大小写、空格、BOM 和编码
哪怕看起来一样的两行,也可能因以下原因无法被识别为重复:
- 一行末尾有空格或制表符(
apple≠apple) - 混合了
\r\n和\n换行符(尤其从 Windows / macOS 复制过来的文本) - 文件含 UTF-8 BOM(
开头),导致首行实际不匹配 - 中文标点混用(全角/半角逗号、顿号)
建议处理前统一清理:用正则 \s+$ 删除行尾空白,再确认换行符一致(File → Line Endings 设为统一类型)。










