Sublime Text 函数名替换必须用\b正则边界,否则会误替子串、引号内或路径内容;需启用正则模式、转义特殊字符、限定Where范围、逐条验证上下文,并检查动态调用与类型定义。

Sublime Text 无法识别函数调用语义,所有“替换旧版 API 函数名”操作都是带边界的字符串替换;不加 \b、不限定 Where、不预览上下文,大概率把 getUser 替成 getCurrentUser 后,又把 getCurrentUser 二次替成 getCurrentCurrentUser。
为什么 \bget_user_info\b 是底线要求
直接搜 get_user_info 会命中 get_user_info_v2、"get_user_info"、// get_user_info is deprecated,甚至路径里的 /api/get_user_info/。Sublime 的 \b(单词边界)匹配的是字母/数字/下划线与非这些字符之间的位置,天然跳过子串和引号包裹内容。
- 必须点查找面板右下角的
.*按钮启用正则模式,否则\b当普通字符处理 - PHP 变量如
$get_user_info要写成\$get_user_info\b($需转义) - JS 中带点的如
api.getUserInfo,要写成api\.getUserInfo\b(.是通配符,必须转义) - 别依赖 UI 上的
Whole Word开关——它只是视觉兜底,\b才是正则层真实防护
跨文件替换前必须分步验证
Ctrl+Shift+F 的 Replace All 是高危操作,它不区分字符串、注释、正则字面量,也不校验是否在函数调用位置。安全流程只能是手动确认每一条匹配。
-
Where栏必须明确限定,例如./src/**/*.js或!node_modules/**, !dist/**,绝不能留空或只填. - 先点
Find,右侧边栏列出所有匹配项;逐条点击,检查是否在get_user_info(、const x = get_user_info(这类调用上下文中 - 发现
"get_user_info"或// get_user_info?立刻停手,改用更严正则,比如\bget_user_info(?=\s*\()(只匹配后跟括号的) - 若项目含 TS 接口定义(如
get_user_info(): void),需额外确认是否要同步修改类型签名
避免二次污染:怎么防 get_user_info → get_current_user_info → get_current_current_user_info
这是最常被忽略的连锁错误。Sublime 不记录你刚替过什么,也不会跳过已修改行。一旦新名包含旧名,就可能被再次匹配。
- 替换前先用
Ctrl+F搜一遍目标新名(如get_current_user_info),确保它当前不存在于代码中 - 若必须用含旧名的新名(如
getCurrentUserInfo),替换时用\bget_user_info\b→getCurrentUserInfo,完成后立刻再搜get_user_info验证是否清零 - 对 JS/TS 项目,特别注意动态拼接场景:
`${prefix}_user_info`或obj['get_user_info']不会被\b拦住,得人工检查 - 改完务必运行
git diff,扫一眼有没有意外多出来的current_current类型重复
真正麻烦的从来不是怎么写正则,而是改完之后——解构赋值里的 const { get_user_info } = api、TS 接口中 get_user_info(): Promise<User>、还有那些藏在 eval 或模板字符串里的动态调用,它们全都不会被 \b 捕获,也永远不会出现在 Find All 结果里。

















