vscode自带重复检测不支持.gitignore和search.exclude,因其基于codemirror扫描已加载文件;唯一有效方式是用files.exclude隐藏目录,防止文件被打开和分析。

VSCode 自带的重复检测功能(如 Duplicate Finder)默认不提供文件级忽略能力,必须靠 files.exclude 或插件专属配置间接实现——它本身没有 duplicate-finder.ignorePatterns 这类字段。
为什么 .gitignore 和 search.exclude 对重复检测无效
Duplicate Finder 是基于 CodeMirror 的文本扫描工具,它不读取 Git 或 VSCode 的通用忽略规则。它只扫描当前打开的编辑器标签页中「已加载」的文件,而是否加载,取决于两个事实:
- 文件是否在资源管理器中可见(受
files.exclude控制) - 你是否手动打开了该文件(比如双击
node_modules/react/index.js)
也就是说:.gitignore 只影响 Git;search.exclude 只影响 Ctrl+Shift+F;它们对 Duplicate Finder 完全无感。唯一能“阻止扫描”的方式,是让文件根本不出现在编辑器里。
真正起作用的只有 files.exclude
要让 Duplicate Finder 不扫描某目录,必须确保它不会被 VSCode 加载——最可靠的方式是用 files.exclude 把它从资源管理器中彻底隐藏。一旦文件树里看不到,你就不会误点打开,插件也就没机会分析它。
- 写在项目根目录的
.vscode/settings.json中,而非用户全局设置,否则团队成员不同步 - 必须用
**/node_modules这种递归模式,node_modules(无**/)只匹配同级 - 斜杠结尾更安全:
"**/dist/": true不会误匹配distro.js;"**/dist": true会 - 常见漏项:
"**/__pycache__/": true、"**/.mypy_cache/": true、"**/coverage/": true
插件级忽略需看具体扩展名
如果你用的是第三方重复检测插件(比如 redhat.vscode-duplicate-finder 或 wayou.vscode-todo-highlight 衍生版),部分新版支持自定义 ignore 字段,但名称不统一:
-
duplicate-finder.exclude(某些 fork 版本) -
todo-tree.excludeGlobs(如果拿它当重复扫描器用) -
search.exclude仍无效——它不是搜索,是静态分析
查法很简单:命令面板输入 Preferences: Open Workspace Settings (JSON),然后搜 duplicate 或插件 ID,看有没有带 exclude 的字段。没有就别硬配,配了也白配。
容易被忽略的关键点
即使你把 node_modules 加进了 files.exclude,只要有人手动用 Ctrl+P 搜到了 react/index.js 并打开,Duplicate Finder 就会立刻分析它——这个行为无法拦截。所以真正有效的忽略,是「不让它被打开」,而不是「打开后跳过分析」。这也是为什么所有文档都强调:先配 files.exclude,再教育团队别手贱点进 node_modules。











