Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)是唯一触发VSCode全局搜索的快捷键;Ctrl+F仅限当前文件,且需确认面板为“在文件中查找”、排除项未误拦、正则引用用$1而非\1、替换后须手动保存或点“Replace in Files”。

Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)是唯一能触发真正全局搜索的快捷键,不是 Ctrl+F ——后者只搜当前打开的文件,跟项目结构完全无关。
为什么按了 Ctrl+Shift+F 还是搜不到?先看顶部是不是“在文件中查找”
很多人输完词回车没结果,是因为面板顶部显示的是“在当前文件中查找”(灰色文档图标),它根本没扫描其他文件。这个状态不报错,只安静地搜你当前编辑的那个标签页——而那页很可能压根没匹配项。
- 点搜索面板右上角的 ⋯ 菜单 → 勾选「在文件中查找」
- 或者再按一次 Ctrl+Shift+F,强制重置为全局模式
- 确认输入框左侧图标是蓝色文件夹,不是灰色文档
- 大项目首次搜索会延迟 1–2 秒,右下角显示「搜索中…」时别急着重输
搜不到 node_modules 或 src/api?search.exclude 在拦路
VSCode 默认跳过 node_modules、.git、dist 等目录,靠 search.exclude 控制。这不是 bug,是默认配置——但没人告诉你它正在悄悄过滤。
- 点搜索面板右上角 ⋯ → 展开高级选项 → 清空
files to exclude输入框,或改成!**/node_modules/**显式包含 - 取消勾选「Use Exclude Settings and Ignore Files」,否则
.gitignore和settings.json里的search.exclude仍生效 - 想只搜源码?在
files to include填src/**/*.{js,ts},通配符和.gitignore规则一致 - 注意:只填
node_modules或node_modules/**无效;必须用**/node_modules/**才能匹配所有层级
正则替换写 \1 没效果?VSCode 只认 $1
VSCode 使用 JavaScript 正则引擎,捕获组引用必须用 $1、$2,写成 \1 或 ${1} 都不会触发替换——界面不报错,只是原样保留。
- 开启正则(点
.*图标)后,查找class="([^"]+) primary",替换填class="$1 is-primary",不是class="\1 is-primary" -
$后必须紧跟数字,$1abc会被解释为变量$1加字符串abc;要字面量输出$1,得写成$$1 - 中文括号、全角符号、未转义的点号
.或斜杠/会让正则静默失效,建议先关掉.*确认普通文本能搜到,再逐步加正则
替换了但文件没变?你只改了内存,没写入磁盘
VSCode 的「Replace All」默认只修改编辑器内存中的内容,不会自动保存到文件系统。即使标题栏出现 ● 圆点,也得手动 Ctrl+S 才真正落盘。更隐蔽的是:如果你没打开过那个文件,它甚至根本不会出现在编辑器里,替换自然无效。
- 真要批量写入所有匹配文件,必须点搜索结果列表上方的
Replace in Files按钮(两个重叠文档图标) - 启用自动保存:
File > Auto Save→ 设为afterDelay - 替换后立刻看 Git 状态,没改动就说明没真正写入
最常被忽略的其实是作用域:你以为在搜整个工作区,其实 search.exclude 已经把一半文件剔除了;你以为替换生效了,其实只是改了内存副本。


















