Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(macOS)是Sublime Text跨文件夹批量替换的唯一有效入口;Where填“.”才扫描整个项目,正则需手动启用.*模式并注意转义与跨行限制,替换后须手动保存且无跨文件撤销。

必须用 Ctrl+Shift+F(或 Cmd+Shift+F)打开 find_in_files 面板
按 Ctrl+H 或右键“查找”只会改当前文件,跨文件夹批量替换唯一有效入口是 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)。如果快捷键没反应,大概率是插件劫持了绑定——去 Preferences → Key Bindings – User 搜 "ctrl+shift+f",删掉冲突项;或者确认是否已通过 File → Open Folder… 加载了项目根目录(右下角状态栏要显示类似 ~/my-project/ 的路径,否则 Where 框会灰显或仅限 “Open Files”)。
Where 框填什么才真正扫整个项目或指定子目录
Where 不是路径补全框,而是 Shell 风格的过滤表达式,填错等于白忙活:
- 填
.(单个英文点):表示整个项目根目录及其所有子目录,最常用也最安全 - 只改
src下的 JS 文件:./src/**/*.js(注意双星号**才递归) - 排除
node_modules和dist:., -node_modules/, -dist/(逗号分隔,减号前缀,斜杠统一用/) - 留空 ≠ 全项目:实际等价于“只搜当前已打开的标签页”,90% 的漏搜都源于此
- Linux/macOS 路径区分大小写:
./SRC和./src是两个目录
正则替换必须手动开 .* 模式,且 . 默认不跨行
没点右下角 .* 图标(变蓝才算激活),\d+、^import、$ 全当普通字符串处理,连点号 . 都不会被识别为通配符。常见问题:
-
.默认不匹配换行符:哪怕开了正则,foo.*bar也找不到foo\nbar;真要跨行,得加(?s)前缀,如(?s)foo.*bar - 捕获组引用只能用
$1、$2,\1在 Sublime 里是字面量,不会被解析 -
\buser_id\b对下划线不敏感,仍会匹配到username;更稳的是(? - 括号、点、美元符等元字符在查找框中必须转义:
getUser$$([^)]+)$$才能匹配getUser(id)
Replace All 后不会自动保存,且不可跨文件撤销
点了 Replace All,所有改动都在内存里,关掉未保存的标签页就直接丢弃。Sublime 没有跨文件的撤销历史。必须:
- 替换前先
git commit -m "before global replace",出错时git checkout .秒回滚 - 替换后立刻按
Ctrl+K松开,再按Ctrl+B(Windows/Linux)或Cmd+K→Cmd+B(macOS)执行全部保存 - 别依赖右上角的星号
*,它只提示“有修改”,不等于已落盘 - 若发现部分文件没保存成功,检查
file_exclude_patterns设置是否意外过滤了目标文件(比如*.log或*.tmp)
真正危险的不是找不到匹配项,而是匹配太多却没看清上下文——Find All 后务必拉到底部看命中数,上千条时建议分目录逐步操作。


















