Sublime Text中真正移动行的快捷键是Ctrl+Shift+↑/↓(Win/Linux)或Cmd+Shift+↑/↓(macOS),实现物理位移而非交换;swap_line_up/down仅为相邻行交换。

Ctrl+Shift+↑/↓(Win/Linux)或 Cmd+Shift+↑/↓(macOS)是真·移动,不是交换
Sublime Text 原生的 swap_line_up 和 swap_line_down 命令其实是「相邻行交换」,比如第5行按一次 swap_line_up,结果是第4行和第5行对调——连续按两次就回到原位。但你真正需要的「把当前行整体上挪一格,原位置留空、其他行自动补位」,靠的是另一组快捷键:Ctrl+Shift+↑/Ctrl+Shift+↓(Windows/Linux),或 Cmd+Shift+↑/Cmd+Shift+↓(macOS)。这组才是物理位移,不依赖选中状态,光标在哪一行,就动哪一行。
- 选中多行后使用,整块一起上/下平移(不是逐行交换)
- 不改变缩进,也不重排语法结构——它只搬文本行,不做语义判断
- 移动后光标停在新位置的第1列,不会保持原列偏移
- 跨行多光标(如
Ctrl+Click多个散点)时,每个光标所在行独立移动,不合并为块
按了没反应?先查这三处硬性拦截点
这不是插件问题,而是 Sublime 原生命令被静默屏蔽。常见原因有:
- 输入法处于中文状态(尤其 Windows 下搜狗、微软拼音会吞掉
Ctrl+Shift+↑)——切英文再试 - Vintage 插件开启且处于 Normal 模式:
Ctrl+Shift+↑被当 Vim 导航键劫持,临时按i切回 Insert 模式,或禁用 Vintage 键绑定 - 系统级热键冲突:Windows 的 NVIDIA 控制面板、macOS 的 Mission Control 默认绑定了
Cmd+↑,需进系统设置关闭「热键切换桌面/调度中心」类选项
别急着重装插件——先打开 Preferences → Key Bindings,搜索 swap_line,确认默认绑定没被覆盖;再检查当前是否在折叠区域内部(整行不可见时操作会静默失败)。
想快速框定多行再移动?用 Ctrl+L(Win/Linux)或 Cmd+L(macOS)累加选中
Ctrl+L 不是「选中当前行」那么简单,它是累加式行选中:第一次按,选中光标所在整行;第二次按,向下扩展选中下一行;第三次按,再加一行……比鼠标拖更准,也避开了部分选中导致命令失效的问题。
- 光标在行中任意位置(哪怕停在缩进空格里),
Ctrl+L都能准确命中逻辑行 - 已有非行级选区(比如只选了几个字符)时,
Ctrl+L会先清空它,再选中当前行 - 选好后直接按
Ctrl+Shift+↓,整块下移——不用反复按方向键
移动后缩进错乱、光标跳到奇怪位置?这是设计使然,不是 bug
Sublime 的行移动不重新格式化代码。它保留原始缩进(包括混用的 Tab 和空格),也不感知嵌套结构。比如把一个缩进为 4 空格的 if 块移到函数外部,缩进不会自动删减,视觉上“错位”是正常结果。
- 需要同步调整缩进,得额外按
Ctrl+[(左缩进)或Ctrl+](右缩进) - 多行选区移动后,所有光标合并为一个,不再维持原来的多光标结构
-
Ctrl+Z可完美撤销,但Ctrl+Y重做有时失效——别依赖重做链
最易被忽略的细节是:它对「选区完整性」极其敏感。只选中半行字符,命令就不触发;光标在折叠行内但该行不可见,操作就静默失败。这些边界条件不报错、不提示,只能靠操作习惯去适配。

















