必须用"/test/"等带/开头和/结尾的glob模式才能真正递归排除所有层级的test目录;仅写"test"或"test/"只匹配根目录,无效。

search.exclude 怎么配才能真正排除 test 目录
只写 "test" 或 "test/" 是无效的——它只匹配工作区根目录下的 test 文件夹,而现代项目里 test、tests、__tests__ 往往分散在各层子目录中(比如 src/components/Button/test.js)。必须用递归 glob 才能覆盖。
正确写法是:"**/test/**"、"**/tests/**"、"**/__tests__/**",每个值都设为 true。注意结尾的 /** 不是可选的“风格问题”,而是明确告诉 VSCode:连同该目录下所有子路径一并排除。
-
"test/**"❌ 只匹配根目录下的test/子路径,不递归 -
"**/test"✅ 匹配任意层级的test目录(但不含其子目录内文件?实际行为不稳定,建议统一加/**) -
"**/test/**"✅ 最稳妥,VSCode 官方文档和实测均推荐 - Windows 下仍必须用正斜杠
/,写成**\tests\**会被完全忽略
临时排除测试文件比改配置更常用
你并不总想永久屏蔽所有测试——比如正在调试一个测试失败的用例,需要同时搜源码和对应测试逻辑。这时直接在搜索面板操作更快:
- 按
Ctrl+Shift+F打开全局搜索 - 右上角点
⋯→ «Files to exclude» - 输入:
**/test/**,**/tests/**,**/__tests__/**(英文逗号分隔,**不能有空格**) - 这个输入框的优先级高于
search.exclude,哪怕你已在.vscode/settings.json中配置了排除规则,这里填的内容也会覆盖生效 - 关闭搜索面板后自动清空,不污染项目配置
为什么搜出来还有 .spec.ts 或 .test.js?
因为 "**/test/**" 只排除目录,不匹配文件名含 test 的单个文件。常见测试文件如 Button.spec.ts、api.test.js 仍会被扫到。
要一并过滤这类文件,得补上文件模式:
"**/*.spec.ts""**/*.test.js""**/*.e2e-spec.ts"- 如果项目用 Jest,加上
"**/jest.config.*"避免搜到配置文件干扰结果
这些规则和目录规则可以共存于同一 search.exclude 对象中,顺序无关。
files.exclude 和 search.exclude 别混用
很多人在 files.exclude 里加了 "**/test/**",发现搜索还是返回测试文件——这是正常现象。files.exclude 只控制左侧资源管理器显示和 Ctrl+P 快速打开列表;search.exclude 才管 Ctrl+Shift+F 的文本搜索范围。
两者互不影响,也不能互相替代。如果你既不想在侧边栏看到 test 目录,又不想在搜索中看到它们,就得分别配置:
"files.exclude": { "**/test/**": true, "**/tests/**": true }"search.exclude": { "**/test/**": true, "**/tests/**": true, "**/*.spec.ts": true }
修改 .vscode/settings.json 后,已打开的搜索面板不会自动刷新结果。按 Ctrl+Shift+P → 输入 Developer: Reload Window 回车,比重启更轻量且保留所有编辑状态。











