sublime text中“多行首尾互换”即行序整体反转,应使用permute lines → reverse命令,而非ctrl+shift+↑/↓(仅交换相邻行);需正确选中含换行符的完整行范围,且该操作只改变行序,不处理行内字符。

Sublime Text 里“多行首尾互换”就是行序反转,直接用 Permute Lines → Reverse,不是字符串反转,也不是交换相邻两行。
为什么不能用 Ctrl+Shift+↑/↓?
那是 swap_line_up / swap_line_down 命令,只交换当前行和紧邻行——想把第1行挪到最后一行,得按 N−1 次,效率低还容易数错。而“首尾互换”是整体翻转:第1行变最后一行,第2行变倒数第二行……这是批量操作,不是逐对交换。
- 快捷键
Ctrl+Shift+↑/↓(Windows/Linux)或Cmd+Shift+↑/↓(macOS)只作用于相邻行,不适用于跨距大的顺序重排 - 如果选中了多行再按这个快捷键,Sublime 会把整个选区当作一个块,和上下相邻的单行交换,不是内部翻转
- 常见误操作:先全选再狂按
Ctrl+Shift+↓,结果发现第1行卡在中间不动——因为每次都是和“下方那一行”交换,不是往下“沉到底”
正确做法:用 Permute Lines → Reverse
这是 Sublime 原生支持的行序反转功能,稳定、无副作用、支持 Unicode 和空行。
- 确保你已选中目标行(鼠标拖选,或
Ctrl+L选中整行后Shift+Ctrl+L扩展多行) - 菜单路径:
Edit → Permute Lines → Reverse - 快捷键:没有默认绑定,但可手动加——打开
Preferences → Key Bindings,添加:
[
{ "keys": ["ctrl+alt+r"], "command": "permute_lines", "args": {"operation": "reverse"} }
]
注意:permute_lines 命令必须带 {"operation": "reverse"} 参数,光写 "command": "permute_lines" 不生效。
选区边界决定结果,空行和换行符很关键
Permute Lines → Reverse 对选区非常敏感,不是“看屏幕显示”,而是严格按字符位置判断。
- 如果选区末尾没包含最后一行的换行符(
\n),那最后一行会被忽略——看起来像“少翻了一行” - 选中时最好从第一行行首拖到最后一行行尾(含换行符),或用
Ctrl+Shift+Right扩展到行末再Shift+Down向下选行 - 空行会被保留位置:比如
a\n\nb(a 和 b 之间有一个空行),反转后是b\n\na,不是b\na - 如果某行开头全是空格或 tab,
permute_lines仍将其视为有效行,参与反转;但sort_lines会跳过空白取首个可见字符——别混用逻辑
别和字符串反转搞混
有人搜“首尾互换”时实际想要的是每行内字符倒序(如 abc → cba),这不是 Permute Lines 干的事。
-
Permute Lines → Reverse只动行位置,不动行内字符 - 要字符级反转,得自己写插件调
text[::-1],或装社区插件ReverseString - 混合需求(行序反转 + 每行字符反转)必须分两步:先
permute_lines,再对全部选区执行字符反转命令——不能靠一个操作完成
真正容易被忽略的点是:反转操作不可逆地依赖选区起止位置,而 Sublime 的选区可视化并不显示换行符。一次没翻全,往往是因为最后那个 \n 没框进去,而不是命令失效。











