Sublime Text 无内置按行长度排序功能,需用 SortByLength 插件(支持升/降序)或通过“加长度前缀→字典序排序→删前缀”三步原生实现,但后者易出错且不推荐超500行时使用。

Sublime Text 没有内置按行长度排序的功能
Sublime Text 本身不提供「按每行字符数升序/降序排列」的原生命令。你看到的「Sort Lines」菜单项只按字典序排,不是按 len(line) 排。想实现这个效果,必须借助插件或手动走通一条可复用的路径。
用 SortByLength 插件最省事(但得装)
社区有个轻量插件叫 SortByLength,专干这事。它会把光标选中的多行,按实际字符数(不含换行符)重新排序,支持升序和降序切换。
- 安装方式:通过 Package Control →
Install Package→ 搜SortByLength,回车安装 - 使用前先选中要排序的文本块(整文件可全选
Ctrl+A),再按Ctrl+Shift+P调出命令面板,输入Sort by length,选中执行 - 默认是升序(短行在前),如果想降序,得改插件绑定的快捷键,或在命令面板里找带
reverse的变体(部分版本提供) - 注意:该插件对含制表符
\t的行按原始字节数算,不是视觉宽度;中文字符、emoji 都按 UTF-8 字节数计(比如一个中文通常是 3 字节),不是“字符个数”
不用插件?用正则 + 列编辑 + 排序三步硬刚
如果你不能装插件(比如公司锁死插件目录),或者就临时排一次,可以用 Sublime 原生能力组合实现,本质是「加长度前缀 → 字典序排序 → 删前缀」。
- 第一步:给每行开头插入长度数字,用正则替换 —— 查找
^,替换为$0{len}不行,得用 Python API 或手动;更稳的是:先用列编辑(鼠标按Alt拖选首列)输入占位符如000,再用正则批量替换成真实长度(需写小脚本,不推荐) - 第二步:更可行的路是复制到外部工具处理,比如粘贴进 VS Code / Python REPL,用
sorted(lines, key=len),再拷回来 - 第三步:如果坚持纯 Sublime,可用「Column Selection」+「Sort Lines」配合人工补零对齐(例如所有行前补 3 位数字,不足左补零),再按前缀排序,最后删掉前缀——但超过百行极易出错
- 性能提醒:超过 500 行时,手动加前缀+删前缀容易漏行或错位,不如导出用
sort -n -k1,1(Linux/macOS)或 PowerShell 的Sort-Object { $_.Length }
别被「Sort Lines」误导,它根本不管长度
很多人点开 Edit → Sort Lines 就以为能按长度排,结果发现「aaa」排在「z」前面、「你好」跑到了「a」后面。这是因为 Sort Lines 对 ASCII 字符按码值排,对 Unicode 是按 UTF-16 代理对或实现相关顺序排,完全不看 len()。
- 常见错误现象:
Sort Lines后中文行乱序、空格行跑到最前、带 emoji 的行位置飘忽 - 真正生效的排序依据只有字符串本身的字节/码点序列,和视觉长度无关
- 如果你误启用了
Case sensitive或Reverse,会让结果更难理解,建议排序前确认状态栏右下角没亮起这些开关

















