用 ^\s*$ 删除空行最稳,需关闭“. matches newline”;它可清除真正空行及含空格、Tab、全角空格、\u200b等伪空行,兼容\r\n和\n换行,不跨行;^$和\n\n不可靠,Sublime中行为不稳定;EOF前的空行需手动删除。

用 ^\s*$ 正则删空行最稳,但必须关掉 . matches newline
直接输 ^\s*$ 并替换为空,能同时干掉真正空行和带空格、Tab、全角空格、\u200b 等“伪空行”。它不依赖换行符类型(\r\n 或 \n 都行),也不跨行——前提是右下角的 . matches newline 图标**不能高亮**。一旦勾选,\s* 就可能吞掉换行符,把两段代码焊成一行。
别信 ^$ 或 \n\n,它们在真实项目里基本不可靠
^$ 看似简洁,但完全匹配不了粘贴来的“伪空行”(比如带空格或 Tab 的行),复制一段网页代码后删不干净是常态;\n\n 则在 Windows 文件(\r\n 换行)里几乎不生效,还容易误删函数间合法的单空行。更麻烦的是:这些写法在 Sublime 里行为不稳定,不同版本表现不一。
删完末尾还剩一个空行?不是 bug,是 Sublime 的行锚定逻辑
如果文件最后一行为空且**没有结尾换行符**(即 EOF 前光标停在空行),^\s*$ 根本不会匹配它——因为那行在 Sublime 内部不被视为“有换行边界的一行”。验证方法:按 Ctrl+` 打开控制台,输入 view.substr(view.line(view.size())),返回 '' 就说明存在这种 EOF 空行。补救很简单:Ctrl+End 移到行尾,按 Backspace 或 Ctrl+Shift+K(删整行)即可。
想留分隔空行?别压缩,先清再补
盲目用 \n\s*\n 替换为 \n\n 容易在段首/段尾多留或少留,Sublime 的替换引擎对连续换行解析不一致。稳妥做法是两步:
• 先用 ^\s*$ 把所有空行清空
• 再人工在需要分隔的位置按 Enter 插入单个空行
如果必须自动化,可分两次替换:
• 第一次查 ^\s*$\n\s*^\s*$ → 替换为 \n\n
• 第二次查 \n\n\n+ → 替换为 \n\n
最后手动删开头/结尾多余的 \n\n











