sublime text 删除空行最稳方法是用 ^\s\*$ 替换为空,可清除真正空行和含空格、tab 的伪空行,不依赖换行符类型且无需插件;^$ 无法匹配带空白的行,\n\n 跨平台不安全且漏首尾空行。

直接用 ^\s*$ 替换为空,是 Sublime Text 删除空行最稳、最通用的做法。它能同时干掉真正空的行和“伪空行”(比如只有空格或 Tab 的行),不依赖换行符类型,也不需要插件。
为什么必须用 ^\s*$,而不是 ^$ 或 \n\n
很多人试过 ^$,结果发现带空格的行删不掉;也有人用 \n\n 想压缩空行,结果开头结尾的空行漏了,Windows 文件还可能完全不匹配。
-
^$只匹配“行首紧接行尾”的行,遇到(4个空格)就失效 -
\n\n是按字符匹配换行符,跨平台不安全(\r\nvs\n),且无法处理单个空行 -
^\s*$中的\s明确覆盖空格、Tab、\r、\n等所有常见空白字符,^和$锚定整行,逻辑干净
操作时三个关键开关和一个易错点
打开 Ctrl+H(Windows/Linux)或 Cmd+H(macOS),别急着输正则——先确认设置:
- 务必勾选右下角的
.*图标(启用 Regular Expression) - 一定不要勾选
. matches newline:它会让.吞掉换行符,导致^\s*$跨行误匹配 - 查找框填
^\s*$,替换框留空(千万别填\n或空格,否则会多塞换行符) - 容易错在最后一行:如果文件末尾是空行但没换行符(即 EOF 前是空行),
^\s*$匹配不到——这时得手动删,或补跑一次\s*\Z替换为空
想保留段落间距?别全删,分两步压空行
Markdown、配置文件或日志里,单个空行有语义(比如段落分隔),全删会导致渲染异常。这时候要区分“该留”和“该压”:
- 先执行
\n{3,}→\n\n:把 3 个及以上连续换行压成两个 - 再执行
\n\n(?=\n)→\n:把后面还跟着换行的\n\n变成单个\n,最终只留一个空行 - 注意顺序不能反,否则第二步会把刚压好的
\n\n又拆开
大文件或批量处理前,记得先保存并预览
正则替换不可逆,尤其在多文件场景下(Ctrl+Shift+F 全局替换):
- 替换前先
Ctrl+S保存当前文件,避免崩溃丢内容 - 用
Find All(Alt+Enter)看匹配了多少处,快速判断是否误伤(比如 Python 缩进行被当空行) - 中文文档可能含全角空格(
)或不间断空格(),\s默认不匹配它们;如需清理,改用^[ \u00a0\u3000]*$
真正麻烦的不是怎么写正则,而是文件末尾那个看不见的空行、缩进敏感语言里混在代码间的“伪空行”,以及不同换行符带来的隐性差异——这些地方不手动验证一遍,很容易以为删干净了,结果 Git diff 或编译时报错才反应过来。











