case conversion插件是唯一可靠方案:sublime原生不支持camelcase→snake_case语义转换,必须安装该插件;未安装时所有相关快捷键和菜单命令均无效;装好后通过命令面板执行convert: camelcase to snake_case最稳定,可正确处理缩写、数字及连续大写字母。

Case Conversion 插件是唯一可靠方案
Sublime Text 原生不支持 camelCase → snake_case 的语义转换,所有“多行一键转下划线”的操作都依赖 Case Conversion 插件。没装插件时,按 Ctrl+K Ctrl+C 或右键菜单里的 “Convert: camelCase to snake_case” 都不会响应——这不是快捷键失效,是功能根本不存在。
安装后重启,用命令面板(Ctrl+Shift+P)输入并执行 Convert: camelCase to snake_case 最稳,避免快捷键被其他插件劫持(比如 Vintage 模式会吃掉 Ctrl+K 前缀)。
- 它能正确处理缩写:
XMLParser→xml_parser,不是x_m_l_parser - 数字衔接自然:
userId2Field→user_id2_field,不是user_id_2_field - 连续大写字母整体小写,符合惯例;中文字符或空格会截断处理,只转换后续英文段
正则替换仅适用于简单驼峰词,慎用于多行混合场景
如果临时不能装插件,且确认所有目标词都是纯英文、无数字、无连续大写(如 userName、apiEndpoint),可用正则应急:
打开替换面板(Ctrl+H),勾选 Regular Expression 和 In Selection:
- 查找:
(? - 替换:
_\L$1$2
这个正则能识别大小写边界(如 user 后的 N,或 HTTP 中的 T→P),但遇到 iPhone 会变成 i_phone,userID 变成 u_s_e_r_i_d——它不理解缩写,只靠 ASCII 字符位置切分。
多行同时选中后执行,每行独立处理,不会跨行合并逻辑;若某行含注释或字符串,该行仍会被替换,需提前选中干净区域。
为什么不能直接搜 [A-Z] 加下划线?
常见错误是查找 [A-Z]、替换为 _\L$0,结果把每个大写字母前都硬插下划线:
-
iPhone→_i_phone(开头多下划线 + 错误切分) -
parseJSON→parse_j_s_o_n(完全破坏语义) -
getHTTPResponse→get_h_t_t_p_response(全大写缩写被拆开)
这种写法本质是暴力字符替换,不是命名风格转换。Sublime 的正则引擎不自带词干识别或缩写规则,必须靠更精确的边界断言(?)配合上下文判断。
多光标编辑无法替代语义转换
有人尝试用 Ctrl+D 多次选中每个大写字母,再统一加下划线+小写,这条路走不通:
- 光标落在
userName的U上,Ctrl+K Ctrl+L只会让U小写,不会自动加前面的下划线 - 手动在每个光标前插入
_后,还要逐个删掉原大写字母,再小写后续字母——效率远低于插件一键 - 若某行有
XMLHttpRequest,Ctrl+D会选中全部XML,根本无法区分缩写边界
真正要处理混合命名(如 getHTTPStatus2Code → get_http_status2_code),必须接受:插件负责主干转换,数字和特殊缩写部分往往需要人工核对——这点容易被忽略,但实际改配置或字段名时几乎每次都会遇到。











