ctrl+shift+↑/↓(win/linux)或cmd+shift+↑/↓(macos)可直接物理移动整行,但需确保输入法为英文、关闭vintage插件冲突、禁用系统级热键;光标须在未选中状态或整行选中才生效;默认调用move_line_up而非swap_line_up;鼠标拖拽行首左侧空白区亦可实现移动。

Ctrl+Shift+↑ 和 Ctrl+Shift+↓(Windows/Linux)或 Cmd+Shift+↑/Cmd+Shift+↓(macOS)就是你要的快捷键——它不走剪贴板,直接物理位移整行,不是交换,也不是复制粘贴。
为什么按了没反应?先查这三处拦截点
这不是功能失效,而是快捷键被静默吞掉:
- 输入法处于中文状态(尤其是搜狗、微软拼音),
Ctrl+Shift+↑被当成中英文切换热键 —— 切到英文再试 - Vintage 插件开着且在 Normal 模式,
Ctrl+Shift+↑被当 Vim 导航键吃掉 —— 临时按i进 Insert 模式,或去Preferences → Key Bindings – User注释掉对应绑定 - 系统级热键冲突:Windows 上 NVIDIA 控制面板、远程桌面工具;macOS 上 Mission Control 默认绑定了
Cmd+↑—— 进系统设置关掉「调度中心」或「多桌面切换」类快捷键
光标在哪才触发移动?只认“完整行上下文”
Sublime 的行移动逻辑极严格,不响应片段选中:
- 光标停在任意位置(未选中任何文本)→ 移动当前行
- 用
Ctrl+L(macOS 是Cmd+L)选中当前行 → 移动该行 - 连按多次
Ctrl+L→ 向下累加选中连续多行,整块移动 - 只选中某一行中间的几个字符 → 不触发,静默失败
- 用
Ctrl+Click添加多个不连续光标 → 不触发,各行不联动
swap_line_up 和 move_line_up 到底该用哪个?
这是最容易踩坑的核心点:swap_line_up 是交换,move_line_up 才是位移。但 Sublime 默认快捷键绑定的是后者,而菜单里显示的 “Swap Line Up” 名称极具误导性:
-
swap_line_up:把第 5 行和第 4 行内容互换,其他行不动;多行选区只作用于首行 -
move_line_up:把第 5 行整个提到第 4 行上方,原第 4 行变成第 5 行 —— 这才是你想要的“移动” - 默认快捷键实际调用的是
move_line_up,不是swap_line_up - 如果你在用户 keymap 里手动绑了
swap_line_up到Ctrl+Shift+↑,就会发现顺序反常、撤销链断裂
鼠标拖拽整行比快捷键更直观
不需要插件,也不怕快捷键冲突,Sublime 原生支持鼠标拖拽整行:
- 把光标移到行首左侧空白区(行号右侧、代码左侧的灰白区域),鼠标变成小手图标 ✋ 后按住左键拖动
- 拖到目标行上方松手 → 插入到那一行之前;拖到下方松手 → 插入到那一行之后
- 拖动过程中会出现一条粗横线指示插入位置,天然支持“跳过 10 行放下去”
- 注意:必须是行首左侧空白处触发;光标在代码内或行尾空白处拖,会变成文本选择或复制,不是移动
if 块移到函数外部,缩进不会自动删减;跨折叠区域移动时,它也不校验语法合法性。它只负责搬行,别的事你得自己兜底。











