Ctrl+Shift+H(Win/Linux)或Cmd+Shift+H(macOS)是VSCode真正的全局替换快捷键,直接打开“在文件中替换”面板;必须手动设置“包含文件”范围(如.ts)、启用正则模式(.图标变蓝)、用$1引用捕获组,且Replace in Files才真正写入磁盘。

VSCode 的全局替换不是“输完就点全部替换”,而是必须先限定范围、再校验匹配、最后执行——否则一秒钟改错二十个文件,Git 都救不回来。
Ctrl+Shift+H 才是真正的全局替换入口
很多人按 Ctrl+H 没反应,是因为它只作用于当前文件;跨文件批量操作必须用 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)。这个快捷键直接打开「在文件中替换」面板,带完整替换框,不是搜索面板。
-
Ctrl+H:只改当前打开的文件,哪怕你开了 50 个 tab 也只动光标所在的那个 -
Ctrl+Shift+H:默认扫描整个工作区,但会跳过node_modules、dist等被search.exclude拦住的目录(你未必知道它拦了什么) - 如果快捷键没反应,先确认光标是否在可编辑文本区域——终端、调试控制台、只读文件里都无效
必须手动填“包含文件”才能精准限定类型
不填 files to include,等于没限定范围。VSCode 不会自动猜你想改哪类文件,它真会去扫整个工作区(包括你忘了排除的 .git 或 build/)。
- 只改 CSS 文件:在「包含文件」框填
*.css或**/*.css - 只改 Vue 组件:
*.vue;想限在src/components下:src/components/**/*.vue - 只改 TypeScript 文件:
*.ts;排除声明文件可加!*.d.ts到「排除文件」 - 多个类型一起改:
*.{js,ts,jsx,tsx}(注意花括号语法需 VSCode 1.80+)
正则替换时 $1 生效的前提很具体
VSCode 用的是 ECMAScript 正则引擎,不支持 \K、(? 这类 PCRE 特性。捕获组能用,但有硬性条件:
- 必须点亮
.*图标启用正则,否则console\.log$$([^)]+)$$会被当普通字符串搜不到 - 括号必须存在且编号从左到右递增:
(?:)是非捕获组,不占编号,别指望它生成$1 - 替换字段里用
$1,不是\1;要字面输出$abc,得写成$$abc - 常见翻车:想把
import { a, b } from 'x'拆成多行,正则写了import {([^}]+)} from ['"](.+?)['"],但没加g标志(VSCode 默认全局匹配,不用显写)
Replace All 不自动保存,也不自动扫描新结果
Replace All 按钮只作用于当前已高亮的匹配项,不是实时重新扫描。而且所有替换后文件都处于未保存状态。
- 执行前务必点「查找全部」(放大镜图标),看 VSCode 列出的每一处路径和上下文——比如
config.API_URL和user.api_url都含api_url,但语义不同 - 替换后不会自动保存,要用
Ctrl+K S(Windows/Linux)或Cmd+K S(macOS)批量保存 - 如果中途修改了搜索内容,旧的匹配高亮不会自动刷新,得手动再点一次「查找全部」
- 最易忽略的一点:VSCode 默认不监控文件系统变化,如果你在替换过程中外部修改了某文件,它不会自动更新预览列表


















