sublime text 通过内置设置 trim_trailing_whitespace_on_save: true 实现保存时自动删除非空行尾空格和tab,需正确写入用户设置json中,且不与trailingspaces插件共存。

保存时自动删掉行尾空格,靠的是 trim_trailing_white_space_on_save
这个设置项是 Sublime Text 内置的,不用装插件,改对了立刻生效。它只在手动执行 save(Ctrl+S / Cmd+S)时触发,不会影响粘贴、剪切或实时编辑行为。
常见错误现象:改了用户配置却没效果——大概率是因为写到了错误的 JSON 位置,或者用了中文标点、漏了逗号。
- 打开
Preferences → Settings,右侧用户设置面板里加这一行:"trim_trailing_white_space_on_save": true - 必须确保整段 JSON 语法合法:前后用
{}包裹,每行末尾有逗号(最后一行除外),键名用英文双引号 - 如果已有其他设置,别把它塞到字符串值里,比如不要写成
"font_size": 12, "trim_trailing_white_space_on_save": true却忘了前面的{和后面的} - 改完不用重启,保存文件后立刻测试:在某行末尾敲几个空格,按 Ctrl+S,空格就没了
trim_trailing_white_space_on_save 不会动空白行,想删空行得另配
这个选项只处理「非空行末尾的空格和 Tab」,对纯空行(即只有换行符的行)完全无感。如果你希望保存时也顺手干掉文件末尾多余的空行,得额外加一条:
- 在用户设置里再加一行:
"ensure_newline_at_eof_on_save": true - 它不会删除中间的空行,只保证文件结尾一定有一个换行符;配合
trim_trailing_white_space_on_save,能覆盖大多数“整洁保存”需求 - 注意:有些团队规范要求文件末尾**不能**有空行,这时反而要设成
false,否则会跟 Git diff 或 linter 冲突
不同语言/项目可能需要差异化处理,靠 Settings — Syntax Specific
比如 Markdown 文件里,两个空格加换行是换行语法,你肯定不想让 Sublime 把它删掉;又比如 Python 里缩进用 Tab,但行尾 Tab 没意义,该删。这时候全局开关就不够用了。
- 打开一个 .md 文件 →
Preferences → Settings — Syntax Specific - 在里面加:
"trim_trailing_white_space_on_save": false - 保存后,只有当前语法(Markdown)下关闭该功能,其他文件类型照常运行
- 路径和文件名不影响判断,Sublime 只认语法高亮类型(也就是右下角显示的那个名字)
插件冲突:装了 TrailingSpaces 就别开原生选项
TrailingSpaces 插件不仅能高亮、还能一键清理,但它和原生 trim_trailing_white_space_on_save 同时启用时,可能造成重复清理或光标跳动——尤其在保存瞬间闪一下。
- 如果已装
TrailingSpaces,建议关掉原生选项:"trim_trailing_white_space_on_save": false - 它的清理逻辑更细:可配置是否忽略正则匹配的行(比如注释末尾)、是否保留选区内的空格等
- 插件默认不自动触发,需手动按快捷键(如 Ctrl+Shift+P →
Trailing Spaces: Remove),这点比原生更可控
真正容易被忽略的是:某些项目用 pre-commit hook(比如 pre-commit + end-of-file-fixer)强制格式化,此时 Sublime 的自动清理反而会造成本地和提交后两次改动,diff 看起来很乱。这种情况下,最好统一交给工具链处理,Sublime 只负责高亮提醒。











