sublime text 支持原生行交换快捷键:windows/linux 用 ctrl+shift+↑/↓,macos 用 cmd+shift+↑/↓,整行或连续多行选区可整体上下交换,光标跟随、缩进保留,无需插件,误操作可 ctrl+z 撤销。

用 ctrl+shift+↑ 或 ctrl+shift+↓ 直接交换行
Sublime Text 内置了行级移动快捷键,按住 ctrl+shift+↑(Windows/Linux)或 cmd+shift+↑(macOS),当前整行会和上一行交换位置;同理,ctrl+shift+↓ 与下一行交换。这不是“剪切粘贴模拟”,而是原生行交换,光标自动跟随、缩进保留、多行选中时也按块整体移动。
常见错误现象:有人习惯先 ctrl+x 剪切再 ctrl+v 粘贴,结果缩进错乱、空行增多、光标停在奇怪位置——这本质上是手动操作引入的不确定性。
- 只对“完整行”生效:光标在行中任意位置(哪怕在行首空格里)都算作该行;但若选中了部分文字而非整行,则触发的是“选中内容移动”,不是行交换
- 多行同时交换:选中连续多行后使用快捷键,整个选区会作为一个块与相邻行交换(比如选中第3–5行,按
ctrl+shift+↑,则第1–2行往下挪,第3–5行整体上移) - 不依赖插件:无需安装
Swap Lines或其他扩展,开箱即用
为什么不用 swap_line 命令手动调用?
Sublime 其实提供了 swap_line 命令,可通过控制台 view.run_command("swap_line") 调用,但没必要。它和快捷键背后是同一个命令,只是封装层级不同。手动调用反而绕远路,还容易拼错命令名或漏掉引号。
使用场景:仅当你要把它绑定到自定义快捷键、或集成进宏/插件逻辑里时才需要知道这个命令名;日常重构完全不用碰。
-
swap_line默认向上交换;加参数{"direction": "down"}才向下——但快捷键更直觉,不用记参数 - 性能无差异:底层都是 C++ 实现,响应一样快
- 兼容性稳定:从 Sublime Text 2 到 4,该命令和快捷键行为一致
选中代码块后按快捷键,交换的是“块”不是“行”
这是最容易被忽略的细节:如果你用鼠标或 shift+↑/↓ 选中了从第5行第3列到第7行末尾的一段代码(非整行),此时按 ctrl+shift+↑,Sublime 不会报错,但行为变成“把这段选中内容整体上移一行”,可能跨函数、切断语句、破坏语法结构。
正确做法永远是从行号栏单击(或按 ctrl+L 选中当前行)确保选中的是完整物理行。
-
ctrl+L是关键辅助:按一次选中当前行,再按一次添加下一行到选区,适合精准控制交换范围 - 误操作后立刻
ctrl+Z:交换是原子操作,一次撤销就能回退,不用慌 - 别依赖“看起来像整行”:行尾有空格或注释不影响,但只要没选中换行符,就不算整行
Mac 用户注意 cmd 替代 ctrl,别混用
快捷键映射不是自动适配的。Windows/Linux 用 ctrl+shift+↑,macOS 必须用 cmd+shift+↑。用错组合键时,Sublime 通常没反应,或意外触发系统级功能(比如 macOS 的 Mission Control)。
验证方式很简单:打开命令面板(ctrl+shift+p / cmd+shift+p),输入 “swap”,能看到 Swap Line Up 和 Swap Line Down 两个命令,旁边标注的快捷键就是你系统实际生效的。
- 别改默认键位:虽然可以编辑
Default (OSX).sublime-keymap,但升级后易覆盖,且团队协作时造成认知偏差 - 终端用户常误以为
ctrl在 Mac 上通用——其实只有部分 IDE(如 VS Code)做了跨平台键位模拟,Sublime 没做 - 如果键盘没有
↑键(比如某些紧凑键盘),可用方向键配合fn,但别用数字小键盘的8键替代——它不触发相同事件










