全局搜索中正则不生效的三大原因是:项目未加载、.*图标未点亮(右下角蓝色才生效)、where路径写错;三者缺一即导致replace all in files失效。

全局搜索中正则不生效,基本就是三个地方没对上:项目没加载、.* 没点开、Where 路径写错了——缺一个,Replace All in Files 就等于点了个寂寞。
Ctrl+Shift+F 面板里 .* 图标必须点亮
这个图标在面板右下角,灰色 = 关闭,蓝色 = 生效。它和查找/替换/全局搜索三处面板是**各自独立开关**,不能假设“我在 Ctrl+F 里开了,Ctrl+Shift+F 就自动开了”。$1 在替换框里原样输出?八成是这里没点。
- 快捷键
Alt+R(Windows/Linux)或Cmd+Alt+R(macOS)可切换,但图标状态更可靠,建议养成“眼睛先扫图标”的习惯 - Sublime 用的是 Boost.Regex 引擎,不支持
\K、(?<name>)</name>这类 Perl 语法;命名捕获组不可用,老实用()+$1 - 想输出字面量
$?写成$$,否则会被当成捕获组引用
Where 字段不是路径补全框,填错一个字符就漏掉 90% 的文件
Where 是 Sublime 自定义的路径前缀匹配器,不是 shell,也不是 glob 通配符解释器。填 ./src 只搜一级目录,填 . 才真搜整个项目根目录(注意:不是 ./,也不是留空)。
- 递归子目录必须用双星号:
src/**/*.ts→ 正确;src/*.ts→ 只匹配 src/ 下的 .ts,漏掉 src/api/、src/utils/ - 多后缀用逗号分隔:
src/**/*.js, src/**/*.ts(不支持*.{js,ts}) - 排除目录用减号前缀:
., -node_modules/, -dist/, -build/(斜杠统一用/,Mac/Linux 大小写敏感) - Windows 用户注意:
C:\my\project这种路径在Where里会失效,一律用相对路径写法
跨行、单词边界、中文这些细节最容易翻车
默认 . 不匹配换行符,^ 和 $ 只锚定整个文件头尾——所以 foo.*bar 找不到 foo\nbar,^import 只命中第一行。
- 跨行匹配:必须加
(?s)前缀,如(?s)console\.log\([^)]*\);别依赖勾选 “.matches newline”,它会影响^/$行为,反而让定位失准 - 单词边界
\b对下划线不敏感:\buser_id\b仍会匹配username;稳妥写法:(? - 中文匹配别用
\w(它不认汉字),用[\u4e00-\u9fa5]或(?u)\p{Han} - 删空行别用
^s*$(s在 Sublime 里匹配换行符,会破坏结构),改用^R$(关闭 “.matches newline” 后)
执行前不预览,等于把 Git 当 Undo 键用
Replace All in Files 没撤回机制。所有改动只存在内存里,点完不会自动保存,也不会标星号提示已修改——你得自己 Ctrl+K → Ctrl+B 或 File → Save All。
- 务必先点
Find All,看底部匹配列表是否精准;尤其确认路径是否误入node_modules或dist - 开启
Highlight matches(灯泡图标),扫一眼高亮是否合理;重点检查字符串、注释、模板字面量里有没有被误中 - 大项目卡死?关掉
index_files:在Preferences → Settings加"index_files": false,再删缓存目录~/.config/sublime-text-3/Index/(Linux/macOS)或%LOCALAPPDATA%\Sublime Text 3\Index(Windows)
真正麻烦的从来不是正则怎么写,而是 Sublime 对项目上下文、路径语法、引擎模式的隐式约束——每次点 Replace All 前,花 5 秒确认这三件事:项目树在侧边栏、.* 是蓝的、Where 填的是 . 或明确路径,比事后查 Git log 快得多。











