sublime text 原生支持行尾空格清理,应禁用 trailingspaces 等插件以避免冲突;仅配置 trim_trailing_white_space_on_save 和 trim_automatic_white_space 两个布尔值,并通过 trim_trailing_white_space_on_save_exclude 排除 markdown、makefile 等需保留行尾空格的语法。

trim_trailing_white_space_on_save 不是插件,它是 Sublime Text 原生功能,根本不需要安装任何插件。
为什么不该装“行尾空格清理插件”
装了像 TrailingSpaces 这类插件,再同时开启原生 trim_trailing_white_space_on_save,会出现光标乱跳、保存时闪一下、重复清理等问题——不是功能更强,而是互相干扰。
- Sublime 本身对行尾空格的处理逻辑很明确:只删行末
和\t,不动缩进、不碰空行、不改行中内容 - 插件往往额外高亮、选中、甚至误删 Markdown 硬换行(两个空格 + 换行)或 Makefile 变量展开所需的行尾空格
- 一旦出问题,排查优先级链很长:项目设置 > 语法专属设置 > 用户设置 > 插件配置,容易卡在某一层失效却找不到原因
正确做法:只配原生两个布尔值
打开 Preferences → Settings – User(务必是右侧「User」面板),在已有 JSON 内容的大括号里加这两行:
{
"trim_trailing_white_space_on_save": true,
"trim_automatic_white_space": true
}
-
trim_trailing_white_space_on_save:按Ctrl+S或Cmd+S时,清掉所有行尾空格和制表符 -
trim_automatic_white_space:光标离开当前行(比如按→、Enter或点击别处)时,立刻清理该行尾部空白 - 两者都严格保留缩进空格——
return x前的空格、Python 的def缩进、YAML 的层级对齐,全都不动
哪些场景要手动排除?
如果你写 text.markdown 或 source.makefile,行尾空格有语义,原生功能照删不误。这时得用 trim_trailing_white_space_on_save_exclude 显式排除:
{
"trim_trailing_white_space_on_save": true,
"trim_trailing_white_space_on_save_exclude": ["text.markdown", "source.makefile"]
}
- 这个数组里的语法类型,
trim_trailing_white_space_on_save直接跳过,不触发 - 但
trim_automatic_white_space不受此影响,所以它也得关掉,否则仍会误删 - 右下角看当前文件语法标识(如
text.markdown),确认匹配项是否准确
临时清理老文件?用内置命令,别碰正则
想快速验证或整理一个已有文件,直接调 Sublime 内置命令最安全:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Trim Trailing White Space,回车执行 - 它和配置项行为一致:只删行尾
和\t,不伤缩进、不碰空行、不破坏 Markdown 语义 - 如果这个命令没反应,说明当前语法被全局排除(比如
text.markdown),可先切到Plain Text再试
source.python,而 Preferences → Settings – Syntax Specific 里写了 "trim_trailing_white_space_on_save": false,那它就彻底失效——得去对应语法设置里补回 true。











