vscode全局搜索默认排除.git、node_modules和dist,但仅限内置规则且不保证100%生效;嵌套路径如packages/core/node_modules仍会被扫描,必须手动配置search.exclude为"**/node_modules":true等glob模式才真正生效。

全局搜索默认扫哪些目录?
VSCode 默认只排除 .git、node_modules 和 dist 这三类路径——但仅限内置规则,且不保证 100% 生效。如果你的项目里有 packages/core/node_modules 或 src/lib/node_modules,这些嵌套结构照样会被搜进去,结果页被噪音淹没。
这不是“搜索慢”,是范围失控。真正起作用的只有你手动配的 search.exclude,其他任何配置(比如 .gitignore、tsconfig.json)都无效。
-
search.exclude必须写在settings.json里,值为true,键为 glob 模式 - 只写
"node_modules"❌ 完全不匹配;必须写"**/node_modules"✅ - Windows 用户别用反斜杠:
"**\node_modules"❌,一律用正斜杠/ - 改完配置后,已打开的搜索面板不会自动刷新,需关闭重开或执行
Developer: Reload Window
怎么让 search.exclude 全局生效而不是只对单个项目?
用户级设置优先级低于工作区设置,但能覆盖所有未显式覆盖它的项目。打开命令面板(Ctrl+Shift+P),输入 Open User Settings (JSON),贴入:
{
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/dist": true,
"**/out": true,
"**/*.log": true,
"**/coverage": true
}
}
注意:search.exclude 和 files.exclude 是两回事——前者只管搜索,后者管资源管理器显示。想让文件树也不显示 dist,得额外加 files.exclude。
- 工作区级配置(
.vscode/settings.json)会覆盖用户级,适合项目定制 - 如果某项目需要保留
dist可搜,就在其.vscode/settings.json中设"**/dist": false(但 VSCode 不支持false覆盖,只能删掉该条) - 别在
package.json或eslint.config.js里写search.exclude,VSCode 直接忽略
为什么我在搜索框里填了 node_modules 却还是搜到了?
搜索面板底部的「Files to exclude」输入框,语法更严格:它只接受 glob 模式,且必须以 **/ 或 / 开头。直接填 node_modules 或 node_modules/** 是无效的——VSCode 把它当字面字符串去匹配文件名,不是路径。
- 正确写法:
**/node_modules/**(排除内容)、**/node_modules(排除目录本身) - 多个规则用英文逗号分隔,不能有空格:
**/dist/**,**/node_modules/**,**/*.log - 这个输入框是临时的,关掉搜索面板就清空,不影响配置文件
- 它和上方「Files to include」叠加生效:先 include,再 exclude
搜索结果顺序能按修改时间或目录深度排序吗?
不能。VSCode 全局搜索(Ctrl+Shift+F)不提供任何结果排序开关,返回的是匹配行在文件中原始出现的顺序。所谓“让 src/utils 排前面”,本质是缩小范围,不是排序。
想逼近这个效果,只能靠组合过滤:
- 在「Files to include」填
src/**/*,tests/**/*,把无关目录踢出搜索边界 - 用
modified:>2026-10-03筛最近 7 天改过的文件(日期格式必须是YYYY-MM-DD) - 用
type:typescript或lang:js比**/*.ts更可靠,它走语言服务识别,不是后缀匹配 - 多个前缀可叠加:
useEffect type:typescript modified:>2026-10-05
真正的排序逻辑藏在语言服务器里,比如符号搜索(Ctrl+Shift+O)能按定义位置跳转,但那是另一套机制,和全文本搜索无关。











