Sublime多光标编辑需严格遵循选区结构与快捷键逻辑:Ctrl+Shift+L按\n切片选区生成光标,须确保覆盖换行符;空行需先加空格;输入法或Emmet可能劫持快捷键;行尾用End/Cmd+→而非→;行首插入宜用move_to_beginning_of_line或列选择;正则$不等价行尾,空行需特殊处理;多光标易因误操作消失,操作前须校验位置。

Sublime 的多光标不是“开启后就能批量编辑”的模式,它完全依赖你当前选区的结构和快捷键的触发逻辑——选错一行、漏一个换行符、或输入法干扰,都会导致光标只出一个、全歪、或根本没反应。
Ctrl+Shift+L 拆光标前必须确保选区按行完整
这个快捷键本质是「把选中的文本按\n切片,每片末尾放一个光标」,不是「给当前可见的多行加光标」。
- 鼠标拖选时,最后一行末尾若没覆盖到换行符(
\n),它就只当单行处理——结果只有一个光标 - 更稳的做法:
Ctrl+L(Windows/Linux)逐行点击目标行,或用Ctrl+D追加选中相同行首/行尾特征,再统一按Ctrl+Shift+L - 如果某行是纯空行,
Ctrl+Shift+L默认跳过它;需先在空行里手动敲个空格再选中,才能拆出光标 - 装了 Emmet 或中文输入法(如搜狗、微软拼音)时,
Cmd+Shift+L(macOS)常被劫持——临时切英文输入法再试
行尾插入内容必须用 End 键,不能只靠 → 方向键
→ 键在有尾部空格或制表符的行里会停在空白处,而非真正行尾;End(Windows/Linux)或 Cmd+→(macOS)才强制跳到换行符前。
- 操作链:选中目标行 →
Ctrl+Shift+L→ 按End→ 输入内容(如;、/* */) - 若部分行结尾是
\r\n(Windows 风格),End仍能准确定位;但→可能卡在\r和\n之间 - Sublime Text 4 内置
move_to_hard_eol命令,可在命令面板(Ctrl+Shift+P)调用,比End更可靠
行首插入前缀要防缩进干扰,Home 键不等于物理行首
默认 Home 是「跳到第一个非空字符」,不是行首。如果代码有 4 空格缩进,光标会落在第 5 列,导致//插在缩进中间。
- 安全做法:拆光标后,先按一次
Home(跳到非空字符前),再按一次Home(跳到物理行首) - 或直接用命令面板运行
move_to_beginning_of_line,它无视缩进,100% 落在行首 - 列选择(
Alt+Shift+鼠标拖动)更适合加前缀——从第一行列首垂直拖到底部,所有光标对齐在列 0,不怕缩进
正则替换追加内容时,$ 不等于“每行末尾”,空行和文件结尾要单独处理
正则里的 $ 在 Sublime 中匹配的是「行尾位置」,但它不包含换行符本身,且对空行行为不一致。
- 想给所有行(含空行)末尾加
;,查找填^.*$,替换为$0;——$0匹配整行内容(不含换行符),;就刚好插在换行符前 - 但若文件最后一行没有换行符,
$仍能匹配它,$0;会把分号加在文件末尾,而非“行尾” - 空行会被
^.*$匹配(因为.*可匹配零个字符),但^$才专指空行;需要区分处理就得写两轮替换 - 正则无法替代多光标做「精准定位+人工校验」,适合已确认格式干净的大批量操作
最易被忽略的点:多光标状态下任意一次方向键、Esc、Ctrl+X 或误触鼠标拖动,所有光标立刻消失;没有“撤销光标添加”以外的回退方式——所以拆光标后别急着输,先按 End 或 Home 确认位置是否全部到位。

















