VSCode 全局搜索仅识别 search.exclude 且必须写入 settings.json;files.exclude 无效,files.watcherExclude 需同步配置并设为 true,路径须用正斜杠 / 或 **。

search.exclude 配置必须写进 settings.json 才生效
VSCode 的全局搜索(Ctrl+Shift+F)完全不读取 files.exclude,哪怕你把它写成 "node_modules": true 也毫无作用。真正起效的只有 search.exclude,且必须写入 settings.json 文件——不是通过图形界面点“添加模式”,而是直接编辑 JSON。
常见错误包括:
- 把
"node_modules": true写进files.exclude→ 只隐藏侧边栏,搜索照常扫 - 漏掉通配符前缀,比如写
"node_modules/**": true→ 缺少**/或/开头,VSCode 直接忽略整条规则 - 在用户级设置里配了,但打开的是文件夹而非工作区 →
.vscode/settings.json没加载,配置不触发
正确写法示例:
{
"search.exclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/*.log": true
}
}
临时排除比永久配置更常用,但路径必须相对工作区根目录
按 Ctrl+Shift+F 打开搜索面板后,右上角有个 ⋯ 按钮,点击展开 files to exclude 输入框。这里填的规则优先级高于 search.exclude,适合快速验证或单次过滤。
注意三点:
- 路径是相对于工作区根目录的,不是当前文件所在路径;
src/test和./src/test效果一样,但../lib无效 - 多个规则用英文逗号分隔,不能换行,也不能有空格:
**/node_modules/**,**/build/** - 关闭搜索面板后自动清空,不保存、不跨会话——适合查某个子包时临时跳过
node_modules,不用改配置
files.watcherExclude 必须同步配,否则搜索准备阶段就卡住
只配 search.exclude 不够。VSCode 在搜索前要先扫描文件系统建立索引,如果 node_modules 这类大目录还在被文件监视器(file watcher)盯着,CPU 就会持续高负载,导致“正在搜索…”卡死几十秒。
必须同步配置 files.watcherExclude,且路径和 search.exclude 完全一致:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true
}
}
关键细节:
-
files.watcherExclude值只能是true,不能写"true"字符串,否则整个配置失效 - 它不支持
!取反语法,也无法“排除所有但保留某一个” - 这个配置影响的是文件变更监听行为,间接决定搜索启动速度,不是可选项
多根工作区下每个子文件夹的 search.exclude 独立生效
如果你用的是多根工作区(即拖了多个文件夹进 VSCode 窗口),每个子文件夹下的 .vscode/settings.json 里的 search.exclude 是各自独立的。根目录一条规则无法覆盖全部。
这意味着:
- 不能靠项目顶层的
.vscode/settings.json统一管所有子模块的搜索排除 - 每个子模块需要自己维护
.vscode/settings.json,并确保search.exclude和files.watcherExclude都存在 - 团队协作时,建议只提交与项目强相关的排除项(如
"**/build/**"),避免把个人习惯(如"**/tmp/**")提交到 Git
最易被忽略的一点:路径中用了 Windows 风格的反斜杠 \,VSCode 全部不认,必须统一用正斜杠 / 或双星号 **。


















