vscode全局替换需先设范围、再手动触发搜索、最后执行,直接点replace all易失败;ctrl+shift+h仅开面板,须点“查找全部”才扫描;范围不限会导致卡顿,正则捕获组$1有效但转义须严格,大小写与全词匹配开关防误改。

VSCode 的全局替换不是“按个键就完事”,而是必须先明确范围、再确认匹配、最后才执行动作;直接狂点 Replace All 是多数人翻车的第一步。
Ctrl+Shift+H 打开的是范围可调的替换面板,不是自动扫描工具
这个快捷键(Ctrl+Shift+H / Cmd+Shift+H)只打开界面,不自动触发搜索。你输完内容后,VSCode 不会立刻列出结果——必须手动点击右上角的“查找全部”(或按 Enter),它才开始扫描并高亮所有匹配项。
- 没点“查找全部”就点“全部替换”,VSCode 只会替换当前已缓存的(可能为零)匹配项,静默失败
- 面板默认扫描整个工作区,
node_modules、dist、build这些目录会拖慢响应甚至卡死,务必先点漏斗图标,在“文件包含”里填src/**/*.ts或*.php - Mac 用户注意:
Cmd+Option+F是当前文件替换,Cmd+Shift+H才是全局——别和 Finder 快捷键混淆
正则替换中 $1 捕获组生效,但括号和转义必须严格匹配
想把 console.log("msg") 改成 logger.info("msg"),正则写 console\.log$$([^)]+)$$ 是对的,但替换字段里必须用 logger.info(),写成 或 <p>想把 <code>console.log("msg") 改成 logger.info("msg"),正则写 console\.log$$([^)]+)$$ 是对的,但替换字段里必须用 logger.info($1),写成 \1 或 $0 都无效。
-
.*按钮点亮后,.才代表“任意字符”,否则就是字面量点号;\d+可用,但\K、\R会报错不匹配 - 要字面输出
$abc,得写成$$abc;否则 VSCode 会尝试解析$a,找不到就留空 -
(?:non-capturing)不生成编号,$1对应的是第一个(),不是第几个括号出现
区分大小写和全词匹配不是装饰图标,是防止误改的关键开关
启用 Aa(Match Case)后,User 和 user 就完全分离;启用 ab(Match Whole Word)后,id 不会匹配到 user_id 或 identity 里的子串。
- 重构类名或常量时,不点
Aa可能顺手把HTTP_STATUS里的http全替成小写,编译直接报错 - 批量改变量名如
userId→userUid,不勾ab会把userIds、userIdentifier也卷进去 - 这两个开关一旦启用,会影响所有后续输入,关掉前记得检查是否还在高亮状态
真正卡住人的从来不是功能不会用,而是替换前没看预览、没限范围、没验证正则捕获逻辑;哪怕只改三个文件,也建议先用 git stash 备份,再小范围试一次 Replace All,比事后一行行 git checkout 省十分钟。











