vscode全局替换需用ctrl+shift+h(win/linux)或cmd+shift+h(macos),而非ctrl+h;须正确配置正则、全字匹配、大小写开关,限定文件范围时用相对路径的glob模式,替换前务必预览确认。

VSCode 全局替换不是靠 Ctrl+H 就能搞定的——它默认只作用于当前文件,真要跨文件批量改,必须打开文件搜索面板,且得注意正则、大小写、全字匹配这些开关是否开着。
全局替换必须用 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)
很多人误以为 Ctrl+H 是“全局”的入口,其实它只是“当前文件内查找替换”。Ctrl+Shift+H 才真正唤出「在文件中查找」面板,顶部输入框才是全局替换的起点。
- 面板里第一个输入框填要找的文本,第二个填替换内容
- 右侧三个小图标分别控制:正则表达式(
.*)、全字匹配(\b)、忽略大小写(Aa)——它们直接影响匹配结果,关错一个就可能漏改或误改 - 下方「files to include」可填
src/**/*.ts这类 glob 模式,限定范围;留空则搜整个工作区(含node_modules,慎用)
files to include 填错路径会导致替换完全不生效
VSCode 不会报错,也不会提示“没找到匹配文件”,它只是安静地返回“0 个结果”。常见错误包括:
- 写成绝对路径,比如
C:\myproject\src\*.js—— 必须用相对工作区根目录的路径 - 漏掉通配符,比如只写
src—— 它只匹配名为src的文件,不进子目录 - 用错斜杠:Windows 用户习惯写
src\components\*.tsx,但 VSCode 只认正斜杠/,反斜杠会被当字面量处理 - 想排除某些目录却填了
!node_modules—— 正确写法是填到「files to exclude」里,且需加前导斜杠:**/node_modules/**
正则替换时,$1、$2 要和 () 捕获组严格对应
比如要把 console.log('xxx') 改成 debug('xxx'),不能只写 debug('$1'),而必须先在查找框里写 console\.log\('(.*)'\)(注意点号转义),再在替换框写 debug('$1')。
- 括号必须是英文半角,中文括号
()不触发捕获 - 如果用了
g标志(全局匹配),每个匹配都会独立应用替换逻辑,无需额外设置 -
$&表示整个匹配内容,$`和$'分别表示匹配前/后的文本,日常少用但调试时很管用 - 替换内容里想输出美元符本身,得写成
$$,否则会被当成变量引用
执行替换前务必点「Replace All」旁边的预览箭头
VSCode 会列出所有将被修改的位置,点击每条可跳转到对应行。这个步骤省不得——尤其当你开了正则或用了复杂 glob 时,实际影响范围常和预期不同。
- 预览列表里显示灰色文字,说明该处位于被排除的路径中(比如进了
node_modules或dist/),即使你没在 exclude 里显式写,也可能被 workspace 设置或.vscode/settings.json中的search.exclude拦下 - 如果预览为空但你确定应该有结果,先检查右上角三个开关图标是否全关着——尤其是正则开关,一不留神开着,而你输的是普通字符串,那就啥也找不到
- 执行后无法一键撤销全部替换,只能靠
Ctrl+Z逐个撤回(按得慢就可能漏),所以预览就是最后一道防线
真正麻烦的从来不是怎么按快捷键,而是搞清当前工作区的 search.exclude 设置、glob 匹配行为、以及正则里那些看不见的转义和捕获边界——这些细节不盯住,替换十次,九次要返工。











