Sublime Text原生不支持自动删除文件末尾多余空行;trim_trailing_white_space_on_save仅清理非空行尾空格和制表符,不处理任何空行;ensure_newline_at_eof_on_save仅确保文件以单个换行符结尾,不删中间空行。

Sublime Text 原生不支持“自动删除文件末尾多余空行”,trim_trailing_white_space_on_save 只管每行末尾的空格和制表符,对空行本身完全无感——哪怕文件结尾有 10 个空行,它也一个不动。
只开 trim_trailing_white_space_on_save 能清什么、不能清什么
这个设置的作用边界非常明确:
- ✅ 清除非空行末尾的空格和
\t(比如print("hello")→print("hello")) - ✅ 不碰缩进空格(
def foo():<br> return x中的两个空格保留) - ✅ 不删空行(包括文件开头、中间、结尾的所有纯空行)
- ✅ 不动行中或行首空格(如
hello world→hello world)
所以如果你看到 Git diff 里一堆 + 行全是空行,那不是它没生效,而是它根本不管这事。
ensure_newline_at_eof_on_save 是唯一能影响文件末尾换行的原生选项
它不是“删空行”,而是“确保文件以且仅以一个换行符结尾”。效果是:
- 文件末尾无换行 → 自动补一个
\n - 文件末尾有多个换行(如
\n\n\n)→ 压缩成单个\n - 它不会删掉倒数第二行之后的空行,只收口最后一行的换行符
示例:若文件内容是 abc\n\n\n(末尾两个空行),保存后变成 abc\n;但若内容是 abc\n\n123\n\n\n,则变成 abc\n\n123\n —— 中间空行不受影响。
要启用它,只需在用户设置里加这一行:"ensure_newline_at_eof_on_save": true,和 trim_trailing_white_space_on_save 放在一起即可。
真想删所有末尾空行?别硬配,用命令或插件
Sublime 没有内置配置项能安全、通用地删除“文件末尾连续空行”。强行用正则 ^\s*$\n(?=\s*$) 或类似模式风险高,容易误删中间空行或破坏 YAML/INI 等格式的语义。
更稳妥的做法是:
- 手动触发一次清理:按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Trim Trailing White Space回车 —— 它只动行尾空格,不碰空行,安全 - 需要删末尾空行时,用
Ctrl+H打开替换面板,勾选Regular Expression,查找:\n\s*$,替换为:\n,然后点击Replace All(注意:先Find All预览,确认只匹配末尾部分) - 长期需求可装轻量插件如
TrailingSpaces(关掉它的自动清理,只用它的高亮+手动命令),或EditorConfig配合项目级规则
最常被忽略的一点:空行是否该删,本质是团队规范问题。Python PEP8 不禁止末尾空行,Git 默认也不报错;而某些 CI 流水线或代码扫描工具会检查 no newline at end of file,这时 ensure_newline_at_eof_on_save 才真正有用。别为了“看起来干净”去动不该动的空行。


















