sublime text 的 default_line_ending: "lf" 仅对新建空白文件生效,不影响已存在或加载的文件;右下角显示的 crlf/lf 是当前文件真实格式,点击可手动切换,但非自动批量转换;真正可靠的换行符统一应由 git 的 core.autocrlf 和 .gitattributes 控制,编辑器配置仅为辅助。

Sublime Text 本身不支持“保存时自动按项目规则转换行尾符”——它没有内置的跨平台换行符协商机制,所谓“自动转换”只能靠组合配置+手动干预实现。
为什么改了 default_line_ending 还是 CRLF?
因为这个设置只影响 Ctrl+N 新建的空白文件,对已存在文件、拖进来的文件、从磁盘加载的文件完全无效。常见错误是以为改了它就能让所有 Python 文件变 LF,结果打开一个旧 .py 文件,右下角还是显示 CRLF。
- 状态栏显示 CRLF/LF 是当前文件真实格式,不是“预期格式”
- 点击状态栏的 CRLF/LF 可以立刻切换(等价于执行
Convert Line Endings命令),但这是单文件操作 - 如果项目里混着 LF 和 CRLF,
default_line_ending不会帮你统一
如何让保存时自动转成 LF(或 CRLF)?
Sublime 没有原生的“保存时自动转换”开关,但可以通过插件或外部工具链补足。最轻量的做法是配合 .editorconfig + EditorConfig 插件:
- 在项目根目录放
.editorconfig,写入:[*]\nend_of_line = lf
- 安装 Package Control → EditorConfig 插件(需重启)
- 插件会在打开文件时读取
.editorconfig,并自动设好line_ending视图设置 - 注意:它不会修改已打开文件的换行符,只对新加载的文件生效;保存时是否真转,取决于你有没有手动点过状态栏切换或用过
Convert Line Endings
怎么批量修复整个项目的换行符?
别指望 Sublime 自己遍历目录做转换。安全又可控的方式是用命令行 + dos2unix 或 unix2dos:
- macOS/Linux:
find . -name "*.py" -exec dos2unix {} \; - Windows(WSL):
find . -name "*.js" -exec unix2dos {} \; - 确认前先用
file *.py查看当前格式,避免误操作 - Sublime 内部批量操作不可靠:全选多个标签 → 右键 →
Convert Line Endings有时只作用于当前激活标签,且不递归子目录
容易被忽略的关键点
很多人花时间调配置,最后发现根本问题不在 Sublime —— Git 才是幕后换行符管理者。Windows 上 core.autocrlf=true 会导致检出时自动转 CRLF,提交时再转回 LF。这时你在 Sublime 里切来切去,Git 下次 pull 又给你变回去。真正要稳定的换行行为,得先管住 Git 的 autocrlf 和 .gitattributes,否则编辑器层的所有设置都只是临时补丁。











