search.exclude中"node_modules": true无效,因vscode仅识别glob模式,须用"**/node_modules": true或"/node_modules": true;files.exclude控制侧边栏显示,search.exclude仅影响搜索;语言专属排除仅files.exclude支持,格式为[javascript];临时排除优先级最高但不保存。

search.exclude 为什么写了 node_modules 还是搜得到
因为 "node_modules": true 是无效写法。VSCode 的 search.exclude 不做路径前缀匹配,只认 glob 模式,必须带 **/ 或 / 开头才能生效。
-
"**/node_modules": true✅ 匹配所有嵌套层级的node_modules(最常用) -
"/node_modules": true✅ 仅匹配项目根目录下的node_modules -
"node_modules": true❌ 完全不匹配任何实际路径 -
"node_modules/**": true❌ 缺少开头**/,整条规则被忽略
写错格式会导致规则静默失效——搜索照常扫进 node_modules,但你根本看不到报错。
files.exclude 和 search.exclude 到底该用哪个
files.exclude 控制侧边栏是否显示文件夹,search.exclude 只影响 Ctrl+Shift+F 搜索结果。两者互不继承,也不能互相替代。
- 想让
node_modules从资源管理器消失 → 改files.exclude - 只想搜代码时跳过
dist目录,但保留它在侧边栏 → 改search.exclude - 同时设两个?可以,但注意:
files.exclude写太宽(比如"**/node_modules": true)会让整个文件树变空,不是崩溃,是被过滤掉了
常见误操作:为“避免搜到日志”去改 files.exclude,结果 .log 文件从侧边栏没了,但搜索照样扫进去——因为 search.exclude 没动。
工作区配置里怎么写语言专属排除规则
VSCode 支持按语言 ID 细粒度控制 files.exclude,但语法很具体:必须用小写字母语言标识符,且包裹在方括号里,不能加引号。
- 正确写法:
"[javascript]": { "files.exclude": { "lib/**": true } } - 错误写法:
"[JavaScript]"、"[JS]"、"javascript": { ... }都不生效 - 这个机制只对
files.exclude有效,search.exclude不支持语言级配置 - 如果同时在用户设置和工作区设置了同一 key,工作区配置完全覆盖用户设置,不是合并
多根工作区下,每个子文件夹的 .vscode/settings.json 独立生效,别指望根目录一条规则管全部。
临时排除比配置更优先,而且不保存
搜索面板右下角点 ⋯ → «Files to exclude» 输入的内容,会直接覆盖 search.exclude 里的同名规则,且本次会话结束就丢。
- 输入
**/test/**,**/legacy/**(逗号分隔,无空格),这次搜索立刻跳过 - 关掉面板再打开,规则清空,回到
search.exclude的设定 - 这里非空时,VSCode 就彻底忽略
search.exclude的所有内容 - 适合快速验证:比如想确认某函数是否只存在于
legacy里,临时加一条再搜
真正容易被忽略的是性能影响:写 "**/a/**/b/**/c.js" 这种嵌套太多 ** 的规则,匹配开销会指数增长;"**/.*" 看似方便,但在大项目里会让每个文件都做一次字符串扫描,卡顿明显。











