search.exclude 必须写在项目根目录的 .vscode/settings.json 中才生效,用户级配置会全局生效但无法适配项目结构;若打开的是文件夹而非工作区,则配置不加载。

search.exclude 配置写在哪才生效
工作区级的 search.exclude 必须写在项目根目录下的 .vscode/settings.json 里,写在用户级 settings.json 中会全局生效,但无法适配项目特有结构(比如私有 vendor 或 gen 目录)。如果打开的是文件夹而非工作区(即没加载 .vscode),那配置直接不加载。
常见错误是把配置写错位置,或编辑了用户设置却以为只影响当前项目。验证方式:打开搜索面板后,删掉搜索词再输一遍,看结果是否立刻变化——没变说明配置没生效。
-
"**/node_modules"匹配所有层级的node_modules;只写"node_modules"只匹配根目录下那个 - 路径必须用正斜杠
/,Windows 用户别粘贴反斜杠\,否则 glob 不识别 - 键名末尾不能带空格,
"**/dist/ ": true这种写法整个规则会被忽略
临时排除比永久配置更灵活的场景
按 Ctrl+Shift+F 打开搜索面板后,点右上角 files to exclude 输入框,填入 **/tests,**/mocks,**/*.md ——这些只对本次搜索有效,关掉面板就清空,适合临时跳过测试、文档或某次重构中的中间产物。
它优先级高于 search.exclude,也就是说,即使你在 .vscode/settings.json 里写了 "**/dist": true,只要在 files to exclude 里填了 !**/dist(部分版本支持 ! 反转),就能强制包含。
- 多个规则用英文逗号分隔,不能用中文逗号或空格
-
**/*.log递归排除所有日志;*.log只排除根目录下的日志文件 - 路径是相对于工作区根目录,不是当前文件所在目录
files.exclude 和 search.exclude 别混用
files.exclude 控制左侧资源管理器和 Ctrl+P 快速打开,不影响 Ctrl+Shift+F 搜索;search.exclude 只管全局内容搜索,对资源管理器完全无效。很多人误以为配了 files.exclude 就能减少搜索干扰,结果搜出来一堆 node_modules 文件。
典型误配:"files.exclude": {"**/dist": true} 写完发现搜索还是扫 dist 里的文件——因为那是 search.exclude 的事。
- 想隐藏
.git目录且不让它出现在Ctrl+P和搜索中?两个配置都要加:"files.exclude"+"search.exclude" -
search.useIgnoreFiles设为true可让搜索也尊重.gitignore,但注意它不覆盖search.exclude,只是补充 -
files.watcherExclude是另一回事,只影响文件变更监听,和搜索无关
排除失效时先查这三件事
搜到不该出现的文件,大概率不是规则写错了,而是路径语义或作用域理解偏差:
- 检查 VSCode 当前打开的是「文件夹」还是「工作区」:只有后者才会读
.vscode/settings.json - 确认
files to exclude输入框里有没有残留规则——它会盖掉你所有的永久配置 - 用
**/build/**而不是**/build:后者不匹配build/index.js,前者才真正排除整个目录树
最常被忽略的是 glob 的递归语义和作用域边界——规则永远从工作区根开始算,不是从你当前编辑的文件出发。











