html标签嵌套缩进不生效,需启用html.format.indentinnerhtml;短标签挤成一行需调整wraplinelength和unformatted;prettier接管后须禁用内置格式器并配置默认格式化器;语言模式识别错误需手动设为html。

HTML 标签嵌套缩进不生效,先确认 html.format.indentInnerHtml 是否启用
这是最常被忽略的开关。默认值是 false,意味着 和 会和 同级对齐,整个结构扁平化。设为 true 才会让子标签相对于父标签缩进一层。
必须在 settings.json 中显式写入:
{
"html.format.indentInnerHtml": true
}
仅靠快捷键 Shift + Alt + F 或 formatOnSave 无法绕过这个配置项——它不启用,格式化器就按“无嵌套”逻辑处理。
为什么 <div><p>xxx</p></div> 还是挤成一行?检查 html.format.wrapLineLength 和 unformatted
VSCode 内置 HTML 格式器默认把短标签链压成单行,不是 bug,是行为策略。要让它按层级换行,得控制两个关键点:
-
html.format.wrapLineLength设为80~120(推荐100),太大会导致压行,太小又引发无意义折行 -
html.format.unformatted必须包含"pre","code","textarea",否则这些语义化块会被错误缩进或折行
示例配置:
{
"html.format.wrapLineLength": 100,
"html.format.unformatted": ["pre", "code", "textarea"]
}
Prettier 接管后 html.format.* 配置全失效,必须关内置、配插件
一旦装了 esbenp.prettier-vscode,VSCode 内置的 HTML 格式规则就自动停摆。但很多人只装插件、不关内置,结果两套规则打架,格式化结果随机波动。
必须做三件事:
- 在
settings.json中关闭内置:"html.format.enable": false - 指定 Prettier 为 HTML 默认格式化器:
"editor.defaultFormatter": "esbenp.prettier-vscode" - 项目根目录加
prettier.config.js,至少含:plugins: ['prettier-plugin-html']和htmlWhitespaceSensitivity: 'ignore',否则 Prettier 直接跳过 .html 文件
语言模式识别错位,Shift + Alt + F 根本不触发格式化
右下角状态栏显示 Plain Text 或 PHP,哪怕文件名是 index.html,格式化也不会启动。这不是快捷键问题,是 VSCode 压根没把它当 HTML 处理。
修复方式很直接:
- 点击右下角语言标识 → 选
Configure File Association for '.html'...→ 设为HTML - 或者手动切换:点击语言标识 → 输入
html→ 回车确认 - 验证是否生效:按
Ctrl + Shift + P输入Format Document With,看列表里有没有 HTML 对应的格式化器选项
真正难调的不是某次缩进,而是让所有机器、所有文件、所有打开时刻,都稳定识别语言类型并加载对应规则——状态栏那个小标签,永远比你想象中更关键。











