Sublime需手动开启trim_trailing_white_space_on_save才能保存时自动删除行尾空格,配置须写入User设置且JSON合法;若无效,可能被语法特定设置、项目配置、插件冲突或旧版写法覆盖。

Sublime 默认不删行尾空格,必须显式开启 trim_trailing_white_space_on_save,否则每次保存都会把空格原样留下——Git diff 里一堆红色空格就是这么来的。
怎么开保存时自动删行尾空格
只改用户设置(Preferences → Settings – User 右侧面板),加这一行:
{"trim_trailing_white_space_on_save": true}
注意三点:
- 必须写在右侧「User」栏,写到左侧 Default 会被升级覆盖
- 整个 JSON 要合法:键名用英文双引号、不能漏大括号、末尾逗号不能多(最后一项后不要逗号)
- 改完必须保存该设置文件,Sublime 不会热重载语法错误的 JSON
测试方法:新建 .txt 文件,输 hello(末尾几个空格),按 Ctrl+S(Windows/Linux)或 Cmd+S(macOS),空格立刻消失。
为什么设置了却没反应
不是配置写错了,多数是被更高优先级规则盖过去了:
- 右下角显示的语法名(如
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"),不是文件后缀
真正麻烦的是混合缩进场景——比如 Tab 和空格混用,再加行尾空格,trim_trailing_white_space_on_save 只管“尾部”,不管“中间”。这种得靠 Convert Indentation 配合,或者上 EditorConfig 插件统一约束。

















