要让Ctrl+Shift+F只搜当前项目里的src和include目录,需在.vscode/settings.json中配置search.include为{"${workspaceFolder}/src/**": true, "${workspaceFolder}/include/**": true},该白名单机制优先级高于界面输入框,且支持变量展开与跨层级匹配。

怎么让 Ctrl+Shift+F 只搜当前项目里的 src 和 include 目录
直接改 .vscode/settings.json,别碰全局设置。VS Code 的搜索范围由 search.include 主导,它比界面输入框更稳定、可复用,且支持变量展开。
-
search.include是白名单:只扫描列出的路径,其他一律跳过;没配就 fallback 到整个工作区 - 必须用
"${workspaceFolder}/src/**": true这种写法,src/**单独写无效(缺少根路径上下文) - 第三方库路径如
D:/ThirdParty/OpenCV/include/**可硬编码,但仅对本项目生效,不影响其他工作区 - 如果项目有多个源码目录(比如
src和lib),两个都列进去,别试图用**/src/**跨层级匹配——它会漏掉lib/src这类结构
为什么在搜索框底部填了 src/** 却还是搜到 build/ 里的内容
界面底部的「files to include」和「files to exclude」是临时过滤器,不覆盖 search.exclude 配置,且优先级低于 search.include。如果你同时配了 search.include,界面里填的 src/** 就会被忽略。
- 错误示范:
search.include没设,只在界面填src/**→ 实际仍扫全工作区,因为 VS Code 把src/**当作相对路径处理,没根目录锚点 - 正确写法:界面填
**/src/**(注意开头**/),或直接配search.include更可靠 -
search.exclude依然生效:即使你 include 了src/**,如果search.exclude里写了"${workspaceFolder}/src/generated/**": true,那这部分还是被跳过 - Windows 用户特别注意:必须用正斜杠
/,写成\src\**或src\**全部失效
search.exclude 设为 false 是为了取消默认排除,不是删掉配置项
VS Code 默认排除 **/node_modules、**/.git 等目录,这是硬编码逻辑。想搜 node_modules 里的代码,不能只删配置,得显式关掉排除规则。
- 错:删掉
"**/node_modules": true这一行 → 全局默认规则仍起作用 - 对:写成
"**/node_modules": false→ 显式覆盖默认行为 - 性能代价真实存在:开
node_modules后搜索变慢,建议搭配file:*.ts或file:package.json限定文件类型 - 多根工作区下,每个根目录的
.vscode/settings.json独立生效,false不会污染其他项目
跨目录搜索时,**/packages/core/** 和 /packages/core/** 差在哪
前者匹配所有嵌套层级下的 packages/core,后者只认工作区根目录下的 packages/core。这个区别在 monorepo 或含子模块的项目里特别关键。
-
**/packages/core/**:能命中./packages/core、./libs/packages/core、甚至./node_modules/some-dep/packages/core -
/packages/core/**:只匹配${workspaceFolder}/packages/core/**,./libs/packages/core完全不进扫描范围 - 如果项目结构固定,用
/packages/core/**更精准;如果不确定路径深度,无脑上**/前缀 - 多个 include 路径用逗号分隔,但 VS Code 不支持逻辑运算符,想“core 或 utils”,只能写
**/packages/core/**,**/packages/utils/**
**/ 或 /),且所有斜杠方向统一为 /;search.include 和界面输入框不是同一套机制,混用容易互相遮蔽。


















