VSCode正则无法跨行回溯匹配,^(.$)\n\1$仅能删除相邻重复行,因引擎不支持(?=.^\1$)类写法;且依赖LF换行符,对CRLF需先转换,也无法保留原始顺序。

VSCode 本身不支持“保留原始顺序、一键去重”的原生操作,必须明确选择:要保留原始顺序就用插件,要省插件就得先排序再删相邻重复行。
为什么正则 ^(.*$)\n\1$ 只能删相邻重复行
VSCode 的正则引擎不支持跨行回溯匹配,^(\S.*$)\n(?=.*^\1$) 这类写法在查找替换里根本不会生效。它只能让 \1 捕获上一行的完整内容,并严格依赖换行符是 \n(LF)。如果你的文件是 Windows 风格的 \r\n,得先点右下角 CRLF → 选 LF,否则匹配失败。
-
^(.*$)\n\1$只匹配「某行 + 紧接着一模一样的下一行」,中间插了别的行就断了 - 它对首尾空格敏感:
abc和abc被视为两行,不会被删 - 无法区分第几次出现——它只管“紧挨着的重复”,不是“全局首次保留”
想保留原始顺序?装 Unique Lines 插件最稳
实测下来,Unique Lines(作者 larryzhao)比 Duplicate Line Remover 更可靠,后者对含制表符或前导空格的行容易误判。
- 全选文本 →
Ctrl+Shift+P→ 输入Unique Lines: Remove Duplicates - 默认保留第一次出现的行,逐字符比对(包括空格),不模糊处理
- 如果想忽略首尾空白再比较,得提前运行
Ctrl+K Ctrl+X(Trim Trailing Whitespace) - 万行以内无压力;超 5 万行时 VSCode 主进程可能卡顿几秒——这不是插件问题,是编辑器自身限制
用原生 Sort Lines (Unique) 要防三个坑
VSCode 自带的 Sort Lines (Unique) 命令能一步完成排序+去重,但它不是“去重后排序”,而是“排序过程中跳过重复项”,结果必然乱序。
- 执行前务必先清理:用
Ctrl+K Ctrl+X去尾部空格,再用^\s*$替换为空删空行 -
abc和abc会被当成不同行,导致去重失效 - 数值排序会错乱(
10排在2前面),真要按数字排,得先补零或提取纯数字列再操作
真正难的从来不是“怎么删”,而是“删完是否还符合语义”——比如 JSON 数组、import 列表、日志时间戳,这些结构一旦顺序错乱或空格不一致,后续解析就可能失败。动手前多看两眼原始数据特征,比猛敲快捷键重要得多。











