Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是全局替换唯一入口,需手动设置包含/排除路径、正确使用$1等正则引用,并执行保存操作。

Ctrl+Shift+H 是全局替换的唯一入口,不是 Ctrl+H
很多人一上来就按 Ctrl+H,结果只在当前文件里换,还纳闷“怎么没扫到其他文件”。Ctrl+H(Windows/Linux)或 Cmd+Option+F(macOS)永远只作用于当前打开的编辑器标签页。真正跨文件、跨目录的全局替换,必须用 Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)。这个快捷键直接唤起「在文件中替换」面板,不是搜索视图(Ctrl+Shift+F),也不是查找面板(Ctrl+F)——三者功能不互通,混用必漏改。
不设 files to include 就等于在 node_modules 里瞎跑
按下 Ctrl+Shift+H 后,面板默认扫描整个工作区,包括 node_modules、dist、.git 等目录。实际项目里这会导致:搜索卡顿、匹配项爆炸、Replace All 耗时超长甚至卡死。必须手动干预范围:
- 在「文件包含」输入框填
**/*.ts(TypeScript)、**/*.css(CSS)或src/**/*.{js,ts}(多后缀) - 点旁边
…图标 → 「Add pattern」→ 输入更精确路径,如packages/*/src/**/*.ts - 在「文件排除」填
node_modules, dist, *.d.ts, coverage,避免干扰 - 别依赖「自动识别语言」——VSCode 不会根据文件内容推断类型,只认扩展名和 glob 规则
正则替换时 $1 生效,但 是废字符
想把 my_component 批量转成 MyComponent?启用 .* 按钮后,搜索写 my_([a-z])([a-z]+),替换填 My —— 这样才对。常见翻车点:
-
在替换字段里是普通文本,VSCode 只认$1、$2,不支持反斜杠引用 - 要字面输出
$abc,得写成$$abc;想插换行符,替换字段填,不是\n - 搜索中想匹配字面点号
.,必须写.;匹配字面反斜杠,得写\ - 启用
.*后,.按钮(跨行匹配)默认关闭,除非你真需要匹配换行符,否则别点它
Replace All 不等于“立刻写入”,必须手动保存
点击「全部替换」后,VSCode 只在内存里改了文件内容,所有被修改的标签页右上角会显示圆点(·),但磁盘文件仍是旧的。常见误操作:
- 以为替换完就结束了,关掉 VSCode 导致全部丢失
- 运行测试前没保存,结果测的是旧代码
- Git diff 看不到变更,因为没触发文件写入
务必执行 Ctrl+Shift+S(全部保存)或逐个 Ctrl+S。大型项目建议替换前先 git add -u && git commit -m "prep: global replace",出问题能秒回退。
最易被忽略的是:替换面板里列出的匹配项,是「上次点击 Find All 时抓取的快照」,不是实时扫描。如果中途改过文件、增删了匹配内容,必须重新点「Find All」再点 Replace All,否则漏改。


















