Sublime Text 原生支持 Ctrl+Shift+↑/↓(Windows/Linux)或 Cmd+Shift+↑/↓(macOS)拖动整行上下移动;常见无效原因是系统快捷键或输入法劫持,需关闭输入法并检查 Key Bindings 中是否启用 swap_line_up 或 move_line_up 命令。

Sublime Text 里直接拖动整行上下移动,用 Ctrl+Shift+↑ 或 Ctrl+Shift+↓(Windows/Linux),macOS 是 Cmd+Shift+↑ / Cmd+Shift+↓ —— 这不是插件功能,是原生支持,但很多人按错组合键导致没反应。
为什么快捷键没反应?常见配置冲突
最常踩的坑是系统级快捷键或输入法劫持了 Ctrl+Shift+↑。比如 Windows 的多桌面切换、某些输入法的中英文切换快捷键会吃掉这个组合;macOS 上部分触控板手势或 Alfred 等工具也可能拦截。
- 先关掉输入法(特别是搜狗、百度、Rime),切到纯英文状态再试
- 在 Sublime 里打开
Preferences → Key Bindings,搜索"move_line",确认存在类似这样的绑定:[{"keys": ["ctrl+shift+up"], "command": "swap_line_up"}] - 如果被注释掉或缺失,手动加一行(注意逗号分隔和 JSON 格式)
swap_line_up 和 move_line_up 的区别
Sublime 默认绑定的是 swap_line_up,它把当前行和上一行“交换位置”;而 move_line_up 是把当前行“剪切后插入到上一行上方”,行为更接近 VS Code 或 PyCharm 的“移动行”。两者视觉效果一样,但底层逻辑不同:
-
swap_line_up:不改变剪贴板内容,适合快速调整顺序 -
move_line_up:实际执行剪切 + 粘贴,会覆盖剪贴板历史(如果你刚复制过东西,就丢了) - 想改用
move_line_up,只需把 key bindings 里的"swap_line_up"换成"move_line_up"
多行同时移动怎么操作?
选中多行(鼠标拖选、Ctrl+L 逐行选、或 Ctrl+Shift+L 拆分光标)后,再按 Ctrl+Shift+↑,整个选区会一起上移——但要注意:如果选区跨度过大(比如从第 1 行选到第 100 行),移动后可能触发自动换行或折叠区域错位。
- 推荐一次只移动 5–10 行,避免布局意外跳变
- 如果文件启用了代码折叠(folding),移动行可能让折叠状态失效,需要手动重新折叠
- 移动后光标默认停在第一行首,不是你原来光标的位置
真正容易被忽略的是:这些快捷键对「空行」和「只有缩进的行」同样生效,但视觉上几乎看不出变化——有时候你以为没动,其实是动了,只是前后都是空行。