sublime text 默认不自动删除行尾空格,需在用户设置中添加"trim_trailing_white_space_on_save": true;该设置仅在显式保存时生效,不依赖焦点丢失,且对所有文件类型有效但不影响空行。

Sublime Text 保存时自动 trim_trailing_white_space
默认不开启,必须手动配置。关键不是装插件,而是改 Preferences.sublime-settings 里的 trim_trailing_white_space_on_save 项。
- 打开 Preferences → Settings(左右双栏),在右侧用户设置里加这一行:
"trim_trailing_white_space_on_save": true
- 别写错键名——常见拼错是
triming、trailing_space(少下划线)或大小写混用 - 该设置对所有文件类型生效,但不会影响空行本身(只删行末空格和 Tab)
- 如果用了
file_exclude_patterns或folder_exclude_patterns排除了某些路径,记得检查目标文件是否被意外跳过
为什么改了没反应?检查 save_on_focus_lost 和语法高亮范围
即使开了 trim_trailing_white_space_on_save,也得真“保存”才触发——单纯切出窗口不算。很多人误以为焦点丢失(save_on_focus_lost)也会 trim,其实不会。
-
save_on_focus_lost是另一个独立开关,设为true才会在切走时自动保存,但 trim 行为仍依赖trim_trailing_white_space_on_save - 某些语法(比如 Markdown 的代码块内、HTML 的
<pre class="brush:php;toolbar:false;"></code> 标签里)Sublime 不会主动 trim,这是预期行为,不是 bug</li> <li>如果某类文件(如 <code>.log</code> 或自定义扩展名)没生效,检查右下角语法标识是否正确;错误的 syntax 定义可能导致设置未加载</li> </ul> <H3>想局部禁用?用 per-syntax 设置覆盖全局</H3> <p>有些场景不该 trim:比如写 shell 脚本时靠末尾空格对齐注释,或处理固定宽文本。这时不能关全局,得按语法单独关。</p> <ul> <li>打开 <strong>Preferences → Settings – Syntax Specific</strong>(确保当前文件语法已正确识别)</li> <li>在弹出的 JSON 里加:<pre class="brush:php;toolbar:false;">"trim_trailing_white_space_on_save": false</pre> - 这个文件类型(如
ShellScript)下次打开就会继承该设置,优先级高于全局 - 注意:该文件必须已保存且有正确扩展名,否则 Sublime 可能无法绑定 syntax-specific 配置
插件方案(如 TrailingSpaces)适合什么人?
纯配置搞不定时再考虑插件。比如你需要高亮显示空格、批量清理旧文件、或配合 Git 提交前校验——这些是原生设置做不到的。
-
TrailingSpaces插件会用浅色背景标出末尾空格,按ctrl+alt+t(Win/Linux)或cmd+alt+t(Mac)手动清理 - 它不干扰原生
trim_trailing_white_space_on_save,可共存;但若两者都开,可能造成重复操作感 - 插件在大文件(>10MB)上可能卡顿,尤其开启实时高亮时;建议在
TrailingSpaces.sublime-settings里关掉"highlight_on_save"
save 时生效,而很多人习惯 Ctrl+S 后立刻切走,却没留意状态栏是否真显示“saved”。










