ctrl+shift+h(win/linux)或 cmd+shift+h(macos)是vscode全局替换唯一入口,直接打开带替换框的多文件搜索面板;若无反应,常见原因是面板卡在“当前文件”模式或光标未聚焦编辑器,需重按快捷键或手动切换至“在文件中查找”;全局替换不自动保存,须手动ctrl+s;正则引用用$1而非\1;files to include/exclude需手动输入glob模式,且必须先点击“find all”再“replace all”才生效。

Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是全局替换的唯一入口,不是 Ctrl+Shift+F 的变体,也不是“先搜再换”的两步操作——它直接打开带替换框的多文件搜索面板。
为什么 Ctrl+Shift+H 按下没反应?
最常见原因是面板卡在「当前文件」模式,右上角显示灰色文档图标而非文件夹图标。这不是崩溃,而是状态残留。
- 解决方法:再按一次
Ctrl+Shift+H,或点面板右上角 ⋯ → 勾选「在文件中查找」 - 另一个隐藏原因:光标焦点不在编辑器内(比如正停留在终端、调试控制台、设置页),快捷键会失效
- Mac 用户注意:
Cmd+Alt+F和Cmd+Option+F是同一物理按键,但系统级快捷键(如截图、Mission Control)可能拦截它;若无效,优先改用Cmd+Shift+H
全局替换后 Git 没变化?你根本没写入磁盘
Replace All 只修改编辑器内存,不自动保存到文件系统。标题栏出现 ● 圆点 ≠ 已落盘。
- 必须手动按
Ctrl+S(单文件)或Ctrl+Shift+S(全部已修改文件) - 未打开过的文件不会被加载进编辑器,
Replace All对它们完全无效——哪怕搜索结果里列出来了 - 建议开启
File > Auto Save并设为afterDelay,避免漏存
正则替换总失败?$1 和 \1 不是一回事
VSCode 用 JS 正则引擎,捕获组引用只认 $1、$2;写 \1 或 $$1 会静默失败——界面不报错,也不替换,只是原样保留。
- 查
class="([^"]+)",替换填class="$1 is-primary",不是class="\1 is-primary" - 要字面输出
$1,得写成$$1 - 中文括号、全角符号、未转义的
.或/会导致正则静默失效;建议先关掉.*按钮确认普通文本能搜到,再逐步加正则 - 跨行匹配需勾选
.*旁的 dotAll 模式,或用[\s\S]*替代.*
限定范围不生效?files to include 是手动输入的文本字段
它不是下拉菜单,也不是自动补全框——你必须自己输入通配符模式,比如 src/**/*.ts 或 *.php,否则默认扫描整个工作区(含 node_modules)。
- 想只改 TypeScript 文件,必须在「files to include」里明确填
*.ts,不能依赖默认行为 - 排除目录不是靠右键菜单,而是填到「files to exclude」里,例如
node_modules, dist, *.d.ts - 路径支持 glob 语法:
**/test/*.js表示所有 test 子目录下的 JS 文件 - 首次用前,点「files to include」旁的 … 图标 → 「Add pattern」,比事后翻 Git diff 更省心
最容易被忽略的是:全局替换的「全部替换」按钮只作用于当前已高亮的匹配项,而高亮依赖你是否已点击过「Find All」;没触发这一步,就直接点 Replace All,大概率漏掉大量匹配。











