sublime text批量替换多个文件必须用ctrl+shift+f调出find in files面板,where填“.”启用全项目搜索,点击.*激活正则,replace all后务必手动save all,否则改动仅缓存在内存中丢失。

在 Sublime Text 中批量替换多个文件内容,不是 Ctrl+H 点 Replace All 就能搞定的事——它默认只改当前文件、不认正则、不自动保存,直接硬上大概率改错 console.log 字符串里的键名、user_id 变量,甚至把路径 src/utils.js 里的下划线也干掉。
为什么 Ctrl+H 和 Ctrl+Shift+F 效果完全不同
Ctrl+H(或 Cmd+H)打开的是「当前文件内」查找替换面板,哪怕你点了 Replace All,也只作用于当前标签页的可见区域(折叠行、被排除的行都会跳过)。而真正跨文件批量操作必须用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)调出 Find in Files 面板。这个面板的 Where 框决定了搜索范围,没填对就等于“搜了个寂寞”。
- Where 框留空 → 只搜当前已打开的标签页,不是整个项目
- Where 填
./src或./src/→ 可能只搜一级子目录,漏掉深层文件 - Where 必须填
.(单个英文点)→ 才表示整个已加载项目根目录 - 想排除
node_modules?写成., -node_modules/, -dist/(逗号分隔,减号前缀)
正则模式必须手动激活,否则 \d、^、$ 全当普通字符
Sublime 的 Find in Files 面板右下角那个 .* 图标,默认是灰色的。不点它变蓝,或者不按 Alt+R(Windows/Linux)/Cmd+Alt+R(macOS),你写的任何正则表达式都无效。比如想把 getUser(id) 改成 getUser({ id }),查找框填 getUser$$([^)]+)$$,但没开正则,括号和 $ 就只是字面意思,根本搜不到。
- 启用正则后,捕获组引用只能用
$1、$2,不能用\1 - 想匹配换行符?得加
(?s)前缀,例如(?s)foo.*bar -
\b在 Sublime 里把下划线_和数字当单词字符,\buser_name\b会错误匹配到username;更稳写法是(?
Replace All 后文件全是星号 *,这是正常现象
点完 Replace All,所有被修改的文件标签页右上角出现星号 *,说明 Sublime 只把变更缓存在内存里,并未写入磁盘。关掉窗口、崩溃、甚至只是切走再回来忘了保存,改动就彻底丢进虚空——没有撤销历史可回溯,也没有自动备份。
- 必须手动执行
File → Save All - 快捷键:Windows/Linux 是
Ctrl+K→Ctrl+B;macOS 是Cmd+K→Cmd+B - 如果某次替换后发现部分文件没变,先检查它们是否右下角显示
RO(只读),或是否被 Where 路径过滤掉了(比如写了**.ts却想改.js)
大文件、非 UTF-8 编码、被忽略目录这些细节容易被跳过
Sublime 默认跳过 >10MB 的文件,右下角状态栏显示编码不是 UTF-8 的文件也不会参与替换(比如 GBK 编码的 HTML 文件)。另外,node_modules、dist、.git 这些目录是原生被忽略的,不是正则或路径写错了——即使 Where 填了 .,它们也不会出现在匹配结果里。
- GBK 文件要先右键 →
Reopen with Encoding → GBK,再操作 - 想搜
node_modules?得手动在 Where 框加路径,比如./node_modules/**/*.js(前提是已启用正则) - 大量匹配时 Sublime 可能卡顿,建议分目录逐步操作,或先
Find All预览数量











