sublime text交换两行的快捷键是ctrl+shift+↑/↓(windows/linux)或cmd+shift+↑/↓(macos),按一次即完成相邻行整行对调,光标自动跟随、缩进保留,多行选中时整体交换。

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 对“当前行”的判定只看光标垂直位置,不看是否选中:
- 光标停在第 5 行任意字符上(哪怕只是缩进空格里)→ 触发交换
- 光标在第 1 行开头、或最后一行末尾 → 静默失败(上面/下面没行可换)
- 只选中几个字母(比如 if 两个字符)→ 不触发,也不报错
- 用 Ctrl+L(Windows/Linux)或 Cmd+L(macOS)选中整行 → 一定生效,且支持连续按来累加选中多行
swap_line_up 和 move_line_up 到底谁在干活?
默认快捷键背后调用的是 swap_line_up 命令,不是 move_line_up:
- swap_line_up:真交换,第 5 行和第 4 行内容对调,总行数不变
- move_line_up:真位移,第 5 行提到第 4 行上方,原第 4 行变成第 5 行,中间不留空
- 你日常用的 Ctrl+Shift+↑ 是前者,行为就是“换位置”,不是“插进去”
- 如果你在用户 keymap 里手动绑了 move_line_up 到这个快捷键,就会发现顺序反常、撤销链断裂 —— 这是误配,得改回来
跨行互换怎么办?鼠标拖拽比快捷键更直接
想把第 3 行和第 10 行互换?原生快捷键做不到,因为它是严格相邻交换:
- 用 Ctrl+Click(Windows/Linux)或 Cmd+Click(macOS)点击行号侧边栏,多选不连续行
- 鼠标按住选中区域左侧空白处(不是代码区),拖到目标位置松手
- Sublime 会自动处理缩进对齐和空行逻辑,比连按十几次快捷键靠谱得多
- 注意:拖拽时别松手太快,确保目标位置有明确插入线提示
真正容易被忽略的是:所有这些操作都不校验语法。把一个 return 提前到 if 块外面,Sublime 不会拦,也不会高亮警告——它只搬行,逻辑对不对,得你自己盯。











