search.exclude需组合多条规则才够:/tests/、/test/、/.test.、/.spec.、/e2e/、/cypress/;临时过滤用搜索面板的“Files to exclude”输入框,优先级更高且自动清空。

search.exclude 里加 **/tests/** 和 **/test/** 就够了吗
不够。VSCode 的 search.exclude 只影响 Ctrl+Shift+F 全局搜索,但很多项目把测试文件放在 src/tests、packages/*/test 或甚至和源码同级的 my_component.test.ts 里——光写 "**/tests/**": true 会漏掉这些。真正要覆盖常见布局,得组合多条规则:
-
"**/tests/**": true→ 覆盖独立 tests/ 目录 -
"**/test/**": true→ 覆盖小写 test/(比如某些 Python 或 Rust 项目) -
"**/*.test.*": true→ 排除Component.test.tsx、api.test.js等命名式测试文件 -
"**/*.spec.*": true→ 同理覆盖 Jasmine/Mocha 风格 -
"**/e2e/**": true、"**/cypress/**": true→ 端到端测试通常干扰更大,顺手排除
注意:所有键必须用正斜杠 /,Windows 用户写 **\tests\** 会被完全忽略;值必须是布尔 true,不能是字符串。
临时过滤比改配置更灵活:用 files to exclude 输入框
你正在查一个 bug,怀疑是某段逻辑被测试里的 mock 实现覆盖了,但又不想永久删掉 search.exclude 里的规则——这时候直接打开搜索面板(Ctrl+Shift+F),在底部 files to exclude 输入框里填:
**/tests/**,**/test/**,**/*.test.*,**/mocks/**
多个规则用英文逗号分隔,**不能有空格**。这个输入框的规则优先级高于 search.exclude,且关闭面板后自动清空,不污染配置。适合调试时快速验证“去掉测试代码后是否还复现”。
为什么 files.exclude 不起作用
files.exclude 控制资源管理器显示,**不影响全局搜索结果**。很多人配了 "**/tests/**": true 在 files.exclude 里,就以为搜索也不会扫进去——实际完全无关。VSCode 搜索只认 search.exclude 或搜索面板里的 files to exclude。如果你发现测试文件还在搜索结果里,第一反应不是检查 files.exclude,而是确认:
- 当前用的是 Ctrl+Shift+F(全局搜索),不是 Ctrl+F(当前文件内搜索)
-
search.exclude是写在.vscode/settings.json(工作区级)还是用户级 settings.json?工作区设置优先级更高,可能被覆盖 - 改完配置后有没有重载窗口(Ctrl+Shift+P → Developer: Reload Window)?VSCode 不自动刷新搜索索引
大型 monorepo 下怎么精准排除某个包的测试
比如你在 packages/core 里搜 handleError,但结果里混着 packages/cli/test/ 里的同名函数。这时别靠 search.exclude 大范围屏蔽,而是在搜索面板的 files to include 里直接限定范围:
packages/core/**
或者更精确:
packages/core/src/**,packages/core/lib/**
这是白名单逻辑:不在其中的路径,哪怕内容完全匹配关键词,也不会出现在结果里。比“排除其他所有”更可靠,也避免误杀——比如你本来就想看 packages/core/test/utils.ts 里的某个辅助函数,那就别 exclude,而是 include 更窄的范围。
最常被忽略的一点:glob 模式里 **/ 是语义必需的前缀,不是可选项。写 test/** 只匹配工作区根目录下的 test/,而 **/test/** 才能穿透任意层级。漏掉它,规则就等于没写。











