ctrl+shift+f(win/linux)或cmd+shift+f(macos)是唯一触发vscode全局搜索的快捷键;ctrl+f仅搜当前文件,ctrl+p只匹配文件名。files to include/exclude必须用**/开头的glob模式,反斜杠无效,逗号分隔多规则;search.exclude对搜索无效,需在面板中填写files to exclude。

Ctrl+Shift+F 是唯一能触发全局搜索的快捷键
不是 Ctrl+F,也不是 Ctrl+P——前者只搜当前文件内容,后者只模糊匹配文件名。真正扫描整个工作区文件系统、支持路径过滤和内容正则的,只有 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)。误用 Ctrl+F 是最常见卡点,按完没反应,其实是编辑器根本没启动文件系统遍历。
files to include 必须带路径前缀才能递归生效
VSCode 的 glob 规则对路径写法极其敏感:不以 **/ 或 / 开头的模式,基本不会递归匹配子目录。
-
**/api*→ 正确:匹配所有层级中文件名以api开头的文件 -
src/**/*test*→ 正确:只在src下递归查找含test的文件名或内容 -
api*.ts→ 错误:被当作字面量,只在当前打开文件里找,不扫描磁盘 -
src\*.ts→ 错误:Windows 用户易犯,反斜杠\在 glob 中无效,必须用正斜杠/ -
**/*config*,**/*env*→ 正确:多个规则用英文逗号分隔,支持同时匹配多类文件名
排除干扰目录不能靠 settings.json,得填 files to exclude
search.exclude 或 files.exclude 设置项只影响资源管理器显示,对 Ctrl+Shift+F 搜索范围完全无效。真正起作用的是搜索面板顶部的 files to exclude 输入框(图标是两个重叠文件夹),且写法有强约束:
-
**/node_modules→ 推荐:轻量跳过所有层级的node_modules目录 -
**/dist,**/*.log→ 正确:逗号分隔多个排除规则 -
node_modules/**或./node_modules→ 无效:VSCode 不识别这类写法,仍会扫描 - 排除和包含是叠加逻辑:先按
files to include缩小初始范围,再从其中剔除files to exclude匹配的部分
正则模式下跨行匹配需手动开启 .* 并注意换行符处理
默认搜索不识别换行符 \n,即使正则写了 start[\s\S]*end 也只会匹配单行。要真正跨行,必须:
- 勾选搜索框右侧的
.*(Use Regular Expression)按钮 - 确保未勾选
Match Whole Word(否则单词边界会截断匹配) - 大小写敏感按需开关:
Match Case关闭时,TODO和todo都能命中;开启时更精准但易漏 - 替换时用
$1引用捕获组,例如把console\.log\((.*)\)替换为// LOG: $1,但务必先点开每条结果预览上下文,避免误改注释或字符串内的console.log
真正容易被忽略的是:glob 路径模式和 search.useIgnoreFiles 设置的交互关系——如果启用了该设置,.gitignore 里的规则会自动加入排除列表,但 files to exclude 仍具有更高优先级,覆盖 ignore 文件行为。这点在排查“为什么某个文件死活搜不到”时最关键。











