
用正则直接删空行(含纯空白行)
Sublime 的「Find → Replace」里开正则模式(.* 按钮点亮),搜 ^\s*$\n,替换成空字符串。注意:这个正则会匹配「只有空白字符(空格、制表符)+ 换行符」的行,包括真正空的行和带空格/Tab 的“假空行”。
常见错误是只写 ^\n——它只能删真正空的行,遇到 \n(前面四个空格)就失效;还有人漏掉末尾 \n,结果替换后多出一堆空行,因为只删了行内容,换行符还留着。
- 确保勾选
Wrap around,否则文件头尾可能漏处理 - 先
Ctrl+Shift+F全局预览匹配项,确认没误伤带注释但无代码的行(比如//\n) - 如果文件用
\r\n(Windows 换行),^\s*$\n仍有效;Sublime 正则引擎自动适配换行符
保留顶部/底部空行时怎么安全清理中间空行
有些格式要求首尾留空行(比如 Python 模块开头结尾各一个空行),但中间连续空行要压缩成一个。这时不能无差别删,得用更精确的正则:\n\s*\n 替换为 \n\n,再重复执行直到无变化。
这个表达式匹配「一个换行符 + 零或多个空白字符 + 一个换行符」,本质是找“空行间隙”。但它有个坑:在文件开头或结尾可能匹配失败,因为边界处没有前导/后续换行符;所以更适合处理中间段落。
- 操作前建议先手动保留首尾各一行,再对中间区域
Ctrl+Shift+P→Select Lines后批量处理 - 别用
\n{2,}直接匹配多个换行——它不识别中间的空格/Tab,会把\n \n\n当作两组,导致替换不干净 - 如果要压缩成「最多一个空行」,替换目标写
\n\n即可;想彻底去掉所有空行间隙,就替换成\n
命令行或批量处理时怎么绕过 Sublime GUI
如果要处理几十个文件,或者集成进脚本,别点来点去。Sublime 自带命令行工具 subl 不支持直接正则替换,得靠外部工具。推荐用 sed(macOS/Linux)或 findstr+PowerShell(Windows)。
例如 macOS 下批量删空行:sed '/^[[:space:]]*$/d' file.txt > clean.txt。注意 sed -i 直接修改有风险,务必先备份。
- Windows PowerShell 更稳:
(Get-Content file.txt) -notmatch '^\s*$' | Set-Content clean.txt - 别信网上抄的
perl -i -pe 's/^\s*$\n//g'—— Perl 默认不按行读,容易崩,而且-i覆盖原文件极危险 - 如果文件编码是 GBK 或 UTF-8 with BOM,命令行工具可能乱码,优先用 Sublime 手动转成 UTF-8 再批处理
为什么有些空行死活删不掉?检查不可见字符
删完发现还有“空行”,光标一放上去却跳到下一行——大概率是 Unicode 控制字符,比如 \u2028(LINE SEPARATOR)或 \u2029(PARAGRAPH SEPARATOR)。Sublime 默认正则不认它们,\s 也不覆盖。
打开 View → Characters → Show All Characters,就能看到
或
这种符号。这时候得显式匹配:^[\s\u2028\u2029]*$\n。
- 正则里写
\u2028要求 Sublime 版本 ≥ 4123;老版本得用十六进制\x{2028} - 这类字符常见于从网页粘贴、iOS 备忘录导出、或某些 Markdown 渲染器输出的内容里
- 别依赖「删除所有空白」这种笼统操作——真正的空白是上下文决定的,不是视觉决定的










