多光标删行尾分号需光标精准卡在分号右侧(分号与换行符之间),而非默认行尾;推荐用正则;[ \t\u00a0]*$批量删除,兼顾空格、tab及不间断空格,并注意json/yaml等禁用分号的语言场景。

多光标删行尾分号:光标必须落在分号正后方
直接按 Ctrl+Shift+L 后输 Backspace 或 Delete,大概率删错——因为光标默认停在换行符前,不是分号后。真正要删的是分号本身,所以每个光标得精准卡在分号右侧(即分号和换行符之间)。
操作要点:
- 先用
Ctrl+F查找;$,确认所有目标分号都可见、无隐藏空白 - 用鼠标或
Ctrl+L逐行选中含分号的行,再按Ctrl+Shift+L拆出光标 - 此时光标在每行末字符后,若该行是
foo();,光标就在;后;若是foo();(带空格),光标就在空格后 → 必须先按End(Win/Linux)或Ctrl+→(macOS)跳到文本行尾,再按一次←左移一位,确保光标紧贴分号右侧 - 确认所有光标都对齐后,按
Backspace一次性删除分号 - 删完立刻按
Esc退出多光标模式,避免后续误操作
为什么 Ctrl+Shift+L + Delete 常常没反应?
不是快捷键失效,是光标根本没落在分号上。常见错位场景:
- 某行末尾有空格或 Tab:
console.log("x");→Ctrl+Shift+L后光标停在空格后,Delete删的是空格,不是分号 - 空行也被拆出光标 → 光标停在换行符前,
Delete会吞掉换行,导致上下两行合并 - macOS 下
Cmd+→被系统截获,光标卡在行中 → 改用Ctrl+A(行首)→Ctrl+E(行尾),前提是开启了"command_mode": true - 文件末尾无换行符时,最后一行的分号后没有
\n,光标位置逻辑不同,容易漏删
比多光标更稳的替代方案:正则替换删分号
多光标适合小范围(≤10 行)、需人工核对的场景;批量删分号,正则才是首选。关键不是写 ;$,而是覆盖分号后可能存在的空白:
- 查找框填:
;[ \t\u00A0]*$—— 明确匹配分号 + 零或多个空格/Tab/不间断空格 + 行尾 - 替换框留空
- 务必勾选
.*(正则模式)和In Selection(如果只处理某段代码) - 执行前先用
Preferences → Settings加"draw_white_space": "all",看清哪些是真空白 - 特别注意:JSON/YAML 文件里删分号是非法操作,先切语法为
Plain Text再动手
删完别急着保存:检查三类高危残留
看似删干净了,但以下情况正则和多光标都容易漏:
- 分号在字符串里:
sql = "SELECT * FROM t;";→;[ \t\u00A0]*$不会匹配,安全;但若写成sql = "SELECT * FROM t;"; // comment,分号不在行尾,就真漏了 - SQL 多语句拼接:
INSERT ...; UPDATE ...;在同一行 →$只匹配最后一个分号,前面那个留着 - TypeScript 中分号用于类型断言边界,如
const x = f() as string;,删掉可能让后续类型推导失效
最易被忽略的是:你删的这个文件,到底归哪种语言规范管?JS 允许省略分号但不鼓励,Go 强制不许,TypeScript 依赖它做解析——动之前看一眼语法高亮用的是什么,比试一百次正则都管用。











