vscode原生命令sort lines (unique)不保序去重,仅合并相邻重复行;unique lines插件(larryzhao版)严格保序、默认留首次出现行、精确匹配空白字符,是目前最稳方案。

VSCode 自带命令不能保序去重,必须用插件或组合操作;Unique Lines 插件(larryzhao 版)是目前最稳的选择,它默认保留首次出现的行,且严格比对空白字符。
为什么 VSCode 原生命令 Sort Lines (Unique) 不等于“去重”
这个命令实际执行的是「先排序 → 再合并相邻重复行」两步。如果原始文本里 apple 出现在第 1 行和第 99 行,它不会删掉第 99 行——因为中间隔着其他内容,不“相邻”。你看到的“去重效果”,只是巧合排到了一起。更关键的是:顺序彻底打乱,原始语义(比如日志时间序、配置项依赖序)全丢。
常见错误现象:
- 执行后行数没变,但内容看起来“少了几行”——其实是排序后肉眼漏看了重复项
- 执行后发现某几行被删了,但它们明明不重复——大概率是行尾有空格或制表符,
Sort Lines (Unique)把foo和foo当成不同行,却把foo和foo\t错判为相同
Unique Lines 插件怎么装、怎么用、怎么避坑
安装后无需重启,全选文本 → Ctrl+Shift+P → 输入 Unique Lines: Remove Duplicates 回车即可。它底层用 Set 缓存已见行的完整字符串(含首尾空格),只保留第一次出现的位置。
实操要点:
- 默认严格匹配,
"123"和" 123 "视为不同行,不会误删 - 若想忽略首尾空格再比较,得提前运行
Editor: Trim Trailing Whitespace(或用正则^\s+|\s+$替换为空) - 不支持“保留最后一次出现”的选项,如需该行为,得换用
Transformer插件 + 手动反转文本再去重 - 5 万行以上文本会卡顿几秒——这不是插件慢,是 VSCode 主进程对大文本批量操作的固有限制
不用插件?只能靠「排序 + 正则」组合拳
纯原生方案可行,但步骤多、容错低。核心限制是:VSCode 正则不支持跨行回溯,^(\S.*$)\n(?=.*^\1$) 这类写法根本无效。
必须按顺序操作:
- 全选 →
Ctrl+Shift+P→ 输入Sort Lines回车(确保是内置命令,不是插件) - 检查右下角换行符:如果是
CRLF,点它改成LF(否则\n\1匹配失败) -
Ctrl+H打开替换,启用正则,查找框填^(.*$)\n\1$,替换框留空 - 点「全部替换」——这只会删掉紧挨着的第二行及之后的重复行,第一处永远保留
注意:\1 只能捕获上一行的完整内容,且要求换行符严格一致;含空行或混合缩进的文本,容易漏匹配。
别踩这些隐性坑
很多人试了几次失败,其实卡在细节:
-
Duplicate Line Remover插件对含制表符的行识别不稳定,尤其 Windows 下混用空格/Tab 时,建议直接弃用 -
Transformer插件的Transform:Unique Lines默认不保留原始顺序,它内部也是先排序再过滤,和原生命令同源 - 用正则时若启用了
.匹配换行符(Dot matches newline),^和$会失效,导致整段被当一行匹配 - 日志类文本(含时间戳)不要硬套去重——重复的错误信息本身就有价值,删掉反而丢失上下文
真正保序、可预测、免配置的去重,目前只有 Unique Lines 插件能做到。其它方案要么改顺序,要么漏判断,要么要你手动预处理空白——这些细节,往往比“能不能做”更消耗时间。











