Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是VSCode全局替换唯一有效快捷键,需确保光标在编辑器、搜索面板设为“在文件中查找”、工作区已加载,且必须先点“Find All”再“Replace All”,并注意正则语法、范围限定与保存。

Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是唯一需要记住的全局替换入口,其他组合键要么无效、要么只作用于当前文件。
为什么 Ctrl+Shift+H 没反应?
不是快捷键失效,而是面板没真正激活——常见原因有三个:
- 光标不在编辑器区域(比如正聚焦在终端、调试控制台或设置页),快捷键会被忽略
- 搜索面板已打开但卡在「当前文件」模式(右上角显示文档图标而非文件夹图标),需手动点 ⋯ → 勾选「在文件中查找」
- 工作区未加载:VSCode 必须以文件夹形式打开项目,单开一个 .ts 文件不算工作区,Ctrl+Shift+H 会静默失败
替换前必须手动点「Find All」
VSCode 的 Replace All 不会动态扫描,它只处理当前已列出的匹配项。如果跳过这步直接点替换,结果就是:部分文件没被改、某些行漏掉、甚至完全没变化。
- 输入完
Find和Replace内容后,先点搜索框右侧的放大镜图标(Find All) - 等右下角「搜索中…」消失、下方出现匹配列表,再点
Replace All - 若列表为空但你确信应有匹配,检查是否误开了
Match Case(Aa)或Match Whole Word(ab)
正则替换最常踩的三个坑
VSCode 用 JS 正则引擎,语法和行为与 Python/PCRE 不同,容易静默失败:
- 捕获组引用必须用
$1,写\1或$0都不生效,界面也不报错 -
.默认不匹配换行符;想跨行匹配,得勾选.*按钮旁的dotAll(小点图标),或改用[\s\S]* - 要字面输出
$abc,得写成$$abc;否则 VSCode 会尝试解析$a并丢弃剩余字符
限定范围比盲目替换重要十倍
默认搜整个工作区,但 node_modules、dist、build 通常不该动——一旦误触,Git diff 会刷屏,回滚都费劲:
- 在
files to include里填src/**/*.ts,比*.ts安全得多 - 排除目录写在
files to exclude,格式是!node_modules/**(开头必须加!) - 路径支持 glob,但不支持
**/index.{js,ts}这类花括号语法,得拆成两行或用正则
真正卡住人的从来不是功能不会用,而是替换后没保存、范围没锁死、正则引用写错——这三件事不做检查,哪怕只改一个变量名,也可能让 CI 直接挂掉。











