Sublime Text 不支持真正自动重命名,仅提供带防护的字符串替换:Ctrl+D 逐次选中同名变量(需手动跳过误匹配),正则 \bxxx\b 跨文件替换须预览确认,RenameSymbol 插件需正确配置 AST 后端及跨文件选项。

Sublime Text 无法实现真正意义上的“代码自动重命名”——它不解析 AST,不识别作用域,也不跟踪变量定义与引用关系。所谓“同步修改变量名”,本质是带防护的字符串替换,必须人工判断、预览、验证。
Ctrl+D 逐次选中是最可控的起点
光标停在目标变量名上(不能带空格或引号),按 Ctrl+D(Windows/Linux)或 Cmd+D(macOS):第一次选中当前词,之后每次按键顺次高亮下一个完全相同的字符串。这个过程不跨行、不进字符串、不碰注释——但前提是变量没被引号包裹(比如 "user_id" 不会被匹配到未加引号的 user_id)。
- 想跳过某个误匹配项?按
Ctrl+K再按Ctrl+D,它会直接跳到下一处 - 选太多收不住?按
Ctrl+U撤销上一次选中 - 全部选完后直接输入新名,所有光标位置同步更新;改完务必按
Esc退出多光标模式,否则后续输入可能批量污染其他行
跨文件批量改名必须用 \bxxx\b 正则 + 手动预览
打开 Ctrl+Shift+F(Find in Files),勾选 Regular Expression(Alt+R),在查找框填 \buser_id\b,替换框填新名。这里的 \b 是单词边界锚点,不是空格,能避开 user_id_list、my_user_id 和 "user_id" 这三类典型误伤场景。
- PHP 变量如
$data要写成\$data\b;JS 中的data$则需转义为data\$(否则$被当行尾符) - 绝对不要点 “Replace All” 前不点 “Find” —— 必须逐行检查右侧侧边栏列出的所有匹配项,确认没有命中 JSON 字符串、HTML 属性值或注释
- Where 栏限定路径,例如
./src/**/*.ts,坚决避开node_modules和dist
插件 RenameSymbol 是唯一接近“自动”的选项,但有硬限制
它依赖 tree-sitter 或 AST 解析后端,不是开箱即用。装好后右键 → LSP: Rename Symbol 或快捷键 Ctrl+Shift+R,会弹出预览列表——但这个列表是否可信,取决于你有没有做对三件事:
- 当前文件语法类型正确:右下角必须显示
JavaScript (Babel)而非默认JavaScript,否则async函数内的变量可能被漏掉 - 项目根目录有
.renamesymbolrc配置,明确指定后端,例如:{"javascript": {"backend": "tree-sitter"}} - 插件设置里关掉
fuzzy_match,否则err可能误匹配到error里的子串
最常被忽略的一点:RenameSymbol 默认只改当前文件。要跨文件生效,必须手动开启 "rename_across_files": true,且语言服务得能索引到其他文件——大型项目里,索引失败时它就退化成普通文本替换,而你未必能立刻察觉。

















