vscode无法直接正则全量去重,必须先排序再用^(.*$)\n\1$处理相邻重复;保留原序应装unique lines插件;ctrl+shift+l/ctrl+f不适用去重;语义嵌套中的伪重复需人工核对。

VSCode删重复行必须先排序,否则正则无效
VSCode自带的正则查找替换不支持跨行回溯,^(.*$)\n(?=.*^\1$)这类写法在VSCode里根本匹配不到非相邻重复行。想靠一次正则「全量去重」,实际只能处理已排序文本中的相邻重复项。
操作流程是:全选 → Ctrl+Shift+P 输入 Sort Lines 回车 → Ctrl+H 打开替换面板 → 开启正则(点 .* 图标)→ 查找框填 ^(.*$)\n\1$ → 替换框留空 → 点「全部替换」。
- 注意换行符统一为
LF(右下角点击CRLF→ 选LF),否则\n匹配失败 -
[^)]*这类写法在这里不适用——它针对函数调用,不是整行去重 - 如果文件含 BOM 或混合缩进(空格+Tab),排序可能错位,建议先执行
editor.trimAutoWhitespace
保留原始顺序去重?装插件比硬写正则靠谱
想删重复但不打乱原有顺序,Unique Lines(作者 larryzhao)是最稳的选择。它内部用哈希表记录首次出现位置,严格按字符比对,不会把 123 和 123 当成同一行。
安装后:全选文本 → Ctrl+Shift+P → 输入 Unique Lines: Remove Duplicates 回车。
- 插件默认保留第一次出现的行,不提供「留最后一次」选项
- 若需忽略首尾空格再比较,得提前运行
editor.action.trimTrailingWhitespace - 5 万行以上时 VSCode 主进程会卡顿几秒——这不是插件问题,是编辑器自身限制
误用 Ctrl+Shift+L 或 Ctrl+F 去重,90% 是白忙
Ctrl+Shift+L 只作用于当前文件,且只匹配「光标所在词的完整实例」;Ctrl+F 的「查找全部」仅高亮起始位置,不会自动选中整行,更无法区分第几次出现。
比如搜 console,它会把 console.log、myconsole 全标出来;加锚点 ^console$ 后,仍只高亮 console 两个字,而不是整行——你没法一键删掉所有匹配行。
- 光标停在引号、括号或空格上,
Ctrl+Shift+L直接静音 - 语言模式为
Plain Text时,下划线分隔的词(如user_name)会被拆开匹配 - 多文件去重?必须用
Ctrl+Shift+F全局搜索 + 手动确认,别指望快捷键跨文件生效
真正难处理的,是语义嵌套里的“伪重复”
正则能删掉两行完全相同的 const a = 1;,但删不了字符串里或注释中一模一样的内容:// const a = 1; 或 console.log("const a = 1;")。这时候强行用正则,大概率误伤。
这类情况没有银弹:预览匹配项时,看到疑似在字符串/注释里的结果,就该停下来手动核对。VSCode 不具备语法树感知能力,所谓「智能去重」目前只存在于插件的有限上下文判断中。
别迷信正则能覆盖所有场景——当一行文本同时出现在代码、注释、模板字符串里时,删哪条、留哪条,终究得人来定。











