Ctrl+Shift+F是唯一跨文件批量替换入口,需正确设置Where路径、开启正则模式并手动保存;漏设任一环节将导致替换失败或遗漏。

Ctrl+Shift+F 是唯一能跨文件批量替换的入口
按 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)打开「Find in Files」面板,不是 Ctrl+H。后者只作用于当前文件可见区域,哪怕你点了 Replace All,其他未打开的文件、折叠代码块、隐藏行全被跳过。面板右下角状态栏必须显示项目路径(如 /project/my-app),否则说明没加载项目——得先执行 File → Open Folder… 选中根目录,不能只打开单个文件。
Where 路径写错,90% 的替换会漏掉关键文件
Where 框不是路径补全器,是 Shell 风格过滤表达式。留空 ≠ 全项目,它等价于“只搜已打开的标签页”。常见有效写法:
- 整个项目:
.(就一个英文点,不是./或./src) - 仅 JS 文件:
./src/**/*.js(双星号**才递归子目录) - 排除依赖目录:
., -node_modules/, -dist/, -build/(逗号分隔,减号开头) - Windows 用户也必须用正斜杠
/;大小写敏感:./SRC和./src是两个路径
填错一个字符,比如漏掉 ** 或多加了 ./,就可能漏掉 80% 的匹配文件。
正则模式不手动开启,\d、^、$ 全当普通字符处理
每个查找面板(Ctrl+F、Ctrl+H、Ctrl+Shift+F)的正则开关都是独立的。没点右下角 .* 图标(变蓝才算激活),或没按 Alt+R(Windows/Linux)/Cmd+Alt+R(macOS),写 console\.log$$[^)]*$$ 也搜不到任何东西。
- 捕获组引用只能用
$1、$2,\1是字面量,不会解析 -
.默认不匹配换行符;要跨行(如foo.*bar匹配foo\nbar),得加(?s)前缀:(?s)foo.*bar -
\buser_id\b对下划线不敏感,仍会匹配username;更稳的是:(?
Replace All 后文件全是脏状态,不 Save All 就等于没改
点完 Replace All,所有被改的文件标签页会出现星号 *,这是 Sublime 在提醒:“我还没写进磁盘”。它不会自动保存,也没有跨文件撤销历史。
- 必须手动执行
File → Save All,或快捷键:Ctrl+K然后Ctrl+B(Windows/Linux),Cmd+K然后Cmd+B(macOS) - 如果某文件右下角显示
RO(只读),Replace All会直接跳过它,需先解除只读属性 - GBK 编码文件默认不参与搜索替换,得右键 →
Reopen with Encoding → GBK再操作
最容易被忽略的是三件事:Where 路径写错、正则没开、替换后忘保存——任一出错,结果就是白忙活,还可能漏改关键文件。别跳过 Find 预览步骤,看匹配列表比直接 Replace All 安全十倍。

















