Sublime全局搜索需先限定范围再人工校验:必须用Where过滤路径(如src//*.js,!node_modules/),搭配\b单词边界正则(如\buser_id\b),逐条检查右侧预览,替换后反向验证并提交Git备份。

全局搜索不是“搜完就替”,而是“先看清再动手”——Sublime 的 Ctrl+Shift+F 本质是快速索引 + 人工校验,不是语义重构工具。
用 Ctrl+Shift+F 做项目级查找前必须加 Where 范围限定
留空 Where 或只填 . 会扫整个磁盘路径,极可能误改 node_modules、dist、build 甚至配置文件里的字符串。不加限制的全局替换等于主动制造回滚事故。
- 安全写法示例:
src/**/*.js, !node_modules/**, !dist/**, !*.min.js - 想只查 TypeScript 文件?写成:
**/*.ts, !**/node_modules/** - 若项目已保存为
.sublime-project,直接填<project>最稳,它自动读取folders和file_exclude_patterns - 别信“当前项目”默认值——Sublime 不自动识别你心里想的“项目”,必须显式添加文件夹并保存项目
\b 是跨文件重命名时唯一能靠得住的边界符
正则里不加 \b,user_id 会匹配到 api_user_id、"user_id"、// user_id is legacy——Sublime 不管你是声明、调用、字符串还是注释,它只认字面量。
- 正确查找模式:
\buser_id\b(\b匹配单词边界,跳过子串和引号包裹) - 变量含特殊字符必须转义:
\$data\b(PHP)、api\$\b(JS 中的api$) - 下划线默认是 word separator,
api_v2双击只选中api;临时解决:用\bapi_v2\b替代双击选中 - 大小写混用(如
UserId和user_id)?先勾选Case sensitive,否则会漏
每次点 Replace All 前,必须点 Find All 并逐条检查右侧边栏
右侧边栏列出的每一项都带文件路径、行号和上下文预览,这是你最后一次人工干预机会。跳过这步,等于把判断权交给正则引擎——而它根本不懂 JS 的 const 声明、TS 的类型注解或 HTML 中的属性值。
- 看到某行是
"user_id": "123"?立刻停手,调整正则为(?(排除引号内) - 发现匹配在
/* user_id deprecated */里?说明范围太宽,应加Where: src/**/api/*.js缩小目录 - 有匹配出现在
import { user_id } from?确认是否真要改导入名,还是只需改内部使用 - 预览里出现 50+ 条?别硬顶,分批处理:先限定
Where: src/utils/**/*.js,再扩到src/services
替换后必须用原字符串反向搜索验证是否真改干净
你以为全替完了,但 Sublime 不会告诉你 user_id 还藏在 package.json 的 scripts 字段里、或被某个插件模板硬编码在 HTML 注释中。重构没闭环,等于白干。
- 执行完
Replace All后,立刻用原字符串再搜一遍:Ctrl+Shift+F→Find填user_id→Where保持一致 → 看是否还有命中 - 有残留?说明当初的正则或范围不够全,补上新路径或新正则再跑一次
- Git 是你的最后一道保险:替换前
git add -A && git commit -m "prep rename user_id",出错直接git reset --hard - 特别注意:某些文件类型(如 JSON、HTML、MD)默认不被
**/*.js包含,得单独加进Where或用**/*.{js,ts,json,html}


















