sublime全局批量替换需满足三条件:项目已加载、正则手动开启、where显式限定为“.”;否则replace all无效。搜索范围依赖项目模式,where填“.”才搜整个项目,正则需点开.*图标,替换后须手动save all。

Sublime 的全局批量替换不是“输完就替”,必须同时满足项目已加载、正则模式手动开启、Where 路径显式限定三件事,缺一不可;否则点 Replace All 只是假动作,改了也白改。
Ctrl+Shift+F 灰了或搜不到任何结果?先确认是否进了项目模式
Sublime 不会主动扫描你电脑上的任意路径——它只搜你通过 File → Open Folder… 加载的那个根目录。没这一步,Ctrl+Shift+F 面板要么灰显,要么 Where 字段只显示 Open Files。
- 看左下角状态栏:是否显示类似
~/my-project/的路径?没有,说明还没进项目模式 - 看侧边栏:有没有树形目录结构?只有单个文件标签页,不算项目
- Mac 用户注意:
Cmd+Shift+F常被系统 Spotlight 占用,需在「系统设置 → 键盘 → 快捷键」里禁用 - 快捷键被插件劫持也很常见:打开
Preferences → Key Bindings – User,搜"ctrl+shift+f",删掉冲突项
Where 字段填什么才真正搜整个项目?别信“留空”和“./”
Where 字段留空 ≠ 搜整个项目,它等价于“只搜当前已打开的标签页”;填 ./ 或 ./src 也不对,Sublime 不按 shell 路径解析,而是前缀匹配器。
- 真正表示“整个项目”的写法是单个英文点:
.(不是./,也不是./src) - 只搜业务代码更安全:
./src/**/*.ts, ./tests/**/*.ts(逗号分隔,不支持空格) - 排除干扰目录:
., -node_modules/, -dist/, -*.min.js(统一用正斜杠/) - 搜所有已打开但未保存的标签页?必须手动填:
open_files
正则替换总出错?盯住 .* 图标、$1 和换行符
Sublime 的正则开关是面板级独立的:Ctrl+F、Ctrl+H、Ctrl+Shift+F 三处的 .* 图标必须各自点开,灰色=关闭,蓝色=生效。没点开时写 $1 就是字面量输出,不会被解析。
- 捕获组引用必须用
$1,不是\1;括号、点号等元字符必须转义,例如console\.log$$[^)]+$$ -
.默认不匹配换行符,想跨行必须加(?s)前缀,否则foo.*bar永远找不到foo\nbar - 删空行别用
^\s*$——\s会吞掉\n,导致文件末尾结构损坏;改用^[ \t]*$ - 提取函数参数优先用
([^)]+),比(.*?)更可靠,天然防贪婪、抗嵌套括号和换行
替换后文件没变星号?这不是 Bug,是设计上就不保存
点了 Replace All 后,所有改动都只是内存中的脏状态。Sublime 不会自动保存、不标记文件为“已修改”、不更新右上角星号 *、也没有跨文件撤销历史——关掉未保存的标签页,修改直接丢弃。
- 替换完成后必须立刻执行:
File → Save All,或快捷键Ctrl+K松开后再按Ctrl+B(macOS 是Cmd+K→Cmd+B) - 别依赖预览里的“已替换 42 处”——它不反映真实改动范围;高风险操作前务必
git commit -m "before global replace" - 最常被忽略的是
index_files设置:项目含大node_modules时,不关它,搜索会卡死;在Preferences → Settings里加"index_files": false











