ctrl+shift+h(win/linux)或cmd+shift+h(macos)仅打开全局替换面板,不自动执行替换;必须先按enter完成搜索、手动展开替换框、确认范围与正则设置、点击“全部替换”按钮才真正修改文件。

全局替换快捷键本身不直接执行批量修改,它只打开面板;真正完成批量修改的关键动作是“确认匹配项”和“点击全部替换”,而不是按某个组合键就完事。
Ctrl+Shift+H 打开的是面板,不是执行器
这个快捷键(Windows/Linux)或 Cmd+Shift+H(macOS)只是唤出“在文件中替换”面板,后续所有操作都得手动参与。它不会自动搜索、不会预览、更不会跳过确认直接写入文件。
- 面板打开后,
Enter是触发搜索(必须按,否则不显示结果) - 搜索结果默认不展开,要逐个点 ▶ 才能看到上下文,避免把注释或字符串里的目标也误换
- “全部替换”按钮图标是两个重叠的方块(▶▶),不是回车键——按回车只会重复搜索,不会替换
文件范围必须手动限定,否则可能改错地方
VSCode 默认搜索整个工作区,但 node_modules、dist、.git 等目录通常不该动。不填“包含文件”,就等于裸奔。
- 只处理 PHP 文件?在
files to include输入*.php - 只改
src/utils下的 TS?填src/utils/**/*.ts - 想排除
__tests__?在files to exclude填**/__tests__/** - 留空
files to include且没设exclude,就可能把package-lock.json里同名字段也替了
正则替换时 $1 失效,八成是 .* 没真开
右下角没显示 Regex 标签,或者搜索框右侧的 .* 图标是灰色/未高亮,那写的 d+、^、$1 全当普通字符处理——搜不到、不捕获、替换后原样输出。
- 最稳开启方式:
Alt+R(Win/Linux)或Cmd+Option+R(macOS),按一次即切换 - UI 上点
.*图标也行,但必须确认它变蓝,且旁边没禁用符号 - 替换栏里写
$1才有效;写${1}或\1会静默失败,不报错也不生效 - 跨行匹配要显式写
[sS]*或(.|\n)*,.默认不认换行符
全部替换后无法一键撤回,得靠外部手段兜底
VSCode 的 Replace All 是直接写内存,改完的文件不会进撤销栈,关掉再打开就彻底丢了历史。这不是 bug,是设计如此。
- 执行前必须先
git add -u && git commit -m "pre-replace",不然 Ctrl+Z 不管用 - 大项目建议先用小范围测试:比如先填
src/components/Button.vue而不是*.vue - 替换完别急着保存,先看 Git 面板的 diff,重点扫
console、import、JSON.parse这类敏感上下文 - 如果用了正则,尤其涉及嵌套(如 JSX 属性、带转义引号的字符串),人工抽检比依赖工具更可靠











