ctrl+shift+h(win/linux)或cmd+shift+h(macos)是vscode全局替换的唯一硬编码快捷键,绑定至workbench.action.findinfiles命令,不可替代;其生效前提为已打开文件夹工作区且焦点在编辑器内。

Ctrl+Shift+H 是全局替换的唯一入口,别想绕开它
VSCode 没有“可配置的全局替换快捷键”这个选项——Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)是硬编码绑定到 workbench.action.findInFiles 命令的,无法被其他命令替代。你试图把 Ctrl+Shift+F 或 Ctrl+H 改成全局替换,只会覆盖搜索或当前文件替换功能,导致行为错乱。
真正能改的,只有「触发后默认聚焦的位置」和「是否自动展开范围设置」,但这些不改变快捷键本身。
- 改
Ctrl+Shift+F会抢走全局搜索面板,而它和全局替换共用同一界面,只是初始模式不同 -
Ctrl+H绑定的是editor.action.startFindReplaceAction,只作用于当前编辑器,改了也没用 - 如果你按
Ctrl+Shift+H没反应,大概率是焦点在终端、调试控制台或侧边栏,不是快捷键失效
让 Ctrl+Shift+H 一打开就精准过滤文件类型
每次打开都要手动输 *.ts 或 src/**/*.vue?不用。VSCode 允许你把常用范围保存为默认值。
在 settings.json 中加这两项:
"search.useLegacySearch": false,
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true
},
"search.include": {
"**/*.ts": true,
"**/*.js": true,
"**/*.vue": true
}
注意:search.include 不是白名单,而是“优先扫描这些”,它不会阻止你手动输入其他 glob;search.exclude 才是真正跳过——漏配 node_modules 可能让一次替换卡住 10 秒以上。
- 如果项目里 CSS 文件全在
assets/styles下,直接写"**/assets/styles/**/*.css": true,比每次手输更快 - macOS 用户注意:
Cmd+Shift+H有时被系统快捷键拦截(如截图),可在「系统设置 > 键盘 > 快捷键 > 屏幕快照」里关掉冲突项 - 改完 settings 不用重启,但新打开的替换面板才生效;已打开的面板需点右上角
⋯ → Reload Search
正则替换时 $1 失效?先看这三处
写好 import\s+(\w+)\s+from\s+['"](.+?)['"],替换填 import $1 from "$2" 却没变?问题不在正则本身,而在上下文开关。
-
.*按钮必须点亮(高亮),否则$1当普通字符处理 -
.(dotAll)按钮不能亮——它会让.匹配换行符,而 JS 正则中跨行 import 几乎不存在,开了反而常匹配失败 - 查找框里写
\bconsole\.log\b,替换框写debugger; // $1是错的:$1对应第一个(),这里没括号,得写debugger; // console.log或改成\b(console\.log)\b
一个快速验证法:先关掉 .*,用纯文本搜 console.log 确认能命中;再开 .*,加 \b 和括号,逐步加码。
Replace All 后文件没变?你还没真正写入磁盘
Replace All 只修改编辑器内存里的文档副本,不触碰文件系统。标题栏出现 ● 圆点 ≠ 已保存,Git 也看不到变更。
- 必须手动按
Ctrl+S(单文件)或Ctrl+Shift+S(全部已修改文件)才能落盘 - 没打开过的文件(比如
src/utils/xxx.ts从没点开过)不会被加载进编辑器,Replace All对它们完全无效——VSCode 不会为了替换去读取未打开文件 - 右下角显示
Read-only?替换按钮会灰掉,此时要么改文件权限,要么用管理员模式启动 VSCode(不推荐)
最稳的做法:替换前先 git add -u && git commit -m "prep for bulk replace";替换后立刻 git status 看哪些文件真变了。静默失败的替换,90% 都卡在这一步。











