关键配置是"files.trimFinalNewlines",它在保存时将文件末尾连续换行符压缩为一个;需手动设为true,默认false,且可能被Prettier、EditorConfig等扩展或配置覆盖。

VSCode 删除末尾空白行的配置项叫什么
关键配置是 "files.trimTrailingWhitespace",它控制保存时是否自动删掉每行末尾的空格和制表符。但注意:它**不删空行**——也就是文件末尾连续的换行符(\n 或 \r\n)不会被它处理。
真正删末尾空白行得靠 "files.trimFinalNewlines"
这个配置才是专门干这事的:保存时把文件末尾所有连续的换行符压缩成一个(即保留最后一行后的单个换行,删掉多余的)。它默认是 false,必须手动打开。
- 在 VSCode 设置里搜
trim final newlines,勾选对应选项 - 或直接编辑
settings.json,加这一行:"files.trimFinalNewlines": true
- 该设置对当前工作区生效;如果想全局启用,改用户 settings.json
- 它只在「保存文件时」触发,不会实时清理,也不影响非保存操作
为什么改了配置还是没删?常见原因
最常踩的坑不是配置错,而是被其他扩展或格式化工具覆盖了行为。
-
Prettier扩展默认开启endOfLine: "lf"和insertPragma: false,但不干涉末尾换行数;不过如果它设了"prettier.endOfLine": "auto"且文件已有 CRLF,可能干扰结果 -
EditorConfig插件若项目根目录有.editorconfig,其中的trim_trailing_whitespace = true只管行尾空格,不处理末尾空行;而insert_final_newline = true是确保「有」换行,和「删多余」相反,二者逻辑冲突 - 某些语言模式(如
jsonc)或自定义 formatter 可能忽略 VSCode 原生 trim 配置,优先走自己的规则
想彻底统一行为,推荐组合配置
光开 trimFinalNewlines 不够稳,尤其团队协作时。建议同步配好关联项:
-
"files.trimTrailingWhitespace": true—— 行尾空格/Tab 一并清掉 -
"files.insertFinalNewline": true—— 确保文件以单个换行结尾(和 trimFinalNewlines 协同:后者删多,前者补缺) - 关掉可能冲突的扩展自动格式化,比如在
settings.json中为特定语言禁用:"[javascript]": { "editor.formatOnSave": false } - 如果用 Prettier,确认它没开启
formatOnSave,或把它设为唯一格式化工具,并在prettier.config.js里明确endOfLine: "lf"
末尾空行这事看着小,但 Git 提交时容易引发无意义的 diff,尤其跨平台协作。真正麻烦的不是找不到开关,而是多个配置层叠后互相覆盖——得一层层确认谁在说话、谁被静音。


















