Sublime如何快速删除重复行? (快捷键与命令面板)

13次阅读

sublime Text中sort Lines仅排序不去重,需先排序再运行Sort Lines: Unique(或自定义ctrl+alt+u快捷键)才能真正去重;大文件建议用shell命令处理,并注意不可见字符影响去重效果。

Sublime如何快速删除重复行? (快捷键与命令面板)

用 Sort Lines 命令去重(但要注意它只排序不真正去重)

sublime text 自带的 Sort Lines 命令(Ctrl+Shift+P → 输入 Sort Lines)会按字典序重排所有选中行,但它**不会删除重复行**,只是把重复行挤在一起。这是最容易误解的点——很多人以为“排序完手动删”是标准流程,其实有更直接的方式。

真正去重需要组合操作:先排序,再运行 Sort Lines: Unique(Sublime 4.4+ 内置,旧版需安装插件)。这个命令会保留每组重复行中的第一行,其余全删。

  • 没装 Package Control?先装,否则找不到高级命令
  • 如果命令面板搜不到 Sort Lines: Unique,说明你用的是 Sublime Text 3 且未安装 AdvancedSorting 插件
  • 注意:该命令作用于当前选区;全选后再运行,才对整个文件生效

快捷键方案:自定义 ctrl+alt+u 绑定去重命令

默认没有一键去重快捷键,但可以自己加。打开 Preferences → Key Bindings,在右侧用户键绑定里添加:

[     {         "keys": ["ctrl+alt+u"],         "command": "sort_lines",         "args": {"unique": true}     } ]

保存后,全选文本(Ctrl+A),再按 Ctrl+Alt+U 就能一步完成排序+去重。

  • macOS 用户把 ctrl 换成 super(即 Cmd+Alt+U
  • 别写错 "unique": true —— 写成 true 不带引号或拼错字段名都会让快捷键失效
  • 这个绑定只影响当前文件类型;如只想在纯文本中生效,可加 "context" 限定

处理大文件时为什么卡住?别用 GUI 命令

当文件超过 10 万行,Sort Lines: Unique 会明显变慢甚至无响应——它本质是内存内排序+遍历比对,没做流式处理。

此时建议切到终端,用系统命令更快更稳:

sort file.txt | uniq > deduped.txt

或者保留原始顺序(只删后续重复项):

awk '!seen[$0]++' file.txt > deduped.txt
  • Sublime 的 GUI 命令无法跳过首行、忽略空行或按列去重;这些都得靠 shell 工具
  • 如果必须在 Sublime 里编辑大文件,先用命令行预处理,再打开结果文件
  • 不要尝试用正则 ^([^rn]+)r?n1r?n 替换去重——逻辑不可靠,还容易误删

为什么有些“重复行”没被删掉?检查不可见字符

看似相同的两行,可能一个结尾是 n,另一个是 rn;或某行末尾多了空格、全角空格、零宽字符。这时 Sort Lines: Unique 会认为它们不同。

排查方法:

  • 开启显示不可见字符:View → Show Whitespaces(或快捷键 Ctrl+Shift+PToggle Whitespaces
  • 用正则替换统一行尾:r?nn,再全选运行去重
  • 批量删行尾空格:Ctrl+H → 查找 [ t]+$,替换留空,勾选 Regular Expression

真正难搞的不是功能有没有,而是你以为删干净了,其实还有隐藏差异。每次去重前扫一眼空白符,省半小时返工。

text=ZqhQzanResources