ctrl+shift+h(win/linux)或cmd+shift+h(macos)是vscode全局替换快捷键,但需先打开文件夹工作区,否则退化为单文件操作;files to include须明确限定路径,正则替换前需点亮.*按钮并确保$1等引用格式正确。

Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)是真正触发文件夹级全局替换的快捷键,不是Ctrl+Shift+F——后者只查不换,必须手动切到替换面板才能操作。
为什么按了Ctrl+Shift+H没反应?
最常见原因是当前没打开文件夹工作区。VSCode 的全局替换依赖路径上下文:如果只用“Open File”打开单个文件,Ctrl+Shift+H会退化为当前文件内替换,且不显示范围筛选控件。
- 右下角状态栏显示
No folder opened→ 必须通过File → Open Folder…重新加载项目根目录 - 多根工作区(.code-workspace)中某个子文件夹带感叹号图标 → 该路径未被实际加载,搜索会跳过
- 快捷键被终端、调试控制台或扩展覆盖 → 点击左侧搜索图标确认是否进入“在文件中查找”模式(顶部显示蓝色高亮文字)
files to include填什么才真正限定文件夹?
空填或留默认值 = 扫整个工作区,包括 node_modules 和 dist;不加限制就点“全部替换”,等于主动邀请灾难。
- 只改
src下所有 JS/TS:src/**/*.ts,src/**/*.js - 排除
legacy子目录:**/*.ts,-**/legacy/**(注意减号前有逗号,且不能加空格) - 匹配但不递归:
components/*.vue(只限 components 目录一级) - 误写成
components/**/*.vue却忘了src/前缀 → 可能扫到node_modules/@scope/components/里的同名文件
正则替换时$1失效的三个隐藏条件
捕获组引用不是写了括号就能用,VSCode 的 JavaScript 正则引擎对环境非常敏感:
-
.*按钮必须点亮(启用正则),且^$(全字匹配)和Aa(大小写)按钮状态不能与你的正则逻辑冲突——比如开了全字匹配,console\.log\((.+?)\)就无法捕获引号内的字符串 - 替换字段里必须用
$1,不是\1;要字面输出美元符号,得写成$$abc - 中文括号、全角空格、不可见的 BOM 字符会让整个正则静默失败,预览区不报错也不显示结果——建议先在浏览器控制台用
new RegExp()测试表达式有效性
全局替换真正的风险不在语法,而在“已匹配却未预览”:VSCode 不会自动扫描新出现的文件,也不会刷新已关闭标签页的变更。执行 Replace All 前,务必点一次 Find All 强制重载结果列表,否则你看到的可能是一分钟前的缓存。











