全局替换需手动触发“replace in files”才写入磁盘;ctrl+shift+h(win/linux)或cmd+shift+h(macos)打开多文件替换面板;replace all仅更新内存,不保存文件;search.exclude默认静默跳过node_modules等路径;通配符如/api/会误排除含api的子目录;只读文件会被replace in files跳过。

全局替换不是输完就生效,必须手动触发“Replace in Files”才能真正写入磁盘。 点击“Replace All”只改内存、不保存文件,标题栏出现 ● 也不代表落盘——这是最常被忽略的致命点。
Ctrl+Shift+H 打开的是全局替换面板,不是 Ctrl+F 的单文件查找
很多人卡在第一步,是因为误用 Ctrl+F(只查不换)或 Ctrl+H(仅当前文件)。Ctrl+Shift+H(Win/Linux)或 Cmd+Shift+H(macOS)才是打开多文件替换视图的正确入口。它默认扫描整个工作区,但不会自动聚焦到编辑器内容,需主动检查范围设置。
- 没点右上角的文件夹图标就直接输内容 → 可能扫进
node_modules或dist,耗时且干扰大 - 想只改
.ts文件,却忘了在files to include里填*.ts - 勾了正则(
.*按钮变蓝),但用了\R或\K→ JS 正则不支持,静默失败
search.exclude 会静默跳过匹配,哪怕你正要修 node_modules 里的 patch
search.exclude 是 VSCode 默认启用的拦截器,靠它排除 **/node_modules/**、**/.git/** 等路径。它不判断你“是不是真想搜”,只要路径匹配就跳过。
- 检查方式:
Ctrl+Shift+P→ 输入Preferences: Open Workspace Settings (JSON)→ 查看是否有search.exclude条目 - 临时绕过:搜索面板右上角点击
⋯→ 取消勾选“使用排除设置”(仅本次生效) - 通配符陷阱:
**/api/**会排除所有含api的子目录(如src/utils/apiClient),而src/api/**才只排除顶层src/api
Replace All ≠ Replace in Files:前者不写磁盘,后者才真正修改文件
VSCode 把“替换操作”和“写入动作”拆开了:Replace All 按钮只更新内存中的文本;Replace in Files(两个重叠文档图标)才会逐个打开命中文件、执行替换、触发保存逻辑。
- 未打开的文件不会被
Replace All触达,但Replace in Files会自动加载并修改 - 文件是只读状态(右下角显示
Read-only)→Replace in Files会跳过,需先解除只读或用管理员权限运行 VSCode - 启用
Auto Save(File > Auto Save → afterDelay)不能替代确认操作,只是避免漏存
真正难的从来不是语法本身,而是嵌套结构——比如匹配 JSX 中某个属性值、提取带转义引号的 JSON 字符串。这些场景下,光靠 .* 开关和 $1 捕获组远远不够,得结合上下文锚点、非捕获组和显式换行符处理。











