Ctrl+Shift+H(Win/Linux)或Cmd+Shift+H(macOS)直接打开全局替换面板,默认作用于整个工作区,范围过滤须在输入搜索内容前设置,否则易误改node_modules或dist等目录。

Ctrl+Shift+H 打开的是全局替换面板,不是“搜完再选文件”
很多人以为 Ctrl+Shift+H(Windows/Linux)或 Cmd+Shift+H(macOS)只是打开一个搜索框,之后再手动勾选文件——其实它一打开就已进入“多文件替换”上下文,但默认范围是整个工作区。关键在于:**范围过滤必须在输入查找内容前或同时设置,而不是替换时才选**。
常见错误现象:输完关键词直接点 Replace All,结果改了 node_modules 里的第三方代码,或把 dist/ 里打包后的文件也动了。
- 务必先点面板右上角的
…图标,打开files to include和files to exclude -
files to include填src/**/*.ts比填*.ts更安全,避免误触配置文件或测试用例 -
files to exclude可一次性填多个模式,用英文逗号分隔,例如:**/test/**, *.d.ts, build/** - 这些过滤条件只对本次操作生效,不会污染工作区设置
正则替换时 $1 不生效?先确认括号捕获和 .* 按钮状态
想用正则做结构化替换(比如把 import MyComp from "./MyComp.vue" 改成 import { MyComp } from "@/components"),却始终得不到 捕获内容——大概率是两个细节没对上。
-
.*按钮必须点亮(变蓝),否则正则语法不启用,(...)就只是普通括号 - 捕获组编号从左到右严格计数,
(?:...)是非捕获组,不生成$1;嵌套括号按左括号顺序编号,别数错 - 替换字段里必须用
$1,写成\1或$01都会静默失败,界面无报错也不替换 - 如果要字面输出
$abc,得写成$$abc
替换了但 Git 没变化?VSCode 默认不自动保存
点了 Replace All 后,文件标题栏出现 ● 圆点,不代表已写入磁盘。这是最隐蔽也最容易被忽略的一环。
-
Replace All只修改编辑器内存中的副本,不会触发文件系统写入 - 必须手动执行
Ctrl+S(单个文件)或Ctrl+Shift+S(全部已修改文件) - 没打开过的文件(比如某些
src/utils/下未打开的.ts)根本不会加载进编辑器,Replace All对它们完全无效 - 建议开启
File > Auto Save并设为afterDelay,避免漏存
Mac 上 Cmd+Option+F 没反应?不是快捷键错了,是系统拦截了
Mac 用户常遇到 Cmd+Option+F 按下后毫无反应,甚至弹出系统截图菜单——这不是 VSCode 故障,而是 macOS 把这组按键预留给「截取选定区域」功能。
- 去
系统设置 > 键盘 > 快捷键 > 截图,禁用「截取选定区域」对应的快捷键 - VSCode 内部统一用
Cmd+Option+F表示当前文件替换,Cmd+Shift+H表示全局替换,不要尝试映射成Cmd+Alt+F(物理键就是 Option) - 如果仍不生效,可在 VSCode 中打开
Settings > Keyboard Shortcuts,搜replace,确认editor.action.startFindReplaceAction绑定的是正确命令


















