CodeMirror Duplicate Finder 是最实用的重复代码检测插件,但需调整minLines和similarityThreshold参数,并绕开search.exclude、files.exclude及.gitignore拦截,否则无法识别变量名不同、缩进差异或模板字符串包裹的逻辑重复代码。

CodeMirror Duplicate Finder 是目前 VSCode 里最实用的重复代码检测插件,但它不是装完就出结果——得调两个参数、绕开三个常见拦截点,否则大概率扫不到真问题。
为什么 Find in Files 搜不到逻辑重复?
Ctrl+Shift+F 只做字面匹配:变量名一换(data vs payload)、缩进多一个空格、注释位置挪了、模板字符串里换行了,它就当是两段完全不同的代码。它甚至无法识别 for (let i = 0; i 和 for (const item of arr) 是同一类遍历逻辑。所以手动搜 axios.post 找到 5 处,第 6 处用了 fetch 就直接漏掉。
CodeMirror Duplicate Finder 必调的两个配置项
默认设置对真实项目太保守,容易“查得到但没用”:
-
duplicate-finder.minLines改成5(默认8):React Hook、小型工具函数常就 4–6 行,设成 8 就直接跳过 -
duplicate-finder.similarityThreshold改成75(默认85):变量名或日志文案稍有差异,相似度立刻掉到 80 以下,设太高压根不报 - 如需检查模板字符串或 JSX 里的重复,必须开启
duplicate-finder.includeStrings:true(默认跳过所有字符串和注释)
扫不到重复?先检查这三个拦截点
不是插件失灵,而是它根本没看到文件:
-
.gitignore或files.exclude里写了"**/src/utils/**"这类路径?插件默认尊重这些规则,得临时注释掉再试 - 文件编码带 BOM(尤其 Windows 上保存的 UTF-8 with BOM)?部分插件解析失败,报
Invalid character却不提示原因 - 重复块被包在
/* ... */注释或带换行的模板字符串里?确认已启用includeStrings,否则直接忽略
“变体重复”只能靠人工组合技
插件对这类情况基本无解:
- 同一段错误处理逻辑,一处写成
if (!x) return;,另一处是if (x == null) { throw new Error(); } - 一个函数用箭头函数 + 解构参数,另一个用普通函数 +
arguments - 逻辑被拆进两个
if分支,结构错位,但内容高度重合
这时候更高效的做法是:Ctrl+Shift+F 搜共性关键词(如 localStorage.setItem、catch (err)),把疑似块复制进 diffchecker.com 快速比对;或者用 simian 命令行工具跑一次全量扫描(它对空格/缩进更宽容)。插件只负责把“全项目”压缩成“三四个可疑文件”,剩下那点是否该合并、怎么抽成公共函数,得你对着业务逻辑判断——这点没法自动化。











