VSCode全局替换需先按Ctrl+Shift+H(Win/Linux)或Cmd+Shift+H(macOS)打开搜索面板,再确认范围(右上角图标非?)、开启正则(.*)与大小写(Aa)开关,限定包含文件路径并排除node_modules/dist,最后预览再替换。

VSCode 全局替换不是按个快捷键就完事,它分场景、看状态、要预检——Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是唯一可靠的起点,但后续每一步都可能卡住你。
为什么 Ctrl+Shift+H 按了没反应或只搜当前文件
这不是快捷键失效,而是面板默认进入了“当前文件”模式。右上角图标显示灰色文档图标(?)就说明它没切到全局范围。
- 立刻再按一次
Ctrl+Shift+H,多数情况能强制切回工作区搜索 - 或者点面板右上角
⋯→ 勾选「在文件中查找」,这个选项比快捷键更稳定 - 如果面板弹出但无匹配结果,先确认项目根目录已加载(状态栏显示文件夹名),否则它真就只查当前打开的 tab
Ctrl+Shift+H 打开后,正则和大小写开关为什么不起作用
两个开关默认关闭且互不干扰:.* 控制正则是否解析,Aa 控制是否区分大小写。它们不联动,必须手动分别开启。
-
.*图标没亮?哪怕你写了\d+,VSCode 也当字面量d+处理 -
Aa图标亮着却搜不到HTTP?说明你搜的是http,它正在严格匹配小写 - Mac 用户注意:
Cmd+R是唯一快捷键能切换.*状态,别用Cmd+Option+F——那是单文件替换的快捷键
全局替换前必须做这三件事,否则容易改错文件
VSCode 不会主动过滤 node_modules 或 dist,它默认扫整个工作区,一不留神就把依赖包里的代码给替了。
- 在「包含文件」框里填
src/**/*.ts,而不是只写*.ts;路径越具体,误伤概率越低 - 点「包含文件」旁的
⋯→ 「Add pattern」,输入!**/node_modules/**和!**/dist/**,双重保险 - 务必先点「查找全部」按钮(放大镜图标),等所有匹配项展开后再点「全部替换」——VSCode 的 Replace All 只作用于已加载的匹配项,不是实时扫描
正则替换时 $1 不生效?检查括号、转义和引用语法
$1 是唯一被 VSCode 替换引擎识别的捕获组引用方式,\1、${1}、$<name></name> 全部无效,且不会报错,只会静默忽略。
- 确保查找字段里有英文半角括号
(),且编号从左到右:第一个(...)对应$1,第二个对应$2 - 想字面输出美元符号?写成
$$abc,不是\$abc - 点
↵(跨行匹配)图标前想清楚:默认.不匹配换行符,开了它之后.*会吞掉整段内容,常导致 CSS 或 JSON 替换错乱
真正难的从来不是怎么按快捷键,而是每次替换前花 10 秒确认「范围」「模式」「预览」这三个状态——漏掉任意一个,后面就得靠 git restore 拯救。


















