sublime全局替换需先加载项目,where填“.”表示整个项目,排除node_modules等目录,正则用$1引用捕获组,替换后须手动保存并提交git备份。

全局替换前必须确认项目已加载
Sublime 的 Find in Files 不会自动扫描你电脑上任意位置的文件,它只搜“当前打开的文件夹”——也就是你通过 File → Open Folder… 加载的那个根目录。没这一步,Ctrl+Shift+F 面板里的 Where 字段要么灰显,要么只显示 Open Files,搜不到任何内容。
- 右下角状态栏出现类似
~/my-project/的路径,才算真正进入项目模式 -
Where框留空 ≠ 搜整个项目,它实际等价于“只搜当前已打开的标签页” - 真正表示“整个项目”的写法是
.(单个英文点),不是./也不是./src - 如果项目结构复杂,建议用
Project → Save Project As…保存项目文件,避免下次打开时范围丢失
用 Where 精确控制搜索范围,避免改崩依赖
90% 的全局替换事故不是正则写错了,而是把 node_modules、dist 或压缩文件一起替了。比如把第三方库里的 console.log 全干掉,可能导致构建失败或调试信息消失。
- 安全写法示例:
./src/**/*.ts, ./tests/**/*.ts—— 明确限定业务和测试代码 - 排除干扰目录:
., -node_modules/, -dist/, -*.min.js(注意统一用正斜杠/) - 只搜某类文件更稳妥:
*.py、*.html, *.htm,支持逗号分隔多类型 - 路径基于项目根目录,不是当前文件所在路径;
src/js/*.js是合法的,../config/*.json通常无效
正则替换要盯住捕获组引用和转义细节
Sublime 的正则引擎用 PCRE,但替换语法是自研的:捕获组用 、,不是 ;点号 . 默认不匹配换行,想跨行得加 (?s) 前缀。
- 函数调用重构示例:把
getUser(id)改成getUser({ id })
查找:getUser$$([^)]+)$$(括号需转义)
替换:getUser({ $1 }) - 删掉独立的
console.log行(不碰字符串或注释里):
查找:^s*console.log$$[^)]*$$;s*$
替换:留空,或填// $0转为注释 - 双引号变单引号:
"([^"]*)"→'$1';若字符串含转义引号(如"He said "hi""),这个正则会失效,需升级为"((?:[^"\]|\.)*)"
替换后必须手动保存,且不可撤销
点了 Replace All 后,所有改动都只是内存中的脏状态。Sublime 不会自动保存被修改的文件,也不会记录跨文件的撤销历史——关掉没保存的标签页,更改直接丢弃。
- 未保存的文件标签页右上角有星号
*,但批量操作后没人盯着每个标签看 - 最稳妥操作:
Ctrl+K松开后再按Ctrl+B(即“全部保存”快捷键) -
Replace All不可撤回,Git 是唯一可靠兜底:替换前务必git add -A && git commit -m "before global replace" - 别依赖“关闭时提示保存”——误点取消,所有更改永久丢失
真正卡住人的从来不是功能不会用,而是 Where 没锁死、正则没测小范围、改完忘了保存。这三步漏掉任意一个,就可能从高效变成救火。










