ctrl+shift+l 将光标置于每行换行符前,不区分前导空白与代码;需配合 end/cmd+→、trim trailing whitespace 和正则 \s*$ 替换确保精准插入分号。

Ctrl+Shift+L 后光标默认在行尾,但不等于“文本末尾”
按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS)后,光标确实会落在每行换行符前——这是 Sublime 的设计行为,但它**不区分该位置前面是代码、空格还是制表符**。如果某行结尾是 console.log() (含 4 个空格),光标就停在最后一个空格上,此时输 ;,结果是 console.log() ;,而非 console.log();。
- 先用
Ctrl+L选中第一行,再按Ctrl+Shift+↓扩展选区,比鼠标拖选更精准 - 执行
Ctrl+Shift+L后,统一按End(Win/Linux)或Cmd+→(macOS)——若仍卡在空白里,连按两次End或改用Ctrl+→(逐词跳)+→(单字符微调) - macOS 用户若
Cmd+→失效,需确认设置中启用了"command_mode": true,否则系统快捷键会拦截 - 操作完务必按
Esc退出多光标模式,否则后续任意按键都会批量触发
空行和缩进不一致会让多光标“失位”
空行也会被 Ctrl+Shift+L 赋予光标,位置在换行符前;此时输入 ;,结果就是单独一行 ;,破坏结构。缩进混用(Tab + 空格)时,Home 或 End 行为不一致,有的行光标跳到缩进起点,有的直接到行首,导致插入点错乱。
- 批量操作前,先执行
Ctrl+Shift+P→ 输入Trim Trailing Whitespace清理所有行尾空白 - 再运行
Indentation: Convert to Spaces统一缩进,避免 Tab/空格混用干扰光标定位 - 若需跳过空行,不要依赖多光标——它无法条件过滤;改用正则替换更可靠
- 状态栏显示“已选择 X 行”,但实际光标可能没落到预期位置;可开启
View → Draw White Space查看隐藏空白
为什么有时按 ; 没反应?不是快捷键问题,是光标没落对
常见误判是以为 Ctrl+Shift+L 失效,其实它完成了任务:把光标放在了你选区的结束位置。如果你只选中了 let a = 1 这段(没到行尾),Ctrl+Shift+L 就会在 1 后面放光标,而不是整行末尾。此时输 ;,结果是 let a = 1;,但其他行可能根本没变。
- 验证光标是否真在行尾:按一次
→,如果光标移动了,说明之前停在了空白或字符中间 - 别用
Ctrl+A全选后再按Ctrl+Shift+L——全选时选区覆盖整文件,Ctrl+Shift+L会把光标放在每行末尾,但Home只影响第一行,其余光标不动 - Vintage(Vim)模式下
Ctrl+Shift+L被重映射为「选中到行尾」,必须关闭该模式或改用正则路径 - 若文件编码含 BOM(如 UTF-8-BOM),
Home/End可能定位异常;保存为纯UTF-8编码可规避
替代方案:$ 正则替换比多光标更稳,尤其处理大块代码
当目标超过 50 行,或混有注释、空行、尾部空白时,多光标容易漏行或错位。$ 正则匹配行尾位置,不依赖光标手动定位,且能一次性清理空白。
- 打开替换面板:
Ctrl+H(Win/Linux)或Cmd+H(macOS) - 勾选右下角
.*图标(硬性前提!不点它,$就是普通字符) - 查找填:
\s*$(匹配行尾所有空白,包括空格、Tab、零个或多个) - 替换填:
;(分号会插在空白之后,即紧贴非空白内容) - 若最后一行无换行符,
$仍能匹配;但若文件末尾有多余\n,建议先开启Draw White Space确认结构
\s*$ 不仅加符号,还顺手清掉了尾随空白——这步手工做极易遗漏,却直接影响代码可读性和语法正确性。











