sublime中“代码块移动”实为多行移动配合折叠,ctrl+shift+↑/↓插入整行(非交换),鼠标拖行首空白区最可靠,复制多行须用ctrl+l加选后ctrl+c,所有操作均不自动调整缩进。

Sublime 里没有原生的「代码块」移动,只有「行」移动;所谓“移动代码块”,本质是移动多行、配合折叠或插件实现的视觉效果。别被“块”字带偏,先搞清底层逻辑。
Ctrl+Shift+↑/↓ 是移动行,不是交换行
默认快捷键 Ctrl+Shift+↑(Windows/Linux)或 Cmd+Shift+↑(macOS)调用的是 move_line_up 命令——它把当前行(或选区)插入到上一行上方,原位置留空,其他行自动让位。这不是 swap_line_up(相邻交换),后者按两次就回原位,不适合重构。
- 光标在第7行按一次
Ctrl+Shift+↑→ 第7行跑到第6行上方,原第6行变成第7行 - 选中第3–5行后按 → 整个块插入到第2行上方,不破坏内部顺序
- 如果快捷键没反应,大概率是输入法(搜狗/微软拼音)劫持了
Ctrl+Shift+↑,切英文再试 - Vintage 插件开启时,Normal 模式下该组合键会被吞掉,临时按
i进 Insert 模式再操作
想移 if 块、函数体?得靠折叠 + 行移动
Sublime 不识别语法块,只认物理行。要移动一个缩进对齐的 if 块或函数,必须先折叠再拖标题行:
- 把光标放在
if行或函数首行,按Ctrl+Shift+[折叠(依赖语言语法定义的fold_rules,Python/JS 支持好) - 此时只剩一行折叠标题(如
if condition: {...}),用Ctrl+Shift+↓把它移到目标位置 - 按
Ctrl+Shift+]展开,整块代码就跟着过去了 - 注意:折叠失败常见于自定义语言或语法高亮未加载,可检查
View → Syntax是否正确
复制代码块别用 Ctrl+Shift+D,用 Ctrl+L + Ctrl+C
Ctrl+Shift+D 是 duplicate_line,它只是在下方克隆,不进剪贴板,也不能跨文件粘贴。真正复制多行内容到系统剪贴板,流程必须是:
- 光标在目标行,连按
Ctrl+L累加选中连续多行(第一次选本行,第二次加下一行……) - 选好后按
Ctrl+C,内容含换行符,粘贴到微信、另一个编辑器或终端都结构完整 - 若要复制不连续的多行:按住
Alt(Win/Linux)或Cmd(macOS)垂直拖选行首 → 松开后立刻按Ctrl+L扩展为整行选中 → 再Ctrl+C - 误用
Ctrl+Shift+D复制多行会导致行数翻倍,且无法粘贴到 Sublime 外部
鼠标拖拽行首空白区是最直观的插入式移动
比快捷键更可靠、更精准的方式是鼠标拖拽——它天然支持跳过10行插入,不受相邻限制,也绕开所有快捷键冲突:
- 把光标移到行号右侧、代码左侧的灰白空白区,鼠标变成小手图标 ✋ 后按住左键
- 拖到目标行上方松手 → 插入到该行之前;拖到下方松手 → 插入到该行之后
- 拖动时会出现粗横线指示插入位置,视觉反馈直接
- 必须在行首空白区触发,如果光标在代码内或行尾空白处拖,会变成文本选择或复制,不是移动
- 拖完缩进不变,跨作用域移动后需手动按
Ctrl+[或Ctrl+]调整层级
最易被忽略的一点:所有行移动操作都不重排缩进、不校验语法、不感知作用域。你把一个缩进4空格的 for 块拖到文件顶部,它还是顶格4空格——这不是 bug,是设计。重构时得随时准备补一手格式化或手动缩进调整。











