最快手动方式是ctrl+l选行→ctrl+shift+l拆光标→end/cmd+→移至行尾→按;,但光标需精准落在文本末尾而非空白处;若行尾有空格,需连按两次end或用ctrl+→微调;正则(?

直接用 Ctrl+Shift+L 加 End 再按 ; 是最快的手动方式,但必须确保光标已在每行末尾——否则分号会插在中间或空白处,而不是真·行尾。
为什么 Ctrl+Shift+L 后按 ; 常常失效
因为 Ctrl+Shift+L 只是把选区按换行符拆成多光标,光标落在“选区末尾”,不等于“行尾”。如果某行末尾有空格或制表符,光标就停在空白上;如果没选中整行(比如只选中了中间一段),光标甚至会落在行中。
- 先用
Ctrl+L选中第一行 →Ctrl+Shift+↓扩选目标行 → 再按Ctrl+Shift+L - 接着统一按
End(Windows/Linux)或Cmd+→(macOS),把所有光标推到文本行尾(最后一个可见字符后) - 若某行结尾是空格,
End会停在空格上,需连按两次End或改用Ctrl+→跳词 +→微调 - macOS 用户若发现
Cmd+→不生效,可临时启用 Bash 风格快捷键:"command_mode": true,再用Ctrl+E直达行尾
$ 正则替换比多光标更稳,尤其处理混合内容时
打开替换面板(Ctrl+H),勾选 .*(正则模式),查找:(?,替换为:<code>;。这个正则能避开已有分号、吞掉末尾空白、精准落点。
(? 是负向先行断言,确保前面不是分号,避免 <code>foo();变成foo();;-
\s*匹配行尾任意空白(空格、制表符),替换时一并清理 - 若只想处理非空行,把查找改成:
(?,但多数场景用前者更安全 - 注意:最后一行若无换行符,
$可能不匹配,此时可先手动加个换行再操作
宏和键绑定能省一次操作,但有隐藏风险
录一个三步宏(move_to 到行尾 → insert ; → insert \n)并绑定快捷键(如 Alt+;),确实能一键触发。但它不识别上下文,也不判断是否已有分号。
- 宏文件里写死
"to": "eol"比依赖End键更可靠,避免键盘布局干扰 - JavaScript 场景下,对以
[、(、`开头的行硬加;可能破坏 ASI 规则,引发语法错误 - 宏无法跳过注释行,
// foo也会变成// foo;,需人工复查 - 录制后务必关掉
"remember_open_files": false,否则重启 Sublime 可能意外触发宏
真正难的不是“怎么加”,而是“该不该加”——JS/TS 里很多语句本不该加分号,强行补全反而掩盖 ASI 失效或语法歧义。正则和宏都只是工具,最终得靠你判断哪几行真需要它。











