Sublime中删除空行应使用正则^\s*$\n并关闭“. matches newline”,避免误删末尾换行;推荐先替换中间空行,再手动处理结尾;批量操作需注意BOM和编码问题。

Sublime 中用正则匹配并删除空行
空行在 Sublime 里不能靠简单删选中内容解决,必须用正则精准识别「只含换行符或全空白字符的行」。关键在于:^[\t ]*$ 这个模式能匹配开头到结尾全是制表符、空格或什么都没有的行,但必须开启「匹配换行符」选项(即 . 匹配 \n)才可靠——不过实际中更稳妥的是用 ^\s*$,它默认包含 \r\n\t 等所有空白字符,且 Sublime 的正则引擎对 \s 支持稳定。
替换操作必须关掉「. matches newline」
很多人误开「. matches newline」后用 ^\s*$ 导致整段被吃掉,因为 . 会跨行匹配,^ 和 $ 失效。正确做法是:
- 打开「Find → Replace」(
Ctrl+H/Cmd+H) - 勾选
Regular Expression(Alt+R) - 确保
. matches newline未勾选 - 「Find What」填:
^\s*$\n - 「Replace With」留空
- 点
Replace All
保留文件末尾换行符不被误删
直接删 ^\s*$\n 会把文件末尾的换行也干掉,导致保存后 Sublime 自动补一个(部分插件或 Git 会报 warning)。更安全的做法是加负向先行断言:
^\s*$(?!\n$)
这个表达式意思是:匹配一个空行,但该行后面不能是「文件结尾前的最后一个换行」。不过实际中更简单有效的方案是:
- 先用
^\s*$\n替换为空,处理中间空行 - 再手动检查最后一行是否为空行;若空,删掉它即可
- 或者用多步:先删
\n\s*\n(多个连续换行缩成一个),再删首尾多余空行
批量处理多个文件时注意编码和 BOM
如果用「Find in Files」批量删空行,^\s*$\n 在 UTF-8 with BOM 文件里可能因 BOM 字符(\ufeff)干扰匹配。此时需前置过滤:
- 先确认目标文件编码统一(推荐 UTF-8 without BOM)
- 或改用更宽泛的模式:
^[ \t\r\n]*$\n,显式列出空白字符 - 避免在「Find in Files」中启用「Case sensitive」或「Whole word」,它们会影响
^/$行锚定行为
真正容易被忽略的是:Sublime 的正则引擎对 ^ 和 $ 的行为依赖于「当前是否在多行模式下」,而这个模式由「是否勾选 Regular Expression」隐式控制——没勾选时 ^ 和 $ 不起作用,勾选后才生效。这点不注意,写对了正则也白搭。










