search.exclude必须写入项目根目录的.vscode/settings.json中才生效,仅项目级配置能实现特有排除规则;用户级配置全局生效,不满足项目特异性需求。

search.exclude必须写进.vscode/settings.json才生效
项目特有的搜索排除规则,只在项目级配置里起作用;写进用户级settings.json是全局生效的,没法“特有”。你改了用户设置,所有项目都跟着变,这不是你想要的。
常见错误是直接在VSCode设置界面点“添加模式”,结果默认加到了用户设置里——得手动切换到“工作区”标签页,或者直接编辑项目根目录下的.vscode/settings.json文件。
- 路径必须存在:
.vscode文件夹和settings.json都要手动创建(VSCode不会自动建) - 结构必须是对象:
"search.exclude": { ... },不能是数组或字符串 - 别和
files.exclude搞混:files.exclude只影响左侧文件树显示,对Ctrl+Shift+F搜索完全没用
排除规则必须带**/或/前缀,否则不匹配路径
"node_modules": true这种写法永远无效。VSCode的search.exclude不是按文件夹名模糊匹配,而是做glob路径比对,它只认以**/或/开头的模式。
真实路径比如src/lib/node_modules或packages/ui/node_modules,没有**/前缀就根本不会被扫描到。
-
"**/node_modules": true✅ 覆盖所有嵌套层级,最稳妥 -
"/node_modules": true✅ 只排除根目录下一层,适合单包项目 -
"node_modules": true❌ 不匹配任何路径 -
"node_modules/**": true❌ 缺少开头**/,整条规则被忽略 -
"**\node_modules": true❌ Windows反斜杠不被glob解析器识别
多根工作区里每个子文件夹要单独配search.exclude
如果你用的是多根工作区(比如同时打开frontend和backend两个文件夹),.vscode/settings.json只对它所在的那个子文件夹生效。根目录下放一个search.exclude,不会自动透传给子文件夹。
也就是说,frontend/.vscode/settings.json里的规则,对backend目录完全不起作用。
- 每个子文件夹都要有自己的
.vscode/settings.json - 不能靠“继承”或“全局覆盖”,VSCode不支持这种机制
- 团队协作时,把配置提交到各自子项目的
.vscode/里,比靠个人设置更可靠
临时排除比永久配置优先级更高,但不保存
搜索面板右下角点⋯→ «Files to exclude» 输入框填的内容,会立刻覆盖search.exclude里的同名规则,而且优先级更高。
但它只在当前搜索会话里有效:关掉面板、换关键词重搜、甚至切个标签页再回来,规则就没了。
- 输入
**/test/**,**/mocks/**,这次搜就跳过测试和模拟代码 - 多个规则用英文逗号分隔,不能有空格:
**/dist,**/node_modules - 如果这里非空,VSCode会完全忽略
search.exclude配置,哪怕你刚改完保存也不生效 - 适合快速验证某段逻辑是否只存在于某个目录,不用改配置文件
/或多一个\,整个规则就等于没写。











