Ctrl+H只改当前文件,跨文件批量替换必须用Ctrl+Shift+F(Mac为Cmd+Shift+F),且需手动填Where路径、启用.*正则、执行Save All,缺一不可。

直接说结论:Ctrl + H 只改当前文件,跨文件批量替换必须用 Ctrl + Shift + F(Mac 是 Cmd + Shift + F),且默认不保存、不认正则、不扫整个项目——漏掉任一条件,大概率白忙活。
Ctrl + H 和 Ctrl + Shift + F 的根本区别
很多人输完内容点 Replace All 却只改了当前文件,是因为混淆了两个面板的职责:
-
Ctrl + H:纯单文件上下文,哪怕你打开了 50 个标签页,它也只动光标所在的那个文件 -
Ctrl + Shift + F:才是真正的“在文件中查找”,能跨目录、支持路径过滤、可启用正则——但前提是 Where 字段填对了,否则它可能只搜空列表或整个磁盘根目录 - 快捷键冲突常见:搜狗输入法、IDEA 插件、某些主题包会劫持
Ctrl + Shift + F,按了没反应时先检查 Preferences → Key Bindings – User 里有没有重复绑定
Where 字段怎么填才真正扫项目
留空 ≠ 全项目,./ 会搜系统根目录,src 可能只匹配文件名含 src 的文件——Sublime 的 Where 是 Shell 风格通配,不是路径补全框:
- 整个项目(推荐):
.(就一个英文点,不是./或./) - 只改 JS 文件:
**/*.js(双星号 ** 才递归子目录) - 排除 node_modules 和 dist:
., -node_modules/, -dist/(逗号分隔,减号前缀,Windows 也必须用/) - 路径区分大小写:
src和SRC是两个目录;非 UTF-8 编码文件(如 GBK)默认不参与搜索,右下角看编码是否为UTF-8
正则替换总失效?盯住三个硬性条件
写好 (\d+) 想替换成 $1 却原样输出,不是语法错,是没满足前提:
- 必须点查找面板右下角的
.*图标(变蓝才算激活),或按Alt + R;不点它,\d、^、$全当普通字符处理 - 捕获组引用只能用
$1,不是\1;$0表示整个匹配,$2是第二个括号 - 跨行匹配要额外开启
. matches newline(按Alt + .),否则foo.*bar匹配不了foo\nbar - 括号、点号等元字符在查找框里必须转义:
getUser$$([^)]+)$$(?s)才能匹配getUser(id)
Replace All 后文件还是没变?这不是 Bug
点完 Replace All,标签页出现星号 * 是正常现象——所有修改都还在内存里,没写入磁盘:
- 必须手动执行
File → Save All,或快捷键Ctrl + K后接Ctrl + B(Mac 是Cmd + K→Cmd + B) - 如果某文件右下角显示
RO(只读),替换会跳过它,需先取消只读属性 - 大文件(>10MB)可能被跳过;Git 备份强烈建议前置,尤其涉及变量重命名时,
\buser_name\b会误中username,得配合-[a-zA-Z0-9]边界或限定作用域


















