home/end 默认跳视觉行首/尾,非物理行首或文件行尾;windows/linux 直按,macos 需改键或用 ctrl+←/→;多光标下推荐 ctrl+shift+l 后接 ←/→;正则 ^/$ 更精准锚定。

Home/End 键在 Sublime 里到底跳哪儿?
Home 和 End 键默认跳的是「视觉行首/行尾」,不是物理行首(第一个非空白字符前)或文件行尾(换行符前)。有缩进、软换行(soft wrap)、空格结尾时,它可能停在缩进起点、软折行开头、或最后一个空格上——而不是你真正想加内容的位置。
常见错误现象:Home 按一次停在缩进处,再按一次才到真正行首;End 停在行尾空格中间,输 ; 后变成 foo(); (分号后还带空格)。
- Windows/Linux:直接按
Home/End,行为受当前光标所在行的格式影响极大 - macOS:
Cmd+←和Cmd+→才是等效操作,但需确认未被系统快捷键劫持(如 Mission Control) - 想跳到「第一个非空白字符前」?别依赖
Home,用Ctrl+←更稳(Windows/Linux);macOS 上也推荐Ctrl+←,避开Cmd+←冲突
多光标下 Home/End 失效?先看光标落点
Ctrl+Shift+L 后光标默认落在每行末尾(含换行符前),此时按 Home 才能统一跳到各自行首;但如果之前是整行选中(比如 Ctrl+L 后再 Ctrl+Shift+L),光标其实已在行尾,Home 就成了“从行尾跳到行首”的一步操作。
容易踩的坑:Ctrl+A 全选后按 Ctrl+Shift+L,所有光标落在每行末尾——但如果你误按了 ←(左箭头),它只退一格,不是跳到行首;而 Home 在某些配置下会卡在缩进位置。
- 最可控路径:
Ctrl+Shift+L→ 紧接按←(左箭头)→ 所有光标瞬间落到物理行首(即第一个字符前,不管空格还是 Tab) - 加行尾内容?先
Ctrl+Shift+L,再按→(右箭头)跳过换行符,或直接用正则\s*$替换掉行尾空格再End - Vintage 模式开启时,
Ctrl+Shift+L被重映射为「选中到行尾」,根本不会生成多光标:关掉 Vintage,或改用命令面板运行split_selection_into_lines
不想靠按键?用正则批量锚定 ^ 和 $
当你要处理几十行、且格式不统一(混有空格、Tab、空行)时,手动按 Home/End 容易漏或错位。正则才是真·精准锚定。
操作路径:打开查找(Ctrl+F)→ 点击左侧 * 开启正则 → 输入 ^ 或 $ → 点击 Find All,光标自动落在所有行首或行尾位置(注意:$ 匹配的是换行符前,不是换行符本身)。
-
^匹配行首:包括空行的开头,适合加统一前缀(如//) -
$匹配行尾:匹配换行符前的位置,但若行尾有空格,$仍在其后——要清理空格,先搜\s*$替换为空 - 想跳过空行?查
^[^\s]*$(非空行行首)或^[^\s].*$(首字符非空白的行)
Mac 用户特别注意:Cmd+← 不等于行首
macOS 系统级热键(Mission Control)默认占用 Cmd+← 和 Cmd+→,Sublime 无法捕获。即使你在 Sublime 里绑定了该组合键,按下后大概率触发桌面切换,光标纹丝不动。
真实可用方案只有两个:
- 改系统设置:进入「系统设置 → 键盘 → 快捷键 → 调度中心」,禁用
Cmd+←/Cmd+→ - 改 Sublime 绑定:在用户 key bindings 中加一条:
{"keys": ["ctrl+home"], "command": "move_to", "args": {"to": "bol", "extend": false}},然后用Ctrl+Home代替 - 最省事:坚持用
Ctrl+←和Ctrl+→,它们在 macOS 上完全可靠,且行为与 Windows/Linux 一致
真正容易被忽略的是:这些跳转全部无视语法上下文。光标在字符串内、注释里、甚至括号中间,Ctrl+→ 依然按字符位移动——它数的是 UTF-8 字节位置,不是引号或括号边界。











