sublime text 中真正移动整行的快捷键是 ctrl+shift+↑/↓(win/linux)或 cmd+shift+↑/↓(macos),实现物理位移而非交换,不依赖选中状态,缩进原样保留,但可能被输入法、vintage 插件或系统热键拦截。

Sublime Text 里移动行根本不用碰剪贴板,原生命令就能直接搬动整行——但很多人按了没反应,不是功能坏了,是快捷键被系统、输入法或插件悄悄截胡了。
Ctrl+Shift+↑/↓(Win/Linux)或 Cmd+Shift+↑/↓(macOS)才是真·移动
这组快捷键干的是「物理位移」:光标在哪一行,就把它整体上挪或下挪一格,原位置留空,其他行自动补位。它不交换、不依赖选中状态,哪怕光标停在缩进空格里也认得清是哪一行。
- 选中多行后按,整个块一起平移,不是逐行交换
- 跨行多光标(比如 Ctrl+Click 几个散点)时,每个光标所在行独立移动
- 移动后光标落在新行第 1 列,不会保持原列偏移
- 缩进原样保留,Tab 和空格混用也不重排——它只搬文本,不管语义
swap_line_up/down 是交换,不是移动
swap_line_up 和 swap_line_down 是 Sublime 原生命令名,但名字有误导性:它们只做相邻行互换。比如第 5 行按一次 swap_line_up,结果是第 4 行和第 5 行对调;再按一次,又回原位。
- 适用场景:快速修正 if 条件顺序、调整 import 行位置
- 不适用场景:想把第 10 行直接塞到第 2 行上方——得连按多次,或换别的法子
- 多行选中时,是整块和上下对应行块交换,不是“推着走”
按了没反应?先查这三处硬拦截点
这不是插件问题,而是快捷键被静默屏蔽。常见原因:
- 输入法处于中文状态(尤其 Windows 下搜狗、微软拼音会吞掉
Ctrl+Shift+↑)——切英文再试 - Vintage 插件开启且在 Normal 模式:
Ctrl+Shift+↑被当 Vim 导航键劫持,临时按i切回 Insert 模式 - 系统级热键冲突:Windows 的 NVIDIA 控制面板、macOS 的 Mission Control 默认绑定了
Cmd+↑,需进系统设置关掉「热键切换桌面/调度中心」 - 当前在折叠区域内部(整行不可见),操作会静默失败
想框定多行再移动?用 Ctrl+L / Cmd+L 累加选中
Ctrl+L(Win/Linux)或 Cmd+L(macOS)不是“选中当前行”那么简单,它是累加式行选中:
- 第一次按,选中光标所在整行
- 第二次按,向下扩展选中下一行
- 第三次按,再加一行……比拖鼠标更准,也避开部分选中导致命令失效的问题
- 已有非行级选区(比如只选了几个字符)时,
Ctrl+L会先清空它,再选中当前行
选好后直接按 Ctrl+Shift+↓,整块下移——不用反复按方向键。
真正容易被忽略的是:Sublime 的行移动不感知代码结构。把一个缩进为 4 空格的 if 块移到函数外部,缩进不会自动删减;跨折叠区域移动时,它也不校验语法合法性。这些都不是 bug,是设计选择——它只负责搬行,别的事你得自己兜底。











