开启 ensure_newline_at_eof_on_save 需在用户设置中添加 "ensure_newline_at_eof_on_save": true;若无效,常见原因包括误改默认设置、语法专属设置覆盖、文件编码异常或插件冲突。

如何开启 ensure_newline_at_eof_on_save 设置
Sublime Text 默认不自动补空行,必须手动启用该功能。它属于保存时的格式化行为,不是实时编辑行为,只在你按 Ctrl+S(Windows/Linux)或 Cmd+S(macOS)时触发。
- 打开
Preferences → Settings(左右两个面板同时出现) - 在右侧用户设置面板中添加或修改这一行:
"ensure_newline_at_eof_on_save": true
- 保存文件(
Ctrl+S),设置立即生效
为什么改了没反应?常见失效原因
这个设置看似简单,但实际容易被其他配置覆盖或忽略上下文。最常踩的坑是:
- 误改了左侧「默认设置」面板——它会被用户设置覆盖,且修改后重启也不生效
- 当前文件类型有单独的语法专属设置(比如
Python.sublime-settings),会优先于全局设置 - 文件本身编码异常(如
UTF-8 with BOM)或含有不可见控制字符,导致 Sublime 无法正确识别 EOF - 插件冲突:某些格式化插件(如
EditorConfig、AutoPEP8)可能在保存时覆盖此行为
ensure_newline_at_eof_on_save 和 trim_trailing_white_space_on_save 的关系
这两个设置经常一起用,但作用独立、互不干扰。前者只关心最后一行是否为换行符;后者只删除每行末尾的空格/制表符。
- 如果两者都设为
true,保存时先删行尾空格,再确保结尾有换行——顺序固定,不可调换 - 若只开
trim_trailing_white_space_on_save,而关掉ensure_newline_at_eof_on_save,文件可能以非空行结尾(比如最后一行是print("done"),后面没换行) - Git 提交时,缺少结尾换行符会显示为
no newline at end of file警告,开启此项可避免
想对特定语言生效?需要语法专属设置
全局设置对所有文件生效,但有时你只想让 Python 或 JSON 文件自动补空行。这时要创建对应语言的设置文件:
- 菜单栏选择
Preferences → Settings – Syntax Specific - 此时打开的是当前文件类型的专属设置(如
Python.sublime-settings) - 在里面写入:
{"ensure_newline_at_eof_on_save": true} - 注意:该文件必须是 JSON 格式,不能有注释,且顶层必须是对象(花括号包裹)
这种写法比全局设置更精准,也更容易被团队配置同步——比如把 .sublime-project 里也嵌入类似规则。










