vscode 新建文件默认用 lf 需设置 "files.eol": "\n",并确保无 workspace 或 .editorconfig 覆盖;重启窗口后生效,该配置全局统一所有新文本文件换行符。

VSCode 怎么让新建文件默认用 LF 换行符
VSCode 默认会根据系统决定新建文件的换行符(Windows 用 CRLF,macOS/Linux 用 LF),但多数现代项目(尤其跨平台协作、Git 仓库、Docker 环境)要求统一为 LF。这不是靠“保存时转换”就能解决的——必须改默认行为,否则每次新建 .js、.py、.json 文件,开头就是 CRLF,Git 会默默标记为“修改”,后续还可能触发 Prettier/ESLint 报错。
核心操作是改两个地方:"files.eol" 控制默认换行符,"files.defaultLanguage" 不影响它,别被误导。真正起效的是:
-
"files.eol"设为"\n"(注意是字符串,不是LF文字) - 确保没有 workspace 级配置覆盖用户级设置(比如项目根目录有
.vscode/settings.json且写了"files.eol": "\r\n") - 重启 VSCode 或重载窗口(
Ctrl+Shift+P→Developer: Reload Window),新文件才生效
为什么改了 settings.json 还是 CRLF?检查这三处
常见现象:在 settings.json 写了 "files.eol": "\n",新建文件打开一看状态栏还是 CRLF。大概率卡在这几个地方:
- 当前是**文件夹打开模式**,而项目根目录下有
.vscode/settings.json,它的"files.eol"覆盖了全局设置(优先级:workspace > user) - 打开了一个**多根工作区(.code-workspace)**,其配置里显式设了
"files.eol": "\r\n" - 用了插件如
EditorConfig for VS Code,而项目根目录的.editorconfig里写了end_of_line = crlf—— 它会强行覆盖 VSCode 原生设置
验证方法:按 Ctrl+Shift+P 输入 Preferences: Open Settings (JSON),确认看到的是你编辑的那个 JSON;再看状态栏右下角点击换行符显示(CRLF / LF),点它可临时切换,但只是当前文件生效,不改默认。
Git + VSCode 混用 CRLF/LF 的典型报错
换行符不一致最常暴露在 Git 场景里,错误信息直指根源:
-
warning: CRLF will be replaced by LF(提交时 Git 自动转,但本地文件仍是 CRLF) -
fatal: CRLF would be replaced by LF(Git 配置core.autocrlf=true且文件含混合换行) - Prettier 报
Expected linebreaks to be 'LF' but found 'CRLF'
这些不是 VSCode 的错,但源头往往是 VSCode 新建文件用了 CRLF。解决要双管齐下:VSCode 设 "files.eol": "\n" + Git 设 git config --global core.autocrlf input(Linux/macOS)或 false(Windows 上若确定全用 LF)。
不同语言文件是否要单独设置?不需要
"files.eol" 是全局默认值,对所有新文件生效,不管后缀是 .ts、.yml 还是 .env。无需为每种语言写 language-specific 设置(比如 "[javascript]": { "files.eol": "\n" })。那些配置只在文件已存在、且语言模式被正确识别后才参与编辑行为,不影响“新建空白文件”的初始换行符。
唯一例外是模板文件(如通过 File > New File from Template 插件创建),那得看插件自己怎么读取默认值——但原生 VSCode 新建文件,只认 "files.eol"。
记住:换行符是文件级别的元信息,不是语法特性。设一次,所有新建文本文件都走 LF,省得每次手动点状态栏切换。











