sublime text多行排序严格按sort_lines命令执行:ctrl+f9/cmd+f9对选中行按首非空白字符ascii值升序排,未选中则整文件排序;选区须含换行符、避空行、注意大小写优先级。

Sublime Text 的多行排序不是“智能整理”,而是严格按 sort_lines 命令的机械规则执行——选错区域、忽略大小写或混用空格,结果就不可信。
为什么 Ctrl+F9 没反应或排得乱?
根本不是快捷键失效,是 sort_lines 对选区有硬性要求:
- 只点了一下光标、没拖选 → 它对整个文件排序,极易误操作
- 只框选了单词中间几列(比如只选中 “log” 而非整行)→ 不被识别为多行,命令静默失败
- 选区末尾没包含最后一行的换行符 → 最后一行被完全跳过
- 某行开头全是空格或
\t→ 它跳过空白,拿后面第一个可见字符比较;整行只有空格 → 该行排到最前面
如何让字母排序真正按你预期工作?
sort_lines 默认按首非空白字符的 ASCII 值排序,大写字母(A–Z)永远排在小写字母(a–z)前面。这意味着 Banana 一定在 apple 前面——这不是 bug,是设计。
- 要忽略大小写:先按
Ctrl+K,Ctrl+L全转小写,再按Ctrl+F9 - 想用自然序(如
log2在log10前):必须装插件Natural Sort,命令面板输Natural Sort: Sort Ascending - 数字字符串(
10.txt,2.txt)默认按字符比:12,所以10.txt排前面;数值排序需插件Sort Numbers
去重和降序为什么不能跳步?
Remove Duplicate Lines(Ctrl+Shift+U)和 reverse 都依赖前置状态,跳步等于白做:
- 去重前不排序 → 只删连续重复行(
apple,banana,apple不会被去重) - 降序没原生一键:必须先
Ctrl+F9升序 → 全选 → 再按Ctrl+Alt+R(Win/Linux)或Cmd+Option+R(macOS)反转 - 若常需降序,建议手动加键位绑定:
[{"keys": ["ctrl+shift+f9"], "command": "sort_lines", "args": {"reverse": true}}]
按行长度或自定义规则排序怎么办?
Sublime Text 没有内置按长度、中文字符数或正则提取值排序的功能。
- 按行长度:装插件
SortByLength,选中后命令面板输Sort by length;注意它按 UTF-8 字节数算,一个中文通常是 3 字节 - 按正则匹配内容排序(如提取 IP、日期):需用
RegReplace或Text Pastry配合前缀/后缀 + 字典序排序,再清理,步骤多且易出错 - 复杂需求(如去重+忽略大小写+数值升序)建议导出到 Python 处理:
sorted(lines, key=lambda x: int(re.search(r'\d+', x).group()))
真正决定排序是否可靠,是你按下 Ctrl+F9 前,有没有确认:这一行的“第一个非空白字符”是不是你真正在意的排序依据,空格要不要保留,大小写是否已统一,重复项是否真的相同——这些细节不检查,再快的快捷键也救不了结果。











