Ctrl+Shift+H无效的主因是未打开文件夹工作区;需通过File→Open Folder加载项目根目录,且全局替换前必须点击Find All、正确设置files to include(如*/.ts)、正则引用用$1而非\1。

Ctrl+Shift+H 没反应?先确认工作区已加载
VSCode 的 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)只在「文件夹工作区」下生效。如果右下角状态栏显示 No folder opened,这个快捷键实际退化为单文件替换,根本不会扫描子目录。
必须通过 File → Open Folder… 加载项目根目录;多根工作区(.code-workspace)也需确认所有文件夹图标无感叹号——否则部分路径被跳过。
- 仅用 File → Open File… 打开单个
.ts文件时,Ctrl+Shift+H无效 - 即使打开了文件,若未加载文件夹,搜索面板里看到的“匹配数”也只来自当前文件
- 全局替换依赖
search.exclude和files.exclude配置,但这些默认排除node_modules、.git等,不是 bug,是预期行为
替换前必须手动点「Find All」,否则 Replace All 无效
VSCode 的 Replace All 按钮不实时扫描,它只作用于当前已高亮的匹配项。输完搜索内容直接点「全部替换」,很可能漏掉大量结果——尤其当你刚改了 files to include 或切换了正则开关。
- 务必先点击搜索框右侧的
Find All(或按Enter),等左侧文件树完全展开、所有匹配行出现后再操作 - 如果启用了正则,
Find All还会校验语法:写错\K或\R会导致静默失败,界面无提示 - 想预览效果?别信「全部替换」前的模糊计数,逐个点开文件看上下文,检查是否误中字符串字面量(比如搜
user却替了"username")
限定 .vue 或 .ts 文件?填对 glob 模式才生效
在搜索面板下方的 files to include 输入 *.vue 是最常用做法,但它只匹配顶层目录;要覆盖 src/views/Home.vue 这类路径,得用 **/*.vue。
-
src/**/*.ts表示只扫src下所有子目录里的.ts文件 - 多个模式用英文逗号分隔:
**/*.ts,**/*.js - 排除
dist目录不能只删配置,得在files to exclude里临时填dist/**或清空该字段 - 注意:
files to include/exclude是本次搜索独享的,不会改.vscode/settings.json,也不影响别人
正则替换写 $1,不是 \1,且括号必须是捕获组
VSCode 正则引擎用的是 JavaScript 风格,捕获组引用必须用 $1、$2。写成 \1 就是普通文本,不会回填内容。
- 搜索
import\s+(\w+)\s+from\s+['"](.+?)['"],替换填import $1 from "$2"才有效 -
(?:...)是非捕获组,不生成编号,别指望它对应$1 - 要字面输出
$abc,得写成$$abc;\n表示换行符,不是反斜杠加 n - 启用正则后,
.默认不匹配换行符;误点「跨行匹配」按钮(.*右侧那个带箭头的)会让.匹配\n,常导致意外吞掉整段代码


















