sublime text 没有真正保序全局去重功能;remove duplicate lines 仅删相邻重复且依赖字节完全一致,正则方案 ^(.*$)\n(?=.*^\1$) 是唯一原生保序方法,但需先清洗换行符和空格;sort lines: unique 最省事但打乱顺序。

Sublime Text 没有“选中即去重”的功能,所有看似一键的操作,要么只删相邻重复(Remove Duplicate Lines),要么必然打乱顺序(Sort Lines: Unique)。真正保序、全局、可靠的去重,必须分步控制清洗、匹配和删除逻辑。
为什么 Remove Duplicate Lines 总是删不干净
这个命令不是全局扫描,它只比对「当前行和上一行是否字节完全一致」,中间插一行别的,就彻底失效。
- 三行内容为
apple→banana→apple,第二个apple不会被删 -
apple和apple(末尾多一个空格)被视为两行 - 文件混用
和时,哪怕内容一样也判为不同 - 未全选时,它只处理当前光标所在段落,不是全文
想保序?用正则 ^(.*$)
(?=.*^$) 手动标记再删
这是目前唯一原生支持的保序方案,它只匹配「后面还有相同行」的重复实例,首行自动跳过。但非常依赖前置清洗。
- 必须先统一换行符:
File → Line Endings → Unix - 打开查找面板(
Ctrl+F),勾选Regular Expression和Whole Line - 右下角点
.*启用. matches newline - 输入
^(.*$) (?=.*^$),点Find All,再按Ctrl+Shift+L转多光标,最后按Delete - 仍有残留?先跑一次
Find → Replace,查找s+$,替换为空,再重试
不介意顺序?直接用 Sort Lines: Unique(4.4+)
这是最省事的全局去重方式,等价于 sort -u,但它保留的是排序后每组中的第一行,不是原文中第一次出现的那行。
- 必须是 Sublime Text 4.4 或更新版本
- 操作:全选 →
Ctrl+Shift+P→ 输入Sort Lines: Unique→ 回车 - 数字字符串如
log2.txt和log10.txt会错序,需额外装Natural Sort插件或手动补零 - 快捷键需手动绑定:
{"keys": ["ctrl+alt+u"], "command": "sort_lines", "args": {"unique": true}}
真正卡住人的从来不是“怎么删”,而是没想清“什么是重复”:是整行字节一致?还是某几列相同?是否允许首尾空格差异?这点没定,后面所有操作都是在碰运气。大文件(>5MB)、含 CSV 字段、需忽略大小写或按列比对时,别硬扛 Sublime 正则——切终端跑 awk '!seen[$0]++' 或 Python 更稳。











