Ctrl+Shift+H 无效需先打开文件夹工作区;漏文件因 search.exclude 过滤,可临时清空验证;限定范围用 files to include(如 *.vue);正则替换须用 $1 引用捕获组,$1/$2 顺序不可颠倒。

Ctrl+Shift+H 没反应?先确认工作区已打开
VSCode 的全局替换功能(Ctrl+Shift+H / Cmd+Shift+H)只在「文件夹工作区」下生效。如果右下角状态栏显示 No folder opened,那快捷键实际退化为单文件操作,根本不会扫描子目录。必须通过 File → Open Folder… 加载项目根目录,而不是只用 Open File 打开单个文件。多根工作区(.code-workspace)也支持,但要检查各文件夹图标旁无红色感叹号——有则说明加载失败。
替换了但漏文件?检查 search.exclude 和 files.exclude
VSCode 默认跳过 node_modules、.git、dist 等目录,这是通过 search.exclude 配置实现的。但它可能被你或插件悄悄改写:比如误加了 "src/api/**",结果整个 API 目录被静默过滤。点击搜索框右上角的 … 图标,展开 files to exclude 栏,逐条核对;同时注意 files.exclude(影响文件资源管理器)和 search.exclude(只影响搜索)是两个独立配置,后者优先级更高。临时清空 search.exclude 是快速验证是否被过滤的最直接办法。
想只改 .vue 或 .ts 文件?用 files to include 限定范围
在全局替换面板中,别依赖“全扫再人工筛选”。直接在 files to include 输入 *.vue 或 src/**/*.ts,能立刻收窄范围、避免误伤。注意语法:逗号分隔多个模式时,不能加空格,写成 *.ts,*.js 可以,*.ts, *.js 会导致第二个模式失效。如果目标文件不在当前工作区根目录下(比如放在父级目录的 shared/ 里),得先用 Add Folder to Workspace 把它加进来,否则连扫描都不会触发。
正则替换总失败?捕获组编号和 $1 写法必须严格对应
启用正则(.* 按钮点亮)后,替换字段里必须用 $1 引用捕获组,\1 是无效的。括号编号从左到右依次为 $1、$2……非捕获组 (?:...) 不占编号。常见翻车点:
• 搜索写了 import\s+(\w+)\s+from\s+['"](.+?)['"],但替换填了 import $2 from "$1"——顺序反了,$1 是模块名,$2 是路径;
• 想字面输出 $abc,却没转义,得写成 $$abc;
• 启用了 .(跨行匹配)按钮,但实际文本不含换行,反而让正则引擎多做无谓尝试,拖慢响应。
全局替换本质是纯文本扫描,不理解 JS/TS 语义,也不会自动同步 import 名称或路径变更。真正安全的重构,永远需要配合 Git 分支、小范围预览、以及对 search.exclude 和正则编号这类细节的条件反射式检查。


















