sublime text中删除空行最稳方式是用正则^s*$,可匹配真正空行及含空白符的伪空行,跨平台安全;需禁用“. matches newline”,末尾空行补\n\s\*\z;勿用^$或 以防漏删或误删。

用 ^s*$ 匹配并删除所有空行(含伪空行)
Sublime Text 里最稳、最通用的删空行方式,就是用 ^s*$ 这个正则——它能同时覆盖「真正什么都没有的空行」和「只有空格、Tab、
的伪空行」。关键不是“能不能删”,而是“删得干净还不误伤”。
操作步骤很简单:Ctrl+H(Windows/Linux)或 Cmd+H(macOS)打开替换面板 → 点击右下角 .* 图标启用正则模式 → 在 Find What 输入 ^s*$ → Replace With 留空 → 点 Replace All。
注意三点:
-
^s*$不依赖换行符类型,、、都能匹配,跨平台安全 - 别勾选
. matches newline:它会让.吞掉换行符,导致^s*$行为异常,甚至跨行误删 - 如果文件末尾有连续空行,
^s*$可能只删到倒数第二行,最后一行需补一刀:s*Z→ 替换为空
为什么不用 ^$ 或
?
^$ 看似直白,但它只匹配“行首紧接行尾”的行,在 Sublime 的正则引擎中,^ 和 $ 默认锚定在每行起止位置,但若文件末尾没换行符,最后一行就匹配不上——结果就是漏删最后一空行。
更危险:它把换行符当普通字符处理,容易把 if (x) {
do(); 中的合法双换行也干掉,破坏代码结构;而且在 Windows 文件里遇到
时完全不匹配,直接失效。
常见错误现象:
- 删完发现最后一行还是空的 → 没处理
Z边界 - Python 文件缩进错乱 → 误删了
def func():后面必须保留的空行 - Markdown 段落粘连 → 把语义上需要的单空行也删了
想保留段落间距?用 ^s*$
s*^s*$ 压缩多空行为一个
直接删光所有空行会毁掉可读性,尤其 Markdown、YAML、INI 等靠空行分隔逻辑块的格式。这时候不该删,而该“合并”。
推荐两步走:
- 先跑一次
^s*$ s*^s*$→ 替换为,把两个及以上连续空行压成一个 - 再跑一次
^s*$ s*^s*$,直到无匹配为止(Sublime 不支持全局重复替换,得手动点) - 或者更省事:用
{3,}→ 替换为,把三个以上换行缩成两个,留出呼吸感
这个策略对 Python 文件特别友好:它不会动 class 和 def 之间的单空行,只清理冗余堆叠。
批量处理多个文件时,Find in Files 不能直接删空行
很多人想用 Ctrl+Shift+F 在整个项目里一键清空行,但 Sublime 的 Find in Files 面板不支持“替换为空行”这种操作——它只能替换为字符串,而空行本质是「匹配到的整行 + 换行符」,GUI 层无法精准控制行边界。
实际能做的只有:
- 用
Find in Files找出含^s*$的文件路径,手动逐个打开再执行Replace All - 写 Python 脚本调用 Sublime Text 的 API(需插件支持),或改用命令行工具如
sed '/^[[:space:]]*$/d' - 装插件如
DeleteBlankLines,绑定快捷键,但要注意它默认行为可能不兼容 Python 缩进规则
最易被忽略的一点:删空行前,务必确认当前文件编码是 UTF-8 且换行符统一。混着
和
的文件,^s*$ 虽然仍能匹配,但末尾残留可能更顽固——建议先用 File → Reopen with Encoding → UTF-8,再 File → Line Endings → Unix 统一换行符。











