vscode全局替换快捷键是ctrl+shift+h(win/linux)或cmd+shift+h(macos),用于工作区范围替换;ctrl+h/cmd+h仅作用于当前文件,非全局。

VSCode 全局替换快捷键是什么
Windows/Linux 是 Ctrl+H,macOS 是 Cmd+H。这个快捷键打开的是当前文件内的「查找与替换」面板,不是项目级全局替换——很多人误以为按一次就全项目替换了,结果只改了当前文件,这是最常踩的坑。
真正想替换整个工作区(即“全局”),必须先激活「在文件夹中查找」模式:
- 按
Ctrl+Shift+H(Win/Linux)或Cmd+Shift+H(macOS) - 或者点击左侧搜索图标(放大镜),再点顶部输入框右侧的
…按钮展开高级选项 - 确保右上角显示「文件夹:xxx」且搜索范围已识别到工作区根目录
为什么替换后没生效或漏文件
常见原因是 VSCode 默认不搜索某些路径和文件类型。它会跳过 node_modules、.git、dist 等目录,也会忽略未在 files.include 中声明、或被 files.exclude / search.exclude 屏蔽的文件。
检查并调整这些配置:
- 打开设置(
Ctrl+,),搜search.exclude,删掉你不希望排除的路径(比如误加了"src/**/*test.js"却想替换测试文件) - 确认目标文件实际在工作区文件树里可见;如果用的是多根工作区,注意当前激活的是哪个文件夹
- 替换前先点「查找」按钮(或回车),看下方是否列出所有匹配项——没列出来,说明根本没搜到,别急着点「全部替换」
区分大小写、正则、全字匹配怎么开
这些开关藏在查找输入框右侧,从左到右依次是:Aa(大小写)、.*(正则)、\b(全字匹配)。它们直接影响替换结果,尤其容易出错的是:
- 想替换
user却把username也改了?打开\b(全字匹配) - 想把
const foo = 1改成let foo = 1?得开.*,然后查找const\s+(\w+)\s*=\s*(.+),替换为let $1 = $2 - 替换 JSON 字段名但大小写混乱?关掉
Aa,避免ID和id被当成不同字符串
批量替换含换行或缩进的代码块
Ctrl+H 或 Ctrl+Shift+H 原生不支持跨行查找(除非开正则并用 \n)。但真实开发中常要替换多行结构,比如把一段函数调用替换成 await 版本。
可行办法只有两个:
- 用正则:开启
.*,查找写成fetch\(([\s\S]*?)\),替换为await fetch($1)([\s\S]匹配任意字符含换行) - 用扩展:安装
multi-command或Regex Previewer辅助调试;更稳的是用Find and Transform扩展,它支持 JSON 配置多步操作 - 注意:正则跨行在大型文件中可能变慢,且
[\s\S]容易贪婪匹配过多——加?非贪婪修饰很关键
真正难的不是按键,是判断该不该全局替换、哪些上下文不能动、正则边界写对没。改之前先备份或开 Git Stash,比啥快捷键都重要。











