ctrl+shift+↑/↓(windows/linux)或 cmd+shift+↑/↓(macos)是sublime text中唯一原生可靠整行移动快捷键,不依赖选中、不触发交换、不进剪贴板,按即物理位移;但常因输入法、vintage模式、系统热键、代码折叠或命令混淆(swap_line_up vs move_line_up)导致失效。

Ctrl+Shift+↑/↓(Windows/Linux)或 Cmd+Shift+↑/↓(macOS)是唯一可靠、原生支持的整行移动快捷键,不依赖选中、不触发交换、不进剪贴板——按下去就是物理位移。
为什么 Ctrl+Shift+↑ 没反应?先查这三处硬拦截
这不是功能失效,而是快捷键被静默吞掉。常见真实场景有:
- 输入法处于中文状态(尤其 Windows 下搜狗、微软拼音会劫持
Ctrl+Shift+↑作为中英文切换)→ 切到英文输入法再试 - Vintage 插件开启且光标在 Normal 模式 → 按
i切回 Insert 模式,或临时禁用 Vintage 键绑定 - 系统级热键冲突:Windows 的 NVIDIA 控制面板、macOS 的 Mission Control 默认绑定了
Cmd+↑→ 进系统设置关闭「调度中心」或「虚拟桌面」类热键 - 当前行位于折叠区域内部(比如函数已折叠成一行)→ 展开后再操作,否则命令静默失败
swap_line_up 和 move_line_up 不是一回事
Sublime 默认快捷键背后调用的是 swap_line_up 命令,它只做相邻行对调;而 move_line_up 才是真正把当前行“提上来、留空位”的位移操作。但注意:
- 你日常按的
Ctrl+Shift+↑默认绑定的是swap_line_up,不是move_line_up - 如果手动在
Key Bindings – User里把move_line_up绑到这个快捷键,会导致撤销链断裂、光标跳位等异常 - 想实现“插入式上移”(即当前行挪到上一行上方,原位置空出),必须用
Ctrl+L→Ctrl+C→↑→Ctrl+V这套组合,没有单键替代
多行选中和多光标时行为完全不同
选中方式直接决定移动结果:
- 用
Ctrl+L(Win/Linux)或Cmd+L(macOS)连续累加选中多行 → 按Ctrl+Shift+↓后,整块一起下移,保持相对顺序 - 用
Ctrl+Click添加多个离散光标 → 每个光标所在行独立上移一格,可能穿插、错序,不维护逻辑关系 - 光标停在缩进空格里、行中任意位置,
Ctrl+Shift+↑都能识别为“当前行”,无需特意移到行首 - 移动后光标默认落在新行第 1 列,不会保留原列偏移;若目标行更短,光标自动贴到行尾
真正容易被忽略的是:Sublime 的行移动完全不感知代码结构。它不管你是 if 块、函数体还是缩进嵌套,只搬文本行。想动逻辑块,得靠折叠 + 拖拽标题行,或者装 CodeBlockMover 这类插件——原生命令只负责“行”,不负责“块”。











