驼峰转下划线必须用正则,核心模式是([a-z])([A-Z])匹配小写后接大写字母的边界,替换为$1_$2,再统一小写;需预处理连续大写字母如XML→XML_,并注意选区、输入法和只读状态三处静默失败点。

驼峰转下划线必须用正则,([a-z])([A-Z]) 是核心匹配模式
Sublime 原生没有 camelCase → snake_case 的一键命令,靠 Ctrl+K Ctrl+C 或 title_case 都会出错——前者只按空格切分,后者把 XMLHttpRequest 变成 Xmlhttprequest。真正起作用的是正则捕获「小写字母后紧跟大写字母」这个边界点。
操作时选中目标文本(比如 userNameInput),打开替换面板(Ctrl+H),启用正则(点 .* 按钮),填入:
- 查找:
([a-z])([A-Z]) - 替换:
$1_$2
这步把 user 和 Name 之间的拐点识别出来,只在它们之间插下划线,不会碰 iPhone 里的 i 和 P(因为 i 是小写,P 是大写,符合模式),也不会把 XMLParser 拆成 x_m_l_parser(因为 X 前没小写字母,不匹配)。
Ctrl+K Ctrl+L 统一小写前,得先确认开头是否带大写字母
正则替换完是 user_Name_Input 这种中间有下划线、但首字母仍大写的半成品。这时不能直接全选按 Ctrl+K Ctrl+L,否则 User_Name_Input 会变成 user_name_input(正确),但 UserNameInput 会变成 user_name_input(也正确);而 XMLHttpRequest 会先变成 x_m_l_http_request,再小写就真成 x_m_l_http_request 了——它本该是 xml_http_request。
所以得加一步预处理:
- 对含连续大写字母的词(如
XML、HTTP),先手动或用额外正则替换([A-Z]+)([A-Z][a-z])→$1_$2,把XMLHttpRequest变成XML_HttpRequest - 再跑一遍
([a-z])([A-Z])→$1_$2 - 最后统一
Ctrl+K Ctrl+L
注意:Ctrl+K Ctrl+L 必须松开 Ctrl+K 再按 L,连按会触发其他命令;且输入法必须是英文,否则键被系统吞掉。
Case Conversion 插件能绕过正则细节,但对 user_id_2 这类混合命名仍有局限
装了 Case Conversion 插件后,右键菜单里点 To Snake Case 确实快,userId2Field → user_id2_field,数字位置保留,符合多数场景。但它内部仍是基于分隔符切词(_、-、空格),不是语法感知型工具。
这意味着:
-
getURL会被转成get_u_r_l,而不是get_url(插件不识别缩写) -
_privateField开头的下划线会被保留,变成_private_field,不会自动删掉 - 如果文本里混着字符串字面量(如
"userName"),插件也会改,得提前选中纯标识符区域
快捷键 {"keys": ["ctrl+alt+s"],"command":"case_conversion","args": {"to":"snake"} } 可以绑定,但别指望它处理所有边界情况。
容易被忽略的三个静默失败点:选区、输入法、只读状态
正则替换和大小写命令都可能“看起来没反应”,其实只是静默失败:
- 选区为空或全是空白符(空格、换行、制表符)时,
Ctrl+K Ctrl+L不报错也不生效 - 输入法是中文时,
U或L键常被输入法拦截,导致Ctrl+K松手后按了等于没按 - 文件右下角显示
RO(只读)时,所有转换操作都不起作用,界面毫无提示
批量处理前,先确认光标在有效文本上、输入法已切换、文件可写——这三个点卡住的人最多,但文档里几乎从不提。

















