ctrl+u是软撤销,只倒退光标添加动作(如ctrl+d、ctrl+shift+l、alt+拖动),不撤销编辑内容;若失效,需关闭"drag_text": true。

Ctrl+U 不是撤销编辑,而是撤销光标添加动作;按错或没反应,大概率是 "drag_text": true 拦截了光标链路。
Ctrl+U 是什么,不是什么
它只回退你加光标的操作:比如 Ctrl+D 选中第 3 个变量、Ctrl+Shift+L 把 5 行转成多光标、Alt+鼠标拖动 拉出列选区域——这些都会被 Ctrl+U 按添加时间倒序撤掉。它完全不碰你输的字、删的行、Ctrl+H 替换过的内容,也不影响 Ctrl+Z 的撤销栈。
常见误操作:Ctrl+Z 狂按想撤掉第 5 个误选的 user_id,结果把刚写的函数体也回退了——这不是撤销错,是命令用错了。
-
Ctrl+U每按一次,少一个(组)光标,顺序严格按“谁先加进来” - 先
Ctrl+Click点了两处,再Ctrl+D匹配三处,最后Ctrl+Shift+L拆四行 → 总共 9 个光标,Ctrl+U第一次撤的是那 4 行(最后加的) - 混用
Alt+拖动和Ctrl+D没问题,但Ctrl+U先撤列选,再撤词匹配,不是按视觉位置撤
为什么 Ctrl+U 按了没反应
最常见原因是用户设置里还开着 "drag_text": true。这个配置默认开启,会让 Alt+鼠标拖动 变成拖文本块、Ctrl+Click 被拦截,导致光标根本没成功加进去,自然无可撤销。
解决方法很简单:打开 Preferences → Settings,在右侧用户设置里加上:
"drag_text": false
改完立刻生效,不用重启。之后 Alt+拖动 才能稳定拉出竖直列选,Ctrl+D/Ctrl+U 链路才完整。
- 如果刚切回 Sublime 窗口就发现光标失灵,先按
Esc再试Ctrl+U -
Ctrl+K Ctrl+D(跳过当前匹配)这类动作不进Ctrl+U栈,按到那儿会直接跳到下一个可撤点 - 节奏太密(比如连按 5 次
Ctrl+D)容易退错步,建议每次添加后稍作停顿
Esc 是比 Ctrl+U 更底层的安全键
当你发现方向键一按只剩一个光标、粘贴错位、Ctrl+D 突然失灵,别挣扎,直接按 Esc。它不走历史栈、不依赖焦点、不触发任何副作用,只做一件事:清空所有辅助光标,留下主光标(即最后操作的那个),且完全不影响已输入内容。
Esc 比 Ctrl+U 更快更干净,尤其适合以下场景:
- 多光标已坍缩或位置诡异,
Ctrl+U退不动时 - 刚粘贴完文本、刚切标签页、甚至鼠标点偏触发了折叠,
Esc都立刻生效 - 想彻底重来,又不想丢掉主光标位置
别指望鼠标单击替代:Esc 比点击更可靠,点偏可能选中行号、展开代码块,甚至拖动文本。
方向键会强制归并光标,不是移动所有光标
多光标状态下按 ← 或 ↑,Sublime 不是“把所有光标统一左移一格”,而是让每个光标尝试向该方向走一格。一旦某个光标卡在行首/括号边界,其余光标继续走,错位就发生了;再按一次,大概率直接坍缩成单光标。
这不是 bug,是设计——Sublime 默认把方向键理解为“结束多光标、开始单光标导航”。所以:
- 想安全移动?先按
Esc清掉辅助光标,只留主光标,再用方向键 - 真要批量调位置(比如统一右移 2 列),别用手动方向键,改用正则替换,或
Ctrl+Shift+P→Split Selection into Lines后再处理 - 列选后千万别随手按方向键,哪怕只是想微调,都建议先
Esc再操作
软撤销真正的复杂点不在怎么按,而在于理解它和 Ctrl+Z 是两套完全独立的历史栈,且它的有效性高度依赖 "drag_text": false 这个常被忽略的配置开关。











