最可靠方法是用正则 ^\s*$\n 配合 sublime 的「find → replace」,勾选「regular expression」和「. matches newline」,替换留空;它可删真正空行及全空白行,但末尾无换行符的空行需手动处理。

用正则表达式删除空白行最可靠
Sublime Text 自带的「Find → Replace」配合正则就能干净去掉空行,不用装插件、不依赖外部工具。关键是得写对模式,否则会误删带空格的“伪空行”或留尾巴。
-
^$\n只匹配真正空的行(不含任何字符,包括空格),但必须勾选 「Regular Expression」 和 「. matches newline」(后者不勾选就换不了行) - 更安全的写法是
^\s*$\n,它能同时干掉全空格/制表符的“假空行”,但注意:如果某行只有空格+注释(如//),\s*也会把它当空行删掉 - 替换框里留空,别填
\n或其他字符——否则会在原位置多塞一个换行,反而增加空行
Ctrl+Shift+K 删除当前行时的意外行为
这个快捷键看着方便,但它是「删除整行内容 + 换行符」,不是「删空行」。如果你光标停在空行里按它,看起来像删了,其实只是把光标上一行和下一行“焊”在一起——中间没换行符,后续格式化或 Git diff 会出问题。
- 只适用于手动清理少量空行,不适合批量处理
- 如果该空行前后都是代码,按完后两行会连成一行(比如
console.log("a")console.log("b")),语法直接报错 - 它不识别「空行是否由缩进构成」,哪怕你写了
(4个空格),它也照删不误
用「Split into Lines」+「Sort Lines」组合容易翻车
有人想先按行切分再排序去重来清空行,这招在 Sublime 里行不通。因为「Sort Lines」不会合并重复行,也不会跳过空行;它只是按 ASCII 排序,而空行排最前,结果是空行全堆到文件开头,根本没删掉。
- 「Split into Lines」(
Ctrl+Shift+L)是为多光标准备的,不是文本清洗工具 - 排序后空行仍在,还得额外跑一次正则,白费一步
- 如果文件里有中文或特殊符号,排序顺序可能和预期不符,干扰判断哪些是真·空行
保存前记得检查最后一行是否被误删
正则 ^\s*$\n 匹配的是「空行 + 后面的换行符」,所以文件末尾那个没换行符的空行(即光标停在最后一行、该行为空但文件没以 \n 结尾),它压根匹配不到——你会觉得“怎么还剩一行?”,其实是 Sublime 的 EOF 行显示逻辑造成的视觉误差。
- 打开「View → Show Console」,输入
view.substr(view.line(view.size())),如果返回空字符串'',说明最后一行确实为空且无换行符 - 这种情况要手动删,或者改用
^\s*$(?!\n)(需开启 PCRE 支持,但 Sublime 默认不支持该语法)——不如直接手动删来得稳 - Git 提交前留意 .gitattributes 是否设了
auto=lf,否则 Windows 下换行符混乱会让空行检测失效











