vs code shift+alt+f 无反应是因配置未对齐:文件后缀须为.html/.htm,右下角语言模式需设为html,settings.json中必须启用"html.format.enable": true、"editor.insertspaces": true、"editor.tabsize": 4、"html.format.indentinnerhtml": true,并禁用"editor.detectindentation"。

VS Code 按 Shift+Alt+F 没反应,先查这三件事
不是格式化功能坏了,而是底层配置没对上。常见现象是快捷键无效、右键菜单没有“格式化文档”、或者格式化后 和 贴着左边不缩进。
- 文件后缀必须是
.html或.htm,否则 VS Code 不会启用 HTML 格式化服务 - 右下角语言模式必须显示为
HTML;如果不是,按Ctrl+Shift+P输入Change Language Mode,手动选HTML - 打开
settings.json,确认有这一行:"html.format.enable": true—— 缺了它,整个格式化就是关着的
缩进必须用空格,且统一设为 4 个
Tab 在不同编辑器里宽度不一致(有人设成 2,有人设成 8),协作时同一段嵌套代码在你眼里塌一层,在别人眼里又多一层。空格是 ASCII 32 字面量,4 就是 4 个空格,渲染零偏差。
- 在
settings.json中强制启用空格:"editor.insertSpaces": true - 定义一级缩进宽度:
"editor.tabSize": 4 - 让
<style></style>和<script></script>内部也对齐外层标签:"html.format.indentInnerHtml": true - 禁用自动检测缩进:
"editor.detectIndentation": false,避免打开旧文件时被错误覆盖
<pre class="brush:php;toolbar:false;"></pre> 里的 HTML 缩进为什么一格式化就扁平?
因为 <pre class="brush:php;toolbar:false;"></pre> 只保留换行和空格,但浏览器默认样式会让字体变小、边距压垮、横向溢出——你写的缩进还在,只是看不见。
- 必须加 CSS 控制空白行为:
white-space: pre-wrap(保留空格 + 自动换行)或white-space: pre-line(合并连续空格但保留换行) - 外层建议包一层
<div class="code-block">,再加 <code>overflow-x: auto防止宽代码撑破容器 - 如果里面要放可执行的 HTML 片段,记得对
和 <code>>做 HTML 实体转义,否则会被浏览器解析 - 推荐设为
"css":把空白当 CSS 中的普通空格处理,保留你有意留的空行,适合绝大多数项目 - 别用
"strict":它会删掉很多合理换行,尤其在<pre class="brush:php;toolbar:false;"></pre>或含<em></em>/<strong></strong>的段落附近容易出问题 - 绝对不要设
"ignore":Prettier 完全跳过 HTML 空白处理,缩进可能错乱,且与 ESLint 规则冲突
Prettier 的 htmlWhitespaceSensitivity 到底该设啥
这个选项决定 Prettier 怎么处理标签之间的空格和换行,直接影响缩进后的视觉结构。设错会导致 <p></p> 和 <div> 之间空行消失、内联文本被挤成一行、甚至 <code><pre class="brush:php;toolbar:false;"></pre> 内容错位。
真正容易被忽略的是 editor.detectIndentation 默认开启这件事——它会偷偷读取你打开的第一个 HTML 文件的缩进风格,然后全局套用。一旦团队里有人提交了 Tab 缩进的旧文件,所有人新写的代码都会被带偏。所以必须显式关掉它。











