vscode全局替换需手动启用正则、限定文件范围并点击“find all”才生效;快捷键默认限于当前文件,须切换至“在文件中查找”;未保存或未打开的文件不会被替换,且正则引用必须用$1而非\1。

VSCode 全局替换不是按完快捷键就自动开干——必须手动点 .* 启用正则、手动输 files to include 限定范围、手动点 Find All 才能触发真实匹配,否则 Replace All 是空转。
Ctrl+Shift+H 按了没反应?你卡在「当前文件」模式
很多人按 Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)后只在当前文件里搜,面板右上角显示灰色“文档”图标。这不是快捷键失效,是状态残留。
- 解决方法:再按一次
Ctrl+Shift+H,或点击面板右上角⋯→ 勾选「在文件中查找」 - 别依赖快捷键自动切换上下文,VSCode 不会帮你重置搜索范围
- 如果右下角显示
Read-only,Replace按钮直接灰掉,得先解除只读或用管理员权限重启
全局替换前不输 files to include,等于把 node_modules 和 dist 一起扫
默认范围是整个工作区,但没人想改 node_modules 里的第三方代码。漏设过滤规则,轻则卡顿,重则污染依赖。
- 只改 TypeScript 文件?在
files to include输入src/**/*.ts,别只写*.ts(它会扫根目录下所有.ts,包括测试配置) - 想排除某目录?在
files to exclude输入!node_modules,!dist,!**/*.d.ts - 路径支持 glob 语法:
**匹配多级子目录,*只匹配单层,!表示排除
正则替换写 \1 就静默失败,必须用 $1
VSCode 用的是 JavaScript 正则引擎,捕获组引用只认 $1、$2。写 \1 或 $$1 不报错,但不会替换——它当普通文本原样保留。
- 查
console\.log\(["'](.+?)["']\),替换填debugger; // $1,不是debugger; // \1 - 要字面输出
$abc,得写成$$abc;$1中的$是特殊字符 - 括号必须存在且编号正确:
(?:foo)是非捕获组,不生成$1;((foo))会生成$1(外层)和$2(内层)
Replace All 不保存到磁盘,Git 看不到改动
Replace All 只改编辑器内存,不写文件系统。标题栏出现 ● 圆点 ≠ 已保存,必须手动 Ctrl+S 或 Cmd+S 才落盘。
- 更隐蔽的问题:
Replace All对「没打开过的文件」完全无效——VSCode 不会主动加载它们进内存 - 批量改完立刻看 Git 状态,没看到改动?八成是忘了保存,或文件根本没被加载
- 建议开启
File > Auto Save并设为afterDelay,避免漏存











