vscode批量替换必须用“replace in files”而非“replace all”,确保在文件夹中搜索(蓝色文件夹图标)、检查排除设置、正则引用用$1、手动保存或启用auto save。

不能只按 Ctrl+H 或点“全部替换”就完事——那只是改了当前打开文件的内存副本,根本没碰其他文件。
确认你真在“整个文件夹”里搜
VSCode 默认打开的是“在当前文件中查找”,不是全局。按 Ctrl+Shift+F(macOS 是 Cmd+Shift+F)后,先看搜索面板顶部左侧图标是不是蓝色「文件夹」图标;如果是灰色「文档」图标,说明它只在你当前编辑的那个文件里找,哪怕你按了全局快捷键也白搭。
- 点右上角
⋯菜单 → 勾选「在文件中查找」 - 或直接再按一次
Ctrl+Shift+F,强制重置为全局模式 - 右下角状态栏要显示类似
Folder: /your/project/root,而不是No folder opened
用 Replace in Files,别信 Replace All
Replace All 按钮(右上角带箭头的方块)只修改已加载到编辑器里的文件内容,且不自动保存。没打开过的文件、只读文件、甚至刚被 Git 忽略但实际存在的文件,它统统跳过。
- 真正写入磁盘的操作是点击搜索结果列表上方的
Replace in Files按钮(两个重叠文档图标) - 它会逐个打开匹配文件、执行替换、触发保存逻辑,连未打开的文件也能改
- 如果某文件右下角显示
Read-only,Replace in Files会直接跳过,需手动解除只读或用管理员权限运行 VSCode
控制范围:包含/排除文件不能靠猜
默认 search.exclude 会静默过滤 **/node_modules/**、**/.git/** 等路径——哪怕你正想批量修 node_modules 里的 patch 文件,它也会拦住。
- 检查是否被过滤:按
Ctrl+Shift+P→ 输入Preferences: Open Workspace Settings (JSON)→ 查看search.exclude或files.exclude条目 - 临时绕过:搜索面板右上角
⋯→ 取消勾选「使用排除设置」(仅本次生效) - 限定类型更安全:在「包含文件」输入框填
src/**/*.ts,比留空更可控;避免用**/api/**这种模糊通配,它会误杀src/utils/apiClient
正则替换别写 \1,得用 $1
VSCode 的搜索替换用的是 JavaScript 正则引擎,捕获组引用必须写成 $1、$2。写成 \1 或 $1abc 都会静默失败——界面不报错,也不替换,只是原样保留。
- 开启正则前先关掉
.*按钮,确认普通文本能搜到,再逐步加正则 - 示例:把
class="btn primary"改成class="btn is-primary",应写:
查找:class="([^"]+) primary"
替换:class="$1 is-primary" - 要字面量输出
$1,得写成$$1;中文括号、全角符号、未转义的.或/会让整个正则失效且无提示
最常被忽略的一点:Replace in Files 不会自动保存所有文件,即使它完成了替换操作——你仍需手动 Ctrl+Shift+S 或启用 Auto Save(File > Auto Save > afterDelay),否则 Git 状态里看不到任何改动。











