CodeMirror Duplicate Finder 是最实用的重复代码检测工具,响应快、配置少、不拖慢编辑器;需调低 minLines(建议5)、similarityThreshold(建议75),并开启 includeStrings 以适配 React/Vue 项目。

CodeMirror Duplicate Finder 是目前最实用的选择
它不是功能最全的,但响应快、配置少、不拖慢编辑器,适合日常快速扫一遍重复块。SonarLint 或 Simian 命令行工具虽然更准,但启动慢、配置重、结果噪音多,真要查重复,先用它筛出 3–5 个可疑文件,再人工细看比什么都快。
安装后必须调的两个配置项
默认设置会漏掉大量真实重复,尤其在 React/Vue 项目里——小钩子、错误处理、API 封装常只有 4–6 行,变量名一换相似度就归零。
-
duplicate-finder.minLines改成5(默认8),否则useEffect(() => { ... }, [])这类逻辑直接被跳过 -
duplicate-finder.similarityThreshold降到75(默认85),不然const data =和const payload =就算两段代码 - 如果重复藏在模板字符串或 JSX 里,必须开启
duplicate-finder.includeStrings: true(默认为false) - 检查
.gitignore或files.exclude是否屏蔽了待查目录,比如"src/utils/**"被排除后,插件根本不会读那些文件
右键触发 + 侧边栏分组查看
装好并改完配置后,不用记命令:在编辑器任意位置右键 → 选 Find Duplicates in Workspace,结果立刻以分组形式出现在侧边栏。每组代表一个重复模式,点击任意一处,自动跳转到所有匹配位置。
注意:它只识别连续多行、结构相似的文本块,不理解语义。两个 for 循环写法不同(for (let i = 0; i vs for (const item of arr))不会被标为重复;但两段完全相同的 catch (err) { console.error(...); Sentry.captureException(err); } 会被高亮分组。
它查不到的重复,得靠组合技补位
插件对“变体重复”基本无解:参数名不同、是否加日志、if 分支拆开写、超时时间从 5000 改成 10000……这些都逃过检测。
这时候更高效的做法是:
- 用
Ctrl+Shift+F搜共性关键词,比如localStorage.setItem、catch (err)、new Date().toISOString() - 把搜索结果中疑似重复的几段代码复制进 diffchecker.com 快速比对
- 或者用
simian命令行跑一次跨文件扫描(需配simian.json),它对缩进/空格更宽容,但需要额外安装和配置
别指望插件标出全部重复——它只是帮你把“扫整个项目”的体力活,压缩成“看三四个文件就够了”。剩下那点是否真该合并、抽成公共函数、还是保留差异,得你对着业务逻辑判断。真正难的从来不是发现重复,而是判断要不要动。











