codemirror duplicate finder需调三个配置才实用:minlines设为5、similaritythreshold降为75、includestrings设为true,并确认未被.gitignore或编码问题拦截。

VSCode 原生不支持语义级重复检测,所谓“本地扫描”必须靠插件驱动;CodeMirror Duplicate Finder 是目前响应最快、配置最轻的实用选择,但默认参数对真实项目几乎无效——得调才用得上。
为什么 Ctrl+Shift+F 搜不到逻辑重复
它只做字符串/正则匹配,完全无视语义:
-
axios.post和fetch调用,哪怕逻辑一模一样,也搜不到 for (let i = 0; i 和 <code>for (const item of arr)被当成两段完全无关代码- 模板字符串里换行、缩进差一格、注释位置不同,整个块直接跳过
- 变量名从
payload改成data,相似度归零,插件不标
CodeMirror Duplicate Finder 必调的三个配置项
装完插件不改配置,等于没装。重点调这三项(在 VSCode 设置里搜关键词即可):
-
duplicate-finder.minLines:默认是 8,小函数、React Hook 或工具函数常只有 4–6 行,建议改成5 -
duplicate-finder.similarityThreshold:默认 85,变量名一换就掉到 70 以下,建议降到75 -
duplicate-finder.includeStrings:默认false,重复若藏在 JSX 或反引号模板字符串里,必须设为true
另外确认项目没被 .gitignore 或 files.exclude 拦截——比如 "src/utils/**" 被排除了,再准也扫不到。
扫描前必须检查的三件事
不是插件失灵,大概率是环境挡住了扫描:
-
.gitignore里是否关掉了**/node_modules/**?想查src/lib却被全局忽略规则覆盖,就白等 - 文件编码是不是 UTF-8 无 BOM?Windows 上带 BOM 的 JS 文件,插件解析失败但不报错,只默默跳过
- 重复块是否被包裹在注释里?该插件默认跳过注释内容,
// TODO: 复制这段处理逻辑后面跟着的代码不会参与比对
触发扫描很简单:右键 → Find Duplicates in Workspace,结果以分组形式出现在侧边栏,点任意一处直接跳转所有匹配位置。
查不到时,人工辅助更高效
插件对“变体重复”基本无解:
- 同一段逻辑被拆进两个
if分支,结构错位 - 一个用箭头函数 + 解构,另一个用普通函数 +
arguments - 仅差一行日志或空校验:
if (!x) return;
这时别硬等插件,换成组合技:Ctrl+Shift+F 搜共性关键词(如 localStorage.setItem、catch (err)),把疑似块复制进 diffchecker.com 快速比对;或者用 simian 命令行工具跑一次跨文件扫描(需配 simian.json),它对缩进/空格更宽容。
工具只负责把“整个项目”压缩成“看三四个文件就够了”,剩下那点是否真该合并、怎么抽成公共函数、尤其当两处重复分别在用户中心和订单模块时——它们未来会不会走上不同演化路径?这个判断没法自动化。











