Sublime搜索替换需精准控制范围、正则开关和作用域:Where留空仅搜打开文件,跨目录须填./src/*/.ts;.*、. matches newline、Match Whole Word三按钮决定正则生效;Replace All不可撤销,务必先Find All预览。

Sublime 的搜索替换不是“搜完就换”,关键在控制范围、锚定边界、预览结果——漏设 Where 会扫进 node_modules,不点 .* 按钮正则就是摆设,没点 Find All 就按 Replace All 等于主动删库。
Ctrl+Shift+F 打开的到底是不是“全局”?
不是。默认 Where 框留空时,它只搜当前已打开的标签页,不是整个项目。真要跨所有子目录,必须手动填 .(一个英文点),或更安全的 ./src/**/*.ts 这类明确路径。
-
.表示当前打开的文件夹及其全部子目录,是真正“项目级”搜索的起点 - 写
src/不会递归进src/utils/,得用src/**或src/**/*.js - 排除目录必须加减号:
., -node_modules/, -dist/, -build/,斜杠方向统一用/,Windows 也不例外 - 如果左下角状态栏没显示项目路径(如
~/my-project/),说明没通过File → Open Folder…加载项目,Where再怎么填也无效
正则替换总出错?先看这三处开关
Sublime 正则不是“写了就能跑”,三个面板按钮决定它认不认你写的表达式:
-
.*按钮必须点亮——否则d+当普通字符串处理,根本不会匹配数字 -
. matches newline要手动勾选,否则.遇到换行就停,(?s)这种跨行注释提取才有效 -
Match Whole Word(快捷键Alt+Enter)等价于正则里的,想改id又不碰user_id,不开它必翻车 - 替换框里不支持正则语法,只认
$1、$2这类捕获组引用,别写$0以外的$10,Sublime 不解析
为什么 Find All 显示 237 处,Replace All 却没反应?
常见原因不是功能失效,而是作用域被静默限制了:
- 当前文件编码含 BOM(如 UTF-8 with BOM),会导致
^s*$删空行失败——先转成 UTF-8 without BOM 再试 -
file_exclude_patterns或folder_exclude_patterns配置项可能过滤掉了目标文件,比如"*.log"会让日志文件直接不出现在结果里 - 没关
index_files:大项目里它会卡住甚至崩溃,务必在Preferences → Settings里加"index_files": false - 搜索结果列表里点击某条跳转后,焦点回到文件里,此时
Replace All只对当前文件生效——必须确保焦点还在查找面板里再点
删空行、改引号、重命名变量:三个高频场景的可靠写法
别抄网上万能正则,Sublime 的 Boost regex 引擎不支持 ? 这类高级断言,以下写法经实测稳定:
- 删纯空行(含空格和 Tab):
^[ ]*$→ 替换为空;别用^s*$,s会吞掉导致文件末尾错乱 - 双引号变单引号(基础安全版):
"([^"]*)"→'$1';若字符串含转义引号("He said "hi""),升级为"((?:[^"\]|\.)*)" - 下划线转驼峰(
user_name→userName):([a-z]+)_([a-z])([a-z]*)→$1u$2$3;u是 Sublime 特有转义,把下一个字符转大写 - 删掉独立的
console.log行(不碰字符串和注释内):^s*console.log([^)]*);s*$→ 留空;^和$锁定整行,.转义点号防误匹配
最易被忽略的是:所有 Replace All 操作不可撤销,Ctrl+Z 仅对当前文件有效。每次执行前,先 git commit,再 Find All 看右下角数字是否合理——数字异常大,立刻停手检查 Where 和正则边界。











