用 ^\s*$ 删除空行最稳,因它匹配纯空白或完全空的整行,覆盖伪空行;需勾选 Regex 且禁用 . matches newline,否则会误删内容或残留末尾空行。

直接删所有空行,用 ^\s*$ 配合「Replace All」就行;但必须勾选 Regex,且不勾选 . matches newline——否则末尾空行可能残留,或误吞掉下一行首字符。
为什么 ^\s*$ 是最稳的写法
它匹配「从行首到行尾之间只有空白字符(含空格、\t、\r)或完全为空」的整行,覆盖了真正的空行和带空格/制表符的“伪空行”。
-
^$看似简单,但会漏掉含空格的行,比如这种 -
\n\n或\n{2,}只处理连续换行,无法识别单个伪空行,还可能把if (x) {\n\n do();中的合法换行错删 -
\s已隐含支持\r,不用单独写[\s\r\n],跨平台兼容性好
替换时必须关闭 . matches newline
这个选项一旦启用,.* 会跨行匹配,导致 ^\s*$ 在多行模式下行为失控——比如把两行合并成一个匹配,删掉中间内容。
- 右下角
.*图标点亮 = 启用正则,这是必须的 - 右下角
\n图标未高亮 =. matches newline未勾选,这是关键 - 如果误勾了
\n,^\s*$可能匹配到行尾后还继续吃掉下一行开头的非空白字符
想留一个空行当段落分隔?别硬删,先压缩
直接删光容易破坏可读性,尤其对 Markdown、Python(class/def 后需空行)、配置文件等场景。
- 先用
^\s*$\n\s*^\s*$查找两个及以上连续空行(含伪空行) - 替换为
\n\n,再点一次 Replace All,就能把多个压成一个 - 重复执行直到无匹配,比手动判断哪该留哪该删更可靠
- Python 文件特别注意:删完检查
def和class后是否只剩一个空行,少于一个可能触发缩进报错
真正容易被忽略的是末尾空行处理:^\s*$ 默认不带换行符,替换后若原文末尾是 \n,它会被一并删掉,导致文件末尾没换行;加 \n?(即 ^\s*$\n?)能缓解,但 Sublime 的替换逻辑对行尾换行符的捕获不稳定——最稳妥的方式是删完后手动 Ctrl+Shift+P → 「Insert Final Newline」补上。











