sublime text没有独立的“多行查找替换”功能:跨文件必须用ctrl+shift+f(macos为cmd+shift+f),跨行需正则加(?s)前缀;where填“.”才搜整个项目,启用正则须点.*图标或alt+r,replace all后必须手动save all。

Sublime Text 的「多行查找替换」根本不存在独立功能——所谓“多行”,要么是跨文件(用 Ctrl+Shift+F),要么是跨行(用正则 (?s)),混淆这两者,90% 的操作会漏改或误改。
Ctrl+Shift+F 是唯一能跨文件的入口
按 Ctrl+H 或右键「替换」只动当前文件;点菜单「Find → Replace」也一样。真正扫多个文件,必须用 Ctrl+Shift+F(macOS 是 Cmd+Shift+F)。快捷键失效?先去 Preferences → Key Bindings – User 搜 "ctrl+shift+f",删掉插件劫持项。
-
Where框填.才表示整个项目根目录;留空 = 只搜已打开的标签页 - 要限定范围,写
src/**/*.js(双星号才递归子目录),不是src/*.js - 排除
node_modules和dist:在Where里写., -node_modules/, -dist/,逗号分隔,减号开头 - Windows 路径也必须用正斜杠
/,.\src无效,src/才对
正则跨行替换必须加 (?s)
. 默认不吃换行符,foo.*bar 匹配不到 foo\nbar。想跨行,得显式加前缀:(?s)foo.*bar。不加就等于白写。
- 启用正则:点面板右下角
.*图标(变蓝才算开),或按Alt+R - 捕获组引用只能用
$1、$2,\1在 Sublime 里是字面量,不会被解析 - 单词边界
\b对_和数字不敏感,\buser_id\b会匹配username;更稳写法:(? - 想删掉所有
console.log(...)行但避开字符串里的?查^[ \t]*console\.log$$[^)]*$$[ \t]*$,替换留空
Replace All 后文件根本不保存
点了 Replace All,所有标签页出现星号 *,这只是内存变更标记——关掉窗口,改动全丢。Sublime 从不自动落盘。
- 必须手动按
Ctrl+K松开,再按Ctrl+B(Windows/Linux);macOS 是Cmd+K→Cmd+B - 高风险操作前务必
git commit -m "before global replace",别信预览 - 大项目记得关
"index_files": false,否则搜索卡死或漏文件;关了还得清缓存目录 - 非 UTF-8 编码文件(如 GBK)默认被跳过,右下角看编码,点开转成 UTF-8 再操作
最常出问题的地方不是正则写错,而是 Where 路径填错、.* 没点开、替换后没保存——这三步漏一个,改得再准也没用。











