vscode全局替换需分系统使用ctrl+shift+h(windows/linux)或cmd+shift+h(macos),正则须手动启用(alt+r/cmd+option+r),替换用$1而非\1,文件范围需明确设置,且“全部替换”依赖先执行搜索。

VSCode全局替换快捷键在不同系统上不能直接套用同一组按键,因为Ctrl和Cmd在系统层面对应不同修饰键,硬记Windows键位在macOS上必然失效。
Ctrl+Shift+H 和 Cmd+Shift+H 是各自平台的正确入口
Windows/Linux用户用 Ctrl+Shift+H,macOS用户必须用 Cmd+Shift+H——这两个是独立定义、互不兼容的快捷键,不是“同一个键在不同系统自动转换”。VSCode不会把Ctrl映射成Cmd来帮你省事,它只认你按下的物理键组合。如果macOS用户死记Ctrl+Shift+H,大概率触发的是系统Mission Control或输入法切换,VSCode根本收不到事件。
全局替换前必须手动启用正则模式,否则\d、^等全当普通字符
打开面板后,.*图标默认是灰色的,不点它或不按快捷键,所有正则语法都无效。可靠做法是:
-
Alt+R(Windows/Linux)或Cmd+Option+R(macOS):比点图标更稳,不依赖焦点位置 - 确认右下角出现
Regex标签,且.*图标变蓝才算真正启用 - 别碰
Aa或\按钮,它们会覆盖正则状态,导致图标看似亮着却静默失效
替换字段里捕获组必须写$1,\1会被原样输出
VSCode用的是JavaScript风格正则引擎,替换语法只认 $1、$2,不支持 \1。常见翻车场景:
- 搜
console\.log\(["'](.+?)["']\),替换填debugger; // \1→ 实际输出debugger; // \1,不是内容 - 想字面输出
$abc,得写成$$abc,否则$abc被当成未定义变量,结果为空 -
(?:...)是非捕获组,不占编号,别指望它生成$1
文件范围不设就扫整个工作区,node_modules里瞎跑很慢
Ctrl+Shift+H/Cmd+Shift+H 默认扫描整个工作区,但不会自动跳过 node_modules 或 dist——除非你项目里有 .gitignore 且 VSCode 遵从了它。容易踩的坑:
- 没点右上角文件夹图标就直接输内容,结果匹配到
node_modules/react/...,卡住数秒还改错依赖 - 想只改
.ts文件,却忘了在files to include里填**/*.ts - 误点
files to exclude里的**/test/**,但漏加英文逗号分隔,导致规则整体失效
最易被忽略的一点:VSCode 的「全部替换」只作用于当前已高亮的匹配项,不是实时扫描。必须先点 Find All(或回车执行搜索),否则 Replace All 可能漏掉刚新增的匹配行——尤其在你边改边试、反复调整正则时。











