全局搜索排除 node_modules 必须用 search.exclude 配置 "**/node\_modules": true,files.exclude 仅影响文件树显示;临时排除在搜索面板设置,路径需带 **/ 前缀且不支持反斜杠。

全局搜索里还搜出 node_modules,不是配置没生效,就是规则写错了位置或格式不对。
search.exclude 才管搜索,files.exclude 完全不相关
很多人把 "node_modules": true 塞进 files.exclude,结果侧边栏是空了,但 Ctrl+Shift+F 一搜还是满屏依赖包——因为 files.exclude 只控制左侧文件树显示,和搜索毫无关系。
-
search.exclude是唯一影响全局搜索的配置项,必须写进settings.json - 它不继承、不读取
.gitignore或files.exclude,得手动同步 - 工作区级配置(
.vscode/settings.json)比用户级更优先,也更推荐
路径必须带 **/ 或 / 前缀,否则直接被忽略
"node_modules": true 看起来简洁,但 VSCode 不认——它只匹配字面量路径,而真实路径是 src/lib/node_modules 或 packages/core/node_modules,没前缀就完全不触发。
- ✅ 正确:
"**/node_modules": true(推荐,覆盖所有嵌套层级) - ✅ 可选:
"/node_modules": true(仅根目录,适合单层结构) - ❌ 无效:
"node_modules": true、"node_modules/**": true、"**\node_modules": true(Windows 反斜杠也不行) - ⚠️ 注意:
"**/node_modules/**": true虽然合法,但多余后缀可能在极少数旧版本中干扰匹配,用"**/node_modules": true更稳
临时排除比永久配置更灵活,但优先级更高
搜索面板右下角点 ⋯ → «Files to exclude» 输入框,填 **/test/**, **/legacy/**,这次搜索立刻跳过,关掉面板就失效。它不保存、不跨会话,但会覆盖 search.exclude 里的同名规则。
- 多个规则用英文逗号分隔,不能有空格:
**/dist,**/node_modules - 路径仍按 glob 解析,相对工作区根目录,不支持
~或环境变量 - 适合调试时快速验证:比如想确认某段逻辑是否只存在于
legacy目录,临时加一条再搜 - 如果这里填了内容,VSCode 就会忽略
search.exclude,哪怕你刚改完设置也不会生效
容易被忽略的性能与继承细节
写错一条规则可能让搜索变慢,甚至漏结果。VSCode 的 glob 匹配是字符串扫描,不是正则引擎,宽泛模式开销很大。
- 避免嵌套太多
**:"**/a/**/b/**/c.js"这类写法会让匹配时间指数增长 - 别用
"**/.*"排除所有隐藏文件——大项目里每个文件都得做一次字符串检查,卡顿明显 - 多根工作区下,每个子文件夹的
.vscode/settings.json里的search.exclude是独立生效的,不能靠根目录一条规则覆盖全部 - 某些插件(如增强搜索类)会绕过原生
search.exclude,排查时先禁用插件试试
真正麻烦的不是写哪条规则,而是搞清「谁在什么时候、以什么方式、按什么路径语义」去匹配——VSCode 不解析符号链接,不读 .gitignore,也不管你当前打开的是不是 Git 仓库根目录。


















