search.exclude 必须写在项目根目录的 .vscode/settings.json 中才对当前项目生效,且需用 / 开头的 glob 模式(如 "/node_modules": true),修改后需重载窗口或清除 .vscode/.search 索引才能生效。

search.exclude 必须写在 .vscode/settings.json 才对项目生效
VSCode 不会自动读取 .gitignore 或 package.json 里的忽略规则,search.exclude 是唯一控制全局搜索(Ctrl+Shift+F)范围的配置项。想让规则只作用于当前项目,必须编辑项目根目录下的 .vscode/settings.json —— 写在用户级 settings.json 里会全局生效,写错位置等于白配。
常见错误包括:
- 把规则加到
tsconfig.json或eslint.config.js里,完全无效 - 新建了
.vscode文件夹但没创建settings.json,或文件名拼错成setting.json - 用 VSCode 图形界面改设置后,没点右上角「在 settings.json 中编辑」,导致实际没写入文件
排除路径必须用 **/ 开头的 glob 模式,不能裸写文件夹名
"node_modules": true 这种写法会被 VSCode 静默忽略——它不匹配任何路径。真正起效的只有带通配前缀的 glob 模式,因为 VSCode 的匹配器只认字符串前缀,不是模糊查找。
正确写法示例:
-
"**/node_modules": true✅ 匹配所有层级:根目录、packages/core/node_modules、src/lib/node_modules -
"/node_modules": true✅ 只匹配工作区根目录下的node_modules -
"**/dist/**": true✅ 结尾加/**更稳妥,确保跳过dist/esm/utils.js这类子路径 -
"**/*.log": true✅ 递归排除所有日志文件
错误写法示例:
-
"node_modules"❌ 缺少**/或/前缀 -
"**\node_modules"❌ Windows 用户常用反斜杠,但 glob 解析器只认正斜杠/ -
"**/node_modules/"❌ 多了个结尾斜杠,真实目录名不含末尾/,不命中
修改后不生效?重载窗口或清索引比重启更可靠
VSCode 搜索依赖本地索引,改完 search.exclude 后不会立刻刷新已有搜索结果。尤其大项目里,旧索引可能持续返回被排除路径下的文件。
推荐操作顺序:
- 按
Ctrl+Shift+P→ 输入Developer: Reload Window重载窗口(比重启快,且保留所有打开的标签页) - 如果仍搜到被排除目录下的文件,删掉项目根目录下的
.vscode/.search文件夹,强制重建索引 - 临时救急:打开搜索面板后,点右上角 ⋯ → «Files to exclude»,直接填
**/node_modules/**,**/dist/**(英文逗号分隔、无空格),本次搜索立即生效
注意:Files to exclude 优先级高于 search.exclude,且只对本次搜索有效;已打开的搜索面板需关闭重开,新面板才读新配置。
files.watcherExclude 不配,搜索准备阶段就卡住
很多人配完 search.exclude 还觉得慢,是因为文件监视器(file watcher)仍在后台反复扫描 node_modules、.git 这类大目录。光跳过搜索不行,得先让 VSCode 别去监视它们。
务必同步配置:
- 在同一个
.vscode/settings.json里加上"files.watcherExclude"字段 - 值用相同 glob 模式,例如:
"**/node_modules/**": true、"**/.git/**": true - 这个配置影响的是文件变更监听,和
search.exclude协同才能彻底释放 I/O 压力
漏掉这一步,即使搜索结果变少了,输入搜索词后的“准备中…”卡顿依然存在。











