CodeMirror Duplicate Finder需调低minLines至4、similarityThreshold至70%,并开启includeStrings;Find in Files因纯文本匹配无法识别语义重复,应分层推进排查;.gitignore、BOM头、字符串内容会导致静默漏扫;变体重复必须人工介入判断。

CodeMirror Duplicate Finder 的最小可行配置
插件默认的 duplicate-finder.minLines 是 8 行、duplicate-finder.similarityThreshold 是 85%,这对真实项目太严苛——React Hook、工具函数、API 封装常只有 4–6 行,变量名一换相似度就掉到 60% 以下。必须手动调低门槛:
-
duplicate-finder.minLines改为4(小逻辑块也能捕获) -
duplicate-finder.similarityThreshold改为70(容忍参数名、空格、注释差异) - 若项目大量使用模板字符串或 JSX,务必开启
duplicate-finder.includeStrings:true
这些配置写在 VSCode 设置 JSON 里即可,团队成员同步 .vscode/settings.json 就能统一行为,不用各自折腾。
为什么 Find in Files 搜不到重复但人眼能看出来
因为 Ctrl+Shift+F 是纯文本匹配,完全不理解代码语义。它会把下面三段当成完全不同的代码:
axios.post('/api/login', { username, password })
fetch('/api/login', { method: 'POST', body: JSON.stringify({ user, pass }) })
const res = await api.login({ name: username, pwd: password })
真正有效的做法是分层推进:
- 先用
Ctrl+Shift+F搜共性标识符:localStorage.setItem、catch (err)、if (!data)等高频副作用或校验点 - 把搜出的 2–4 个可疑片段复制进 diffchecker.com 快速比对结构
- 对 JSX 或 Vue 模板里的重复,直接打开文件,用
Ctrl+K Ctrl+X清空尾随空格后,再Shift+Alt+F统一缩进,降低视觉干扰
.gitignore 和文件编码会静默破坏查重
插件扫描时不会报错,但会跳过被排除的路径或解析失败的文件,导致“明明有重复却搜不到”。常见静默失效点:
-
.gitignore里写了src/utils/**,插件根本不会扫描这个目录 - Windows 上某些旧文件带 BOM 头,插件读取时报
Invalid character却不提示,结果该文件所有内容都不参与比对 - 插件默认忽略注释和字符串内容,而你的重复逻辑可能藏在
`${api}/v1/${id}`这类模板里
验证是否扫全:右键执行 Find Duplicates in Workspace 后,留意侧边栏顶部是否显示“Scanned X files”,如果数字明显偏少(比如只扫了 12 个,而项目有 200+ JS 文件),立刻检查上述三项。
变体重复必须人工介入,别等插件标红
插件能发现连续多行文本雷同,但对业务逻辑层面的重复无能为力。比如:
- 一个函数用
const [a, b] = data,另一个用const a = data[0]; const b = data[1] - 同一段错误处理,一处写成
if (!res.ok) throw new Error(...),另一处拆成if (res.status >= 400) { ... } - 超时时间从
5000改成10000,其余完全一致
这类情况插件 100% 漏检。真正有效的动作是:定期用 Ctrl+Shift+F 搜关键动词(如 timeout、retry、parse),把结果按文件分组,挑出最常出现的 2–3 个文件,人工快速扫一遍上下文结构——工具只负责缩小范围,判断要不要合并、怎么抽象,得你来拍板。











