应根据项目实际测试目录名写,如存在__tests__则写"**/__tests__": true,存在test则写"**/test": true;必须带**/前缀,否则规则无效。

search.exclude 里写 **/test/** 还是 **/__tests__/**?
VSCode 的 search.exclude 只认 glob 模式,不区分测试目录命名习惯。常见测试目录名有 test、tests、__tests__、spec,必须按实际存在路径写,且**必须带 **/ 前缀**,否则规则被静默忽略。
例如项目里真实路径是 src/components/Button/__tests__/Button.test.tsx,就得写 "**/__tests__": true;如果是 packages/core/test/utils.spec.ts,就该写 "**/test": true。
不要写成 "test": true 或 "test/**": true——前者只匹配根目录下的 test 文件夹,后者因缺 **/ 前缀而完全不生效。
为什么加了排除还是搜出 test 文件?
最常踩的坑不是规则写错,而是缓存没清或配置位置不对:
-
search.exclude必须写在.vscode/settings.json(推荐)或用户级settings.json中;写进package.json、tsconfig.json或.gitignore里毫无作用 - 修改后已打开的搜索面板不会自动刷新,需关闭再重新打开
Ctrl+Shift+F - 大项目中索引可能滞后,可手动重载窗口:
Ctrl+P→ 输入workbench.action.reloadWindow回车 - 检查是否误启了
search.useIgnoreFiles:如果.gitignore里没忽略test目录,但 VSCode 却跳过了,大概率是这个开关开着,且.gitignore被意外应用到了搜索流程
想只搜 src 不搜 test,用 include 更可靠
当项目结构清晰(比如所有源码都在 src/ 下),直接限定白名单比靠排除更稳:
在 .vscode/settings.json 中加:
"search.include": {
"${workspaceFolder}/src/**": true
}
这样即使漏写了某个 test 目录,也不会误搜进去。注意:search.include 和 search.exclude 可共存,但 include 优先级更高——只要路径没被 include 覆盖,exclude 再多也救不了它。
临时排除 test 目录,别动配置文件
一次性需求,比如就这次查 bug 想避开测试代码,直接在搜索面板底部的 files to exclude 输入框里填:
!**/test/** !**/__tests__/** !**/spec/**
多个规则用空格分隔,不用逗号、不用引号、不支持正则。填完回车立刻生效,关掉面板就失效,不影响任何配置。
真正容易被忽略的是:search.exclude 对 Ctrl+T(符号搜索)、Ctrl+Click(跳转定义)、大纲视图(Outline)完全无效——它只管 Ctrl+Shift+F 的文本扫描。真要让测试文件彻底“消失”在语义查找里,得靠语言服务器配置或插件,不是靠这个设置。











