Sublime如何去除代码中的空行 Sublime正则表达式去空行【实用】

3次阅读

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

Sublime如何去除代码中的空行 Sublime正则表达式去空行【实用】

Sublime 中用正则匹配并删除空行

空行在 Sublime 里不能靠简单删选中内容解决,必须用正则精准识别「只含换行符或全空白字符的行」。关键在于:^[t ]*$ 这个模式能匹配开头到结尾全是制表符、空格或什么都没有的行,但必须开启「匹配换行符」选项(即 . 匹配 n)才可靠——不过实际中更稳妥的是用 ^s*$,它默认包含 rnt 等所有空白字符,且 Sublime 的正则引擎对 s 支持稳定。

替换操作必须关掉「. matches newline」

很多人误开「. matches newline」后用 ^s*$ 导致整段被吃掉,因为 . 会跨行匹配,^$ 失效。正确做法是:

  • 打开「Find → Replace」(Ctrl+H / Cmd+H
  • 勾选 Regular ExpressionAlt+R
  • 确保 . matches newline 未勾选
  • 「Find What」填:^s*$n
  • 「Replace With」留空
  • Replace All

保留文件末尾换行符不被误删

直接删 ^s*$n 会把文件末尾的换行也干掉,导致保存后 Sublime 自动补一个(部分插件或 git 会报 warning)。更安全的做法是加负向先行断言:

^s*$(?!n$)

这个表达式意思是:匹配一个空行,但该行后面不能是「文件结尾前的最后一个换行」。不过实际中更简单有效的方案是:

  • 先用 ^s*$n 替换为空,处理中间空行
  • 再手动检查最后一行是否为空行;若空,删掉它即可
  • 或者用多步:先删 ns*n(多个连续换行缩成一个),再删首尾多余空行

批量处理多个文件时注意编码和 BOM

如果用「Find in Files」批量删空行,^s*$n 在 UTF-8 with BOM 文件里可能因 BOM 字符(ufeff)干扰匹配。此时需前置过滤:

  • 先确认目标文件编码统一(推荐 UTF-8 without BOM)
  • 或改用更宽泛的模式:^[ trn]*$n,显式列出空白字符
  • 避免在「Find in Files」中启用「Case sensitive」或「Whole word」,它们会影响 ^/$ 行锚定行为

真正容易被忽略的是:Sublime 的正则引擎对 ^$ 的行为依赖于「当前是否在多行模式下」,而这个模式由「是否勾选 Regular Expression」隐式控制——没勾选时 ^$ 不起作用,勾选后才生效。这点不注意,写对了正则也白搭。

text=ZqhQzanResources