ctrl+shift+h 失效主因是未打开文件夹工作区;搜索为空常因 search.exclude 排除规则;replace all 不写磁盘需手动保存;正则替换须用 $1 而非 \1。

Ctrl+Shift+H 打不开?先看工作区有没有真正加载
快捷键 Ctrl+Shift+H 在大型项目中失效,90% 是因为没打开文件夹工作区。VSCode 的全局替换只作用于 File → Open Folder… 加载的根目录,不是单个文件或 ZIP。右下角显示 No folder opened 或仅一个文件名(如 index.ts),说明它根本没识别出项目结构。多根工作区也得确认所有文件夹图标无感叹号——否则被跳过的子目录不会参与搜索。
搜索结果为空?默认排除规则正在悄悄过滤你想要的文件
VSCode 默认通过 search.exclude 跳过 node_modules、.git、dist 等目录,但如果你在 .vscode/settings.json 里加了 "**/api/**": true,那整个 src/api 就不会出现在结果里。排查方法很直接:
- 按
Ctrl+Shift+P→ 输入Preferences: Open Settings (JSON),检查search.exclude和files.exclude - 临时绕过:点搜索面板右上角
⋯→ 取消勾选「使用排除设置」 - 想精准包含?在「包含文件」框填
src/**/*.ts,比盲目清空 exclude 更安全
替换了但 Git 没变化?你只是改了编辑器内存
Replace All 按钮不写磁盘,只改编辑器缓存。标题栏出现 ● 圆点 ≠ 已保存,必须手动 Ctrl+S 或 Ctrl+K S(保存全部)。更隐蔽的问题是:没打开过的文件不会被加载进编辑器,Replace All 对它们完全无效——即使它们匹配,也不会出现在结果列表里。所以批量操作前,建议先用 Find All 预览,确认关键文件都在列表中。
正则替换总失败?$1 和 \1 不是同一件事
VSCode 用 JavaScript 正则引擎,捕获组引用只认 $1、$2,写 \1 或 $$1 会静默失效:界面不报错,也不替换,就原样留着。比如查 class="([^"]+)",替换填 class="$1 is-primary",不是 class="\1 is-primary";要字面量输出 $1,得写成 $$1。另外,中文括号、全角符号、未转义的 . 或 / 也会让正则静默失效——建议先关掉 .* 按钮,确认普通文本能搜到,再逐步加正则。











