sublime text 默认不自动添加末尾换行符,需在用户设置中启用 "ensure_newline_at_eof_on_save": true;该功能受编码、语法类型及插件(如 editorconfig)影响,建议配合 "trim_trailing_white_space_on_save": true 使用以避免冗余空行。

Sublime Text 默认不会在保存文件时自动添加末尾换行符(EOL),但可以通过配置 ensure_newline_at_eof_on_save 实现,且该行为受文件编码、换行符类型和语法高亮影响,不是所有场景都生效。
如何开启自动添加末尾换行符
打开 Sublime Text 的用户设置(Preferences → Settings – User),在 JSON 对象中添加或修改以下字段:
{
"ensure_newline_at_eof_on_save": true
}
保存后,下次保存文件时若当前光标不在行尾或最后一行非空行,Sublime 会自动在文件末尾插入一个换行符。注意:该选项仅在保存时触发,不实时补全;若文件已存在末尾换行,不会重复添加。
为什么有时设置了也不生效
常见失效原因包括:
-
ensure_newline_at_eof_on_save对二进制文件、未识别编码(如UTF-16)或hexadecimal视图无效 - 某些插件(如
EditorConfig)会覆盖此设置,优先读取项目根目录下的.editorconfig中的insert_final_newline - 如果文件语法被识别为
Plain Text以外的类型(如JSON、YAML),部分语法包自带保存钩子,可能跳过默认行为 - 手动执行
Save As时,若目标路径权限不足或磁盘只读,写入失败会导致换行未添加且无提示
配合 trim_trailing_white_space_on_save 使用更稳妥
单独启用 ensure_newline_at_eof_on_save 可能导致“空行+换行”冗余(例如原文件以空白行结尾)。建议同步开启:
{
"ensure_newline_at_eof_on_save": true,
"trim_trailing_white_space_on_save": true
}
这样会在保存前先清理末尾空格/制表符,再确保换行符存在,最终效果更接近 Git 和 POSIX 工具链的预期。注意:该组合对已有文件生效,但不会修改已打开未保存的缓冲区状态,需主动保存一次。
不同换行符类型(CRLF/LF)是否影响该功能
不影响逻辑,但影响实际插入的字符:
- 若当前文件换行符是
CRLF(Windows 风格),则插入\r\n - 若为
LF(Unix/macOS 风格),则插入\n - 换行符类型由
default_line_ending设置或文件首次加载时检测决定,ensure_newline_at_eof_on_save尊重当前视图的line_endings属性,不强制转换
如果需要统一换行风格,应额外配置 default_line_ending 或使用插件(如 LineEndings)批量转换。
真正容易被忽略的是:这个设置对新创建的空文件不生效——第一次保存时若内容为空,Sublime 不会自动加换行符,必须手动输入至少一个字符再删掉,或保存后按 Ctrl+Shift+P 调出命令面板运行 Insert Line at End of File(如有安装对应插件)。











