cmd+shift+h 是 macos 上 vscode 全局替换的唯一可靠快捷键,非 cmd+option+f(当前文件)或 cmd+shift+f(仅查找);若无反应,先检查右上角是否卡在「文档」模式,需再按一次切换至工作区范围,并确认文件非只读、排除无关目录、启用正则(cmd+option+r)、手动触发“find in files”后再执行 replace all。

Cmd+Shift+H 是 macOS 上 VSCode 全局替换的唯一可靠快捷键,不是 Cmd+Option+F(那是当前文件)、也不是 Cmd+Shift+F(那是只查不换)——按错一个键,就只能手动删掉面板重来。
Cmd+Shift+H 按下没反应?先看右上角是不是卡在「当前文件」模式
VSCode 的全局替换面板启动后,右上角默认显示灰色「文档」图标,表示它仍在当前文件里搜——这不是 bug,是状态残留。必须手动干预:
- 再按一次
Cmd+Shift+H,强制切到工作区范围 - 或点右上角 ⋯ → 勾选「在文件中查找」
- 如果右下角显示
Read-only,替换按钮会灰掉,得先解除文件只读或用管理员权限重启
files to include 必须手动填,否则 node_modules 会被扫一遍
默认情况下,Cmd+Shift+H 会扫描整个工作区,包括 node_modules、dist、.git 等目录,轻则卡顿,重则误替。别依赖“先试试看”:
- 点搜索框下方的
…图标 → 「Add pattern」 - 填
src/**/*.ts或**/*.py这类明确路径,比事后翻 Git diff 省心十倍 - 想排除某目录?在「files to exclude」里加
**/build/**,注意结尾双星号
正则替换时 $1 不生效?八成是 .* 按钮没点亮
VSCode 默认关闭正则引擎,哪怕你写了 \d+\.\d+,它也当普通字符串处理。必须显式启用:
- 按
Cmd+Option+R(不是Cmd+R),右下角出现Regex标签才算生效 - 替换字段里只能用
$1,写\1或${1}都会静默失败——前者输出字面 \1,后者可能为空 - 跨行匹配不能靠 UI 的 ↵ 按钮(它在替换视图里无效),得用
[\s\S]*?替代.*?
Replace All 前必须点 Find in Files,否则改错没法撤回
Replace All 不扫描、不预览、不弹确认,点了就写入磁盘。VSCode 只作用于当前已高亮的匹配项,而高亮必须由你手动触发:
- 输完搜索内容后,务必按
Enter或点「Find in Files」,等左侧结果树展开 - 逐个点开 ▶ 展开上下文,确认不是把注释里的
console.log也替了 - 改完立刻
Cmd+S保存,否则替换只是内存操作,关掉文件就丢
最危险的错觉是“我写了正则,它就应该懂我要干嘛”。VSCode 的全局替换没有容错机制,所有开关、路径、语法都得亲手拧到位——少一步,轻则漏改,重则毁掉整个 src 目录。











