sublime text 原生支持保存时自动删除行尾空格,只需在用户设置中添加 "trim_trailing_white_space_on_save": true;该配置仅作用于非空行末尾的空格和制表符,不处理空行、行首空格,且仅在手动保存时触发。

Sublime Text 原生就能保存时自动删行尾空格,不用装插件,改对 trim_trailing_white_space_on_save 就行;但“自动清理”不等于“无脑全删”,错配或冲突会导致它完全不生效。
怎么开保存时自动删行尾空格
核心就一行配置,加在用户设置(Preferences → Settings – User)右侧 JSON 里:
"trim_trailing_white_space_on_save": true
注意三点:
- 必须写在右侧「User」栏,写到左侧 Default 会被升级覆盖
- 整个 JSON 要合法:键名用英文双引号、不能漏大括号、末尾逗号不能多(最后一项后不要逗号)
- 改完必须保存该设置文件,Sublime 不会热重载语法错误的 JSON
测试方法:新建 .txt 文件,输 hello (末尾几个空格),按 Ctrl+S,空格立刻消失。
为什么设置了却没反应
不是配置写错了,多数是被更高优先级规则盖过去了:
- 右下角显示的语法名(如
text.markdown)可能加载了 Syntax Specific 设置,覆盖了全局配置;可临时切到Plain Text验证 - 项目根目录有
.sublime-project,里面写了"trim_trailing_white_space_on_save": false,那用户设置就失效 - 装了
TrailingSpaces插件又开了原生选项,两者会冲突——保存时光标跳、界面闪,建议二选一 - 用了旧写法
files.trim_trailing_white_space_on_save(ST2 风格),ST3/ST4 已不识别
想边写边清理?再加一个开关
只开 trim_trailing_white_space_on_save 是“攒着等保存才扫”,如果希望光标移出某行就立刻清,加这一行:
"trim_automatic_white_space": true
它和原生删尾空格独立运行,推荐两个都开。但要注意:
- 它只清理“非缩进用途”的尾部空格,比如
return x后面那几个,不会动def foo():下面的缩进空格 - 在
text.markdown里,两个空格+换行是换行语义,开了这个可能破坏渲染,得关掉 - 某些 shell 或 Makefile 场景依赖行尾空格对齐注释,也建议按语法关闭
哪些地方容易被忽略
最常被低估的是作用范围和边界:
-
trim_trailing_white_space_on_save不处理空行本身,只删“非空行末尾空格”和“文件末尾连续空行”;中间的空行、纯空行里的空格,它都不碰 - 真要删所有空行,得靠插件或正则替换,原生不支持
- 若需按文件类型差异化控制(如
.md关、.py开),ST4 build 4140+ 可用trim_trailing_white_space_on_save_exclude,填的是 scope 名(如"text.markdown"),不是文件后缀 -
ensure_newline_at_eof_on_save和它常一起用,但职责不同:前者保结尾换行符,后者删尾空格;两个都开才能兼顾 Git 规范和代码整洁











