ctrl+shift+l多光标删行首易误删缩进或注释,因光标默认在行尾,delete仅删前一字符;应改用正则^\d+\s+精准删除行号,分步处理空行,并慎用replace all以防崩溃。

为什么 Ctrl+Shift+L 多光标删行首内容会焊死代码
多光标编辑本身不破坏格式,但「光标停在行尾 → 左移 → Delete」这个操作链,在含缩进、注释或空格的代码里极易误删关键字符。比如 Python 里某行是 # todo,光标左移到行首后按 Delete,会把四个空格全干掉,下一行缩进就错位;又或者 JS 中 console.log();被删成console.log();,触发 ESLint 报错。
根本原因是:Sublime 的Ctrl+Shift+L默认把光标放在每行末尾,而 Delete 键只删光标前一个字符——你得手动左移多次才能对齐行首,稍一疏忽就删过头。
- 别用方向键逐个左移:容易数错、漏行、卡在中间空白处
- 别依赖 Backspace:它行为和 Delete 一致,同样只删前一个字符
- 别在未选中状态下直接删:Sublime 不会自动识别“这一整段要删行号”,它只响应当前光标位置
用正则精准切掉行首固定长度字符(如行号)
从网页复制带行号的代码(如1 console.log("a");),真正要删的是每行开头的数字+空格,不是“所有行首字符”。硬靠多光标删,不如用正则一次切干净。
打开Ctrl+H,启用正则模式,填:
^\d+\s+
替换框留空,点Replace All。这个表达式只匹配「行首开始的连续数字 + 至少一个空白符」,不会动到console.log()里的空格,也不会误伤for (let i = 1; i 这种含数字但不在行首的代码。
- 如果行号后是制表符而非空格,把
\s+换成[\s\t]+ - 如果行号有前导零(如
001),\d+仍适用,无需改 - 如果某些行没行号(比如空行或注释行),这个正则自动跳过,不干扰原有结构
删空行时保留 Markdown 或 Python 的语义间距
直接用^\s*$删所有空行,会让 Markdown 段落粘连、Python 函数间失去分隔、CSS 规则块挤在一起。这不是正则错了,而是没区分「该删的冗余空行」和「该留的语义空行」。
安全做法是两步走:
- 先压缩连续空行:
\n{3,}→\n\n(把 ≥3 个换行压成两个) - 再处理残留双空行:
\n\n(?=\n)→\n(只把后面还跟着换行的\n\n替成单\n,避免动到段落间的单空行)
注意顺序不能反——如果先跑\n\n→\n,会把刚压好的\n\n又拆开,白干。
大文件或跨平台文件慎用 Replace All
超过 5MB 的日志、生成代码或混合了 CRLF/LF 的文件,Replace All可能卡死、崩溃,甚至只处理了一半就中断,导致部分空行删了、部分没删,格式更乱。
- 先点
Find All看匹配数:超 5000 行就别全量替换 - 选中一个函数块或段落,勾选
In Selection再替换,可控可逆 - Windows 用户若看到右下角显示
CRLF,查找时用^\s*\r?\n而非^\s*$,否则匹配失败
最保险的底线:删之前务必Ctrl+S保存,或者确认Settings → atomic_save: true已开启——否则崩溃后可能丢数据。











