Sublime Text 的 sort_lines 命令按行首非空白字符的 ASCII 值纯字符串排序,非智能排序;常见错误源于选区不当,如未选中换行符致漏行、全空行排最前;大小写与数字排序“反直觉”属设计使然;去重需先排序再执行 Unique;降序须先升序后 Reverse;忽略大小写需转小写或装插件。

Sublime Text 的 sort_lines 命令不是“智能排序工具”,它只按每行首非空白字符的 ASCII 值做纯字符串比较——理解这点,才能避开 90% 的排序翻车。
为什么 Ctrl+F9 没反应或排错了?
常见错误不是快捷键失效,而是选区没选对:
- 只点了一下光标、没拖选任何文本 →
sort_lines会作用于**整个文件**,极易误操作 - 只选中某几列(比如只框住单词部分,没包含行尾换行符)→ Sublime 不识别为“多行”,命令静默失败
- 选中区域跨行但末尾没包含最后一行的换行符 → 最后一行被忽略,排序结果错位
- 行首全是空格或制表符 → 它跳过空白后取第一个可见字符;若整行只有空格,该行会被排到最前面
大小写和数字排序为什么“反直觉”?
这不是 bug,是 sort_lines 的设计行为:
- 大写字母 A–Z 的 ASCII 值(65–90)小于小写字母 a–z(97–122),所以
Banana一定排在apple前面 - 数字字符串按字符逐位比:
10.txt首字符是'1'(ASCII 49),2.txt首字符是'2'(50),因此10.txt排在2.txt前面 - 想让
log1.txt、log2.txt、log10.txt正常排序,要么手动补零(log01.txt),要么装插件Sort Numbers,命令面板输Sort Numbers: Sort Ascending
去重(Remove Duplicate Lines)为什么删不干净?
Sublime 的 Remove Duplicate Lines 等价于 Unix 的 uniq,只删**连续重复行**:
- 原始数据是
apple、banana、apple、cherry→ 直接去重后仍是四行,第二个apple不会被删 - 正确流程必须是:先
Ctrl+F9升序 → 再全选已排序块 → 执行Ctrl+Shift+U(或Edit → Permute Lines → Unique) - 如果含大小写混用重复项(如
Apple和apple),得先统一格式:Ctrl+K, Ctrl+L全转小写,再排序去重
如何可靠实现降序或忽略大小写?
原生菜单里的 Sort Lines (Z-A) 在当前主流版本(2026 年)已移除,别再找:
- 降序唯一可靠路径:先
Ctrl+F9升序 → 全选结果 →Ctrl+Alt+R(Win/Linux)或Cmd+Option+R(macOS)执行reverse -
Ctrl+Alt+R是Edit → Permute Lines → Reverse,不是去重命令,按错不会删数据,但若在乱序状态下执行,结果仍是乱序 - 忽略大小写排序无原生一键方式,临时解法:先
Ctrl+K, Ctrl+L转小写,再Ctrl+F9;长期建议装插件Sort Lines,命令面板输Sort Lines: Case Insensitive - 高频使用降序?自定义键位:打开
Preferences → Key Bindings,加一条:[{"keys": ["ctrl+shift+f9"], "command": "sort_lines", "args": {"reverse": true}}]
真正容易被忽略的是:排序本身不改变行内结构(缩进、空格、注释),但会彻底打乱原始顺序。如果你处理的是带语义的代码块(比如 CSS 属性、YAML 键值对、带前缀的声明),排序后务必人工核对逻辑是否仍成立——sort_lines 不认识语法,只认字符串。

















