ctrl+shift+h(win/linux)或cmd+shift+h(macos)是vscode全局替换唯一入口,需先打开搜索面板并聚焦搜索框;replace all不自动保存,须手动ctrl+s,且$1才是正则反向引用正确写法。

Ctrl+Shift+H 是全局替换的真正入口,不是 Ctrl+Shift+F
很多人误以为 Ctrl+Shift+F(或 macOS 的 Cmd+Shift+F)能直接做全局替换——它只打开搜索面板,不带替换框。真要批量改多文件,必须用 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)。按完没反应?常见原因有三个:Ctrl+Shift+H 被终端、调试控制台等非编辑器区域拦截;当前工作区未打开(VSCode 会静默降级为“无范围”搜索);或者快捷键被系统级工具(如 macOS 的 Spotlight)劫持。
“全部替换”按钮不等于“立刻写入磁盘”
Replace All 只把内容写进编辑器缓冲区,不会自动保存文件。你得手动 Ctrl+S(或 Cmd+S),否则关掉 VSCode 就丢修改。更隐蔽的问题是:如果某个文件处于只读状态(比如被 Git LFS 锁住、或权限不足),右下角会显示 Read-only,此时 Replace All 按钮变灰且不可点——不能靠重试,得先解除只读或用管理员权限重启 VSCode。
正则替换里 $1 才有效,\1 是废字符
启用 .* 按钮后,查找字段写 (\w+)\.js 是对的,但替换字段若填 \1.ts,VSCode 会原样输出 \1.ts,而不是把捕获内容代入。必须用 $1.ts。额外注意:$ 在替换字段中是特殊符号,想字面输出 $abc,得写成 $$abc;而 (?:) 这种非捕获组不生成编号,别指望它对应 $1。
第一次用全局替换前,务必点开 “files to include” 旁的 … 图标
默认扫描整个工作区,node_modules、dist、build 全在里面,一按 Replace All 就卡死。正确做法是:点 files to include 右侧的 … → Add pattern → 输入 src/**/*.ts 或 **/*.css。如果要排除某些路径,直接在 files to exclude 里填 **/legacy/** 或 node_modules。漏掉这步,后续靠 git diff 回溯成本远高于提前设好范围。











