Sublime Text 不支持语义化重命名,仅提供带防护的文本替换;最安全做法是逐处确认修改。Ctrl+D 增量选中相同单词(区分大小写、不跨上下文),Alt+F3 全选但默认开启全词匹配和大小写敏感,跨文件重命名须用 \b 正则加路径过滤,并人工验证引用一致性。

Sublime Text 无法真正“语义化重命名变量”,所有批量操作本质都是带防护的文本替换;最安全的做法不是追求“全选”,而是先确认每一处该不该改。
Ctrl+D 是增量选中,不是全选
很多人按着 Ctrl+D 一直点,以为能扫完整个文件,结果漏掉几处、卡在注释里、甚至把 user_id 中的 user 单独揪出来——这不是 bug,是它本来的设计:只从当前光标位置开始,向下线性找下一个**完全相同的词**(含大小写、空格、标点),不回溯、不跳过字符串、也不识别语法上下文。
- 第一次按
Ctrl+D:必须确保光标落在目标单词内部(比如api_timeout的任意一个字母上),否则无反应 - 第二次起每按一次:追加下一个匹配项,顺序严格按文档中出现位置
- 想跳过某处(比如 JSON 字符串里的
"user_id"):按Ctrl+K再按Ctrl+D,不是连按,要松开再按 - 选多了?按
Ctrl+U撤销上一次添加,比狂按Esc精准得多
Alt+F3 才是真·全选,但默认启用 Whole Word 和 Match Case
Alt+F3(Windows/Linux)或 Ctrl+Cmd+G(macOS)会一次性为当前光标下单词的所有匹配位置创建光标,但它有个硬前提:光标必须落在目标词的任意一个字母上,不能悬在空格或符号后。而且它默认开启 Whole Word 和 Match Case,所以:
-
api_timeout不会匹配api_timeout_v2或Api_Timeout - 如果想忽略大小写,得先按
Ctrl+Alt+U切换大小写开关 - 如果想匹配子串(比如所有含
id的变量),得先按Alt+W关掉Whole Word - 风险点很明确:它不区分作用域——注释、字符串、JSON 值里的相同文本全会被拉进来
跨文件重命名必须用 \b 正则 + 路径过滤
直接搜 user_id 会误改 "user_id": "abc"、my_user_id、甚至文件名;真正安全的底线是 \buser_id\b,因为 \b 匹配的是字母/数字/下划线与非这些字符之间的位置,不是空格本身。
- 变量含特殊字符必须转义:PHP 的
$user_id要写成\$user_id\b;JS 中的api$要写成api\$(否则$被当行尾锚点) - 在
Ctrl+H或Ctrl+Shift+F中启用正则(点左下角.*图标或按Alt+R) -
Where栏必须填路径过滤,例如./src/**/*.js或!node_modules/**,否则Replace All是全局暴力替换 - 执行前一定点
Find All预览所有匹配项——重点检查是否命中引号内、注释、正则字面量(如/user_id/g)
重命名后必须人工验证引用一致性
Sublime 不解析 AST,改完变量名不会自动更新 import 名、解构名、TypeScript interface 字段名,也不会跳过动态拼接的变量(如 var key = 'user_' + suffix)。这意味着:
- 改完立刻运行静态检查:
npx eslint . --fix(JS)、pylint或mypy(Python) - 特别注意解构赋值、对象展开、
eval或Function构造函数中的引用 - 如果变量作用域分散、跨文件频繁、或项目已较大,别硬扛——这类场景 Sublime 天然不适合,该换 VS Code 或 PyCharm


















