VSCode新建文件默认换行符需设为LF以避免协作问题:在用户级settings.json中添加"files.eol": "\n"并重载窗口;该设置仅影响未指定换行符的新文件,且易被工作区设置、.editorconfig或Git配置覆盖。

VSCode 新建文件默认用 CRLF(Windows)或 LF(macOS/Linux),但跨平台协作必须统一为 LF,否则 Git 会报 warning: CRLF will be replaced by LF,Prettier 会报 Expected linebreaks to be 'LF' but found 'CRLF'——这不是 bug,是配置没对齐。
怎么让新建文件一打开就是 LF
核心就一条配置:"files.eol": "\n"。它只影响“未指定换行符”的新文件(比如新建一个空 .js 或 .py),不改已有文件。
- 按
Ctrl+,(Windows/Linux)或Cmd+,(macOS)打开设置 → 搜files.eol→ 点 “Edit in settings.json” - 添加或修改这一行:
"files.eol": "\n"(注意:是字符串"\n",不是文字 “LF”,也不是"lf") - 保存后必须执行
Ctrl+Shift+P→ 输入Developer: Reload Window重载窗口,否则新建文件仍沿用旧行为
为什么改了 settings.json 还是 CRLF
VSCode 的换行符设置有明确优先级:工作区设置 > 用户设置;EditorConfig > VSCode 原生设置。常见覆盖源有三个:
- 项目根目录存在
.vscode/settings.json,里面写了"files.eol": "\r\n" - 你打开了多根工作区(
.code-workspace),其配置中显式设了files.eol - 装了
EditorConfig for VS Code插件,且项目有.editorconfig,其中含end_of_line = crlf
验证方式:右下角状态栏点开换行符显示,再看它是否随你点击切换而变化;如果点不动或切完立刻回弹,说明某层配置在接管。
当前文件怎么立刻切到 LF(救急用)
这是最常用、最即时的操作,不依赖任何配置:
- 打开任意文本文件,右下角状态栏显示
CRLF或LF - 点击它 → 选
LF→ 编辑器立刻重绘所有换行(不需保存就可见效果) - 但必须手动
Ctrl+S才真正写入磁盘;否则关掉重开,还是原格式 - 注意:这个操作仅限当前文件,不会改变默认行为,也不能解决 Git 脏提交——只是临时查看或调试用
files.eol 不等于“保存时自动转换”
files.eol 只控制新插入的换行(比如你按回车新增的那几行),它不会重写已有行尾。也就是说:
- 打开一个
CRLF文件 → 改"files.eol": "\n"→ 新增行是LF,老行仍是CRLF - 想真正统一整份文件,必须显式触发换行重写:用命令面板运行
Change End of Line Sequence,或点状态栏切换后再保存 - 如果切换后一保存又变回
CRLF,大概率是git config core.autocrlf设为true(Windows 默认),Git 在保存时偷偷还原了
真正稳的方案是三件套对齐:VSCode 用户级 settings.json + 项目根目录 .gitattributes(内容为 * text=auto eol=lf)+ 全局 Git 配置(git config --global core.autocrlf false)。缺一环,换行符就可能漂移。


















