Windows环境下VSCode保存文件时LF行尾自动转为CRLF问题求助
问题原因排查及解决方案
常见触发原因
保存时行尾自动转为CRLF的问题,通常是以下几个优先级更高的配置覆盖了全局files.eol设置导致的:
逐一解决步骤
1. 处理Git行尾自动转换配置
Windows系统下Git默认开启core.autocrlf会自动将拉取的文件转为CRLF,提交时再转回LF,是最常见的诱因:
- 先关闭全局自动转换:执行命令
git config --global core.autocrlf false - (推荐)在项目根目录新建
.gitattributes文件,写入以下内容,强制所有项目参与人员的Git行尾统一为LF,不受本地配置影响:
* text=auto eol=lf *.png binary *.jpg binary *.exe binary
- 配置完成后执行
git add --renormalize .批量重写所有文件的行尾为LF,然后提交即可。
2. 完善Prettier行尾配置
已配置Prettier但未明确指定行尾规则时,Prettier默认值auto会跟随系统行尾,Windows下自动输出CRLF:
- 在项目的Prettier配置文件(.prettierrc/.prettierrc.json等)中新增配置项:
"endOfLine": "lf"
3. 完善ESLint行尾校验规则
确保ESLint自动修复时统一输出LF:
- 在项目的ESLint配置文件中新增规则:
"linebreak-style": ["error", "unix"]
4. 检查VSCode工作区配置是否覆盖全局
VSCode中工作区配置优先级高于全局配置,你贴出的是全局settings.json,需要检查项目内配置:
- 打开项目根目录下的
.vscode/settings.json文件,确认没有"files.eol": "\r\n"配置,如有修改为"files.eol": "\n"即可。
5. 检查特定文件类型的专属配置
你现有的配置中存在[dart]这类文件类型的专属配置块,这类块内的配置会覆盖全局通用配置:
- 确认所有文件类型专属配置块中没有设置单独的eol规则,如有需要统一补充
"files.eol": "\n"到对应块内,例如:
"[dart]": { "editor.formatOnSave": true, "editor.formatOnType": true, "files.eol": "\n", // 其他原有配置 }
6. 批量转换存量文件行尾
全局files.eol仅对新建文件生效,已存在的CRLF文件需要手动转换一次:
- 单个文件可直接点击VSCode右下角状态栏的行尾标识(显示为CRLF/LF),选择LF即可修改
- 全项目批量转换可执行命令:
npx prettier --write .
验证方法
修改配置后重启VSCode,打开任意文件修改后保存,观察右下角行尾标识是否保持为LF即可。
问题演示动图:
内容的提问来源于stack exchange,提问作者David Jentjens
相关产品推荐
相关产品推荐


