sublime text跨文件批量替换必须用ctrl+shift+f调出find_in_files面板、where填“.”、启用.*正则模式、replace all后手动save all并提前git备份;默认只改当前文件、不跨目录、不认正则、不自动保存,易误改。

Sublime Text 跨文件批量替换不是 Ctrl+H 点一下 Replace All 就完事的事——它默认只动当前文件,不跨目录、不认正则、不自动保存,直接硬上大概率改错 user_id 变成 user_name,或把 src/utils.js 里的下划线全干掉。
必须用 Ctrl+Shift+F(或 Cmd+Shift+F)打开 find_in_files 面板
Ctrl+H 只作用于当前文件;右键菜单里的“在文件夹中查找”也常失效,底层没走真正的跨文件通道。真正触发全局扫描的命令只有一个:find_in_files 面板。
- Windows/Linux:按
Ctrl+Shift+F;macOS:按Cmd+Shift+F - 按了没反应?检查
Preferences → Key Bindings – User里有没有插件劫持该快捷键 - 没通过
File → Open Folder…加载项目根目录,Where框会灰显,只搜“Open Files”,搜不到子目录 - 右下角状态栏显示类似
~/my-project/的路径,才算真正进入项目模式
Where 框填什么才真正扫整个项目
Where 不是路径补全框,是 Shell 风格的过滤表达式。留空 ≠ 全项目,它等价于“只搜已打开的标签页”。填错一个字符,就可能漏掉 90% 的文件。
- 整个项目:填单个英文点
.(不是./,也不是./src) - 只改业务 JS:写
./src/**/*.js(双星号**才递归子目录) - 排除
node_modules和dist:用逗号分隔 + 减号前缀,如., -node_modules/, -dist/ - Linux/macOS 下路径区分大小写:
./SRC和./src是两个目录 -
file_exclude_patterns设置可能让.log或.tmp文件被跳过,搜不到不一定是没匹配,可能是被过滤了
正则替换必须手动开 .* 模式,且 . 默认不跨行
不点右下角 .* 图标,所有正则都当普通字符串处理:\d、^、$、\b 全无效。你写 console\.log$$([^)]*)$$ 却搜不到任何东西,八成是忘了点那个小图标。
- 启用正则:点右下角
.*图标(变蓝才算激活),或按Alt+R(Windows/Linux)/Cmd+Alt+R(macOS) -
.默认不匹配换行符——foo.*bar找不到foo\nbar;要跨行得加(?s)前缀:(?s)foo.*bar - 捕获组引用只能用
$1、$2;\1在 Sublime 里是字面量,不会被解析 -
\buser_id\b对_不敏感,仍会匹配到username;更稳的是(? - 括号、点等元字符必须转义:
getUser$$([^)]+)$$才能匹配getUser(id)
Replace All 后必须手动 Save All,且高风险操作前务必 git commit
Sublime 不会自动保存被修改的文件——所有改动都在内存里。关掉未保存的标签页,修改直接丢弃。没有跨文件撤销历史,点了 Replace All 就等于把所有文件变成“脏状态”。
- 替换前执行:
git add -A && git commit -m "before global replace";出错时git checkout .三秒回滚 - 确认
Find All结果数量合理(右下角显示命中数),上千就暂停检查 - 替换后立刻按
Ctrl+K松开,再按Ctrl+B(Windows/Linux)或Cmd+K→Cmd+B(macOS)执行全部保存 - 如果替换后内容变乱码,大概率是源文件编码不是 UTF-8;看右下角状态栏编码,临时转成 UTF-8 再操作
最常被忽略的其实是 Where 框填 . 这一步,以及 Save All 这个动作——前者决定你到底改了哪些文件,后者决定你改的到底存没存进去。











