sublime text 原生不支持 snake_case → pascalcase 转换,需依赖插件(如 text pastry 分三步处理)、正则替换(有局限)或 python 构建系统(最可靠)。

Sublime Text 原生不支持 snake_case → PascalCase 的一键转换,所谓“大驼峰命名”功能全是插件或外部脚本提供的,且多数默认只做 camelCase(小驼峰),不会自动让首字母大写。
Ctrl+Shift+U 只能转全大写,不能直接生成 PascalCase
这个快捷键本质是「当前选中内容整体转大写」,对 user_name_input 执行后变成 USER_NAME_INPUT,完全不是目标结果。它不识别分词边界,也不做首字母保留、其余小写等逻辑。
- 适用场景:临时统一变量名大小写、批量改宏定义(如
MAX_SIZE→MAX_SIZE本身就不变) - 误用风险:对含数字或缩写的字符串(如
http_status_code、user_id_2)毫无意义,反而破坏可读性 - 替代方案:必须先分词(按
_或-拆开),再逐词capitalize(),最后合并——这步原生做不到
Text Pastry 分词 + 首字母大写是最稳的手动流程
这是目前在 Sublime 中可控性最高、不依赖正则黑盒、适合批量处理的方式。核心是把「转换」拆成三步人工可验证的操作。
- 安装插件:
Package Control → Install Package → Text Pastry - 选中目标文本(如
api_response_data),按Ctrl+Shift+P输入Text Pastry: Split on,回车后输入_ - 此时光标停在每个单词开头(
api、response、data),按Ctrl+Shift+U—— 这次才真正让每个词首字母大写 - 再执行
Text Pastry: Join lines合并为单行,得到ApiResponseData - 注意:遇到
user_id_2会拆成user、id、2,第3个光标停在数字上,Ctrl+Shift+U无效,需手动跳过或补字母
正则替换 (? 仅适用于纯英文无数字场景
这个表达式能在 Find → Replace 中实现「下划线/短横后紧跟的字母转大写」,但它有硬性限制,不是万能公式。
- 匹配原理:
(? 排除行首,<code>(?:_|-)匹配分隔符但不捕获,(\w)捕获紧随其后的字母或数字,\U$1把捕获内容转大写 - 能正确处理:
file_path→filePath(小驼峰)或File_Path→FilePath(大驼峰,前提是首词已大写) - 会出错的情况:
http_status_code→httpStatusCode(http没被处理,因前面没分隔符);user_id_2→userId2(数字也被转大写,但实际无效) - 执行前必须勾选
Regular Expression和In Selection,否则匹配整个文件
Python 构建系统才是真·可靠方案
如果你频繁处理命名转换,写一个 Python 脚本比折腾插件更省心。Sublime 的构建系统能直接调用 Python,还能保留光标位置、支持中文路径。
- 新建
PascalCase.sublime-build,存到Packages/User/目录:
{
"shell_cmd": "python3 -c \"import sys; s = sys.argv[1]; print(''.join(x.capitalize() for x in s.replace('-', '_').split('_')));\" \"$SELECTION\"",
"selector": "text.plain"
}
user_name_input → Ctrl+Shift+B → 选择该构建系统 → 输出面板显示 UserNameInput
s.replace('-', '_') 统一分隔符,split('_') 确保空字符串不进列表(如 __name 不会生成空项),x.capitalize() 安全处理首字母大写+其余小写python3 不在 PATH,需改成绝对路径,例如 C:/Users/xxx/AppData/Local/Programs/Python/Python311/python.exe
真正容易被忽略的是:所有方案都假设输入是合法标识符。如果原始文本含空格、中文、特殊符号(如 user name-input),必须先人工清理,否则分词逻辑直接崩掉。











