sublime text多行排序严格按sort_lines规则执行:ctrl+f9仅对含换行符的完整选区生效,按首非空白字符ascii值升序排,banana排apple前因b(66)

Sublime 的多行排序不是“点一下就整齐”,而是严格按 sort_lines 命令规则执行——选错区域、忽略大小写优先级、混用空格,结果就不可信。
Ctrl+F9 没反应或排得乱?先看选区对不对
这不是快捷键失效,是 sort_lines 对选区有硬性要求:
- 只点了一下光标、没拖选 → 它对整个文件排序,极易误操作
- 只框选了单词中间几列(比如只选中
log)→ 不被识别为多行,命令静默失败 - 选区末尾没包含最后一行的换行符 → 最后一行被完全跳过
- 某行开头全是空格或
\t→ 它跳过空白,拿后面第一个可见字符比较;整行只有空格 → 该行排到最前面
验证是否选对:右下角状态栏必须显示类似 5 lines,不能只写 5 selections。
为什么 Banana 排在 apple 前面?这是 ASCII 排序的必然结果
sort_lines 只取每行第一个非空白字符,按其 ASCII 值比较:
-
B(66)a(97),所以Banana一定在apple前面 - 数字字符串按字符逐位比:
10.txt首字符是1,2.txt首字符是2,因此10.txt排在2.txt前面 - 空行或全空白行视为最小,永远排最前
想忽略大小写:先按 Ctrl+K, Ctrl+L 全转小写,再按 Ctrl+F9;想数值排序(如 log1/log10):装插件 Sort Numbers,命令面板输 Sort Numbers: Sort Ascending。
去重和降序为什么总失败?顺序不能颠倒
Remove Duplicate Lines(Ctrl+Shift+U)等价于 Unix 的 uniq,只删连续重复行:
- 原始数据是
apple、banana、apple、cherry→ 直接去重后仍是四行 - 正确流程:先
Ctrl+F9升序 → 全选 → 再Ctrl+Shift+U - 若含大小写混用项(如
Apple和apple),得先Ctrl+K, Ctrl+L统一小写
降序没有原生一键:Ctrl+Alt+R(Win/Linux)或 Cmd+Option+R(macOS)只是反转当前顺序,不是重新排序。必须先升序,再反转;否则结果仍是乱序。
按行长度、中文、正则提取值排序怎么办?原生不支持
Sublime 没有内置按长度、中文字符数或正则提取值排序的功能:
- 按行长度:装插件
SortByLength,选中后命令面板输Sort by length;注意它按 UTF-8 字节数算,一个中文通常是 3 字节 - 按中文首字排序:需预处理,例如用正则把
苹果替换为0x82B1\u679C 苹果(GB2312 编码前缀),再Ctrl+F9,之后删前缀 - 按正则匹配字段排序(如日志里的 IP 或时间戳):必须用插件
ColumnSort或导出到 Python 脚本处理
真正容易被忽略的是:所有高级排序都依赖前置状态——没排序就去重,等于白做;没转小写就混排,大小写项永远分家;没补零或装插件就排数字,10 永远在 2 前面。











