Sublime中驼峰转下划线最稳方法是正则匹配小写字母后跟大写字母:查找([a-z])([A-Z]),替换为$1_$2,再统一小写;不可直接匹配[A-Z],否则破坏单词结构。

Sublime里驼峰转下划线,正则替换最稳
原生不支持一键转换,但用正则 + 替换面板 3 秒搞定。关键不是“能不能”,而是“怎么写对正则”。很多人卡在大小写边界判断上,导致 XMLHttpRequest 变成 x_m_l_http_request 或漏掉中间大写字母。
正确做法是匹配「小写字母后跟大写字母」这个组合,而不是单独找大写字母:
- 查找:
([a-z])([A-Z]) - 替换:
$1_$2 - 勾选
.*(启用正则)后点「全部替换」 - 最后再统一转小写:选中结果 →
Ctrl+K+L
这样 userName → user_name,HTTPStatus → http_status,XMLParser → xml_parser。注意:它不会动开头大写的 PascalCase,如需处理,得加一步前置替换 ^([A-Z])([a-z]) → \L$1\E$2。
为什么不能直接搜 [A-Z] 然后加下划线?
因为那样会把每个大写字母前都插下划线,iPhone 变成 _i_phone,parseJSON 变成 parse_j_s_o_n —— 这是常见错误源头。
真正要捕获的是「大小写交界处」,即小写→大写这个拐点。正则 ([a-z])([A-Z]) 捕获两个字符,只在它们之间插入 _,逻辑干净,副作用少。
如果你的文本含数字或下划线混用(如 userId2),建议先人工清理或加边界断言:([a-z0-9])([A-Z]),避免把 2A 也拆开。
批量处理时容易忽略的坑
批量操作不是点一次「全部替换」就完事。以下情况必须手动干预:
-
getURL→get_u_r_l(错):应识别连续大写字母为缩写,需额外规则,比如先替换([A-Z]+)([A-Z][a-z])→$1_$2 - 开头带下划线的变量(如
_privateField):正则默认不处理开头,但转完小写后变成_private_field,下划线保留,符合预期;若想删开头下划线,得另加一步^_+→ 空 - 选区范围没框准:替换前务必确认只选了变量名区域,否则字符串字面量里的
"user_name"也会被改
插件如 Case Conversion 能绕过这些细节,但它内部其实也是封装了类似正则逻辑——知道原理,才能判断什么时候该信插件,什么时候得自己调。
变量重命名别只靠编辑器
Sublime 的替换只是文本层面操作。真正做变量重命名,尤其跨文件、跨作用域时,Ctrl+H 会误改注释、字符串、JSON key 等非标识符位置。这时候必须配合语言服务:
- Python 项目优先用
rope+ Sublime 插件SublimeRope - JS/TS 用
ESLint+js-refactor插件,支持语义化重命名 - Java/C# 建议切到 IDE(IntelliJ/VS)做 Rename,Sublime 只做预处理
文本替换快,但安全重命名慢——这个权衡点,得看你在改的是临时字段,还是要上线的接口字段名。

















