Shift + Alt + F 不生效因三配置未对齐:文件后缀须为.html/.htm、语言模式需设为HTML、settings.json中"html.format.enable": true必须启用。

Shift + Alt + F 按下没反应?不是编辑器坏了,是三个配置没对齐:文件后缀、语言模式、格式化开关。HTML 代码缩进不是“要不要做”的问题,而是“怎么让编辑器稳定、可预期地做”的问题。
VS Code 按 Shift + Alt + F 不生效的三件事
快捷键不响应,90% 是卡在这三个环节:
- 文件名必须以
.html或.htm结尾,否则 VS Code 不加载 HTML 格式化服务 - 右键编辑区空白处,菜单里要有“格式化文档”选项;没有?说明语言模式不是 HTML —— 按
Ctrl + Shift + P输入Change Language Mode,选HTML - 检查
settings.json中是否被覆盖了:"html.format.enable": true必须存在且为true;若被设为false或删掉,格式化直接禁用
editor.tabSize 和 html.format.indentInnerHtml 到底谁管什么
这两个常被混用,但职责完全不重叠:
-
editor.tabSize控制你按 Tab 键时插入几个空格(或显示宽度),只影响**手动输入行为**;它也间接决定格式化后的缩进宽度(Prettier 会读它) -
html.format.indentInnerHtml控制格式化时是否给、这类顶层标签的子元素加缩进,默认false,结果就是和紧贴左边——设成true才符合嵌套直觉 - 真正决定“格式化后每级缩进几个空格”的,只有
editor.tabSize;html.format.*下没有任何字段能改这个值
Prettier 的 htmlWhitespaceSensitivity 该选 "css" 还是 "strict"
这个选项直接影响格式化后换行和空格的分布,尤其在标签密集或含内联文本时:
立即学习“前端免费学习笔记(深入)”;
-
"css"(推荐):把空白当 CSS 中普通空格处理,保留你有意留的空行(比如<p></p>和<div> 之间),生成的结构清晰、易读 <li> <code>"strict":严格按 HTML 规范解析空白,会删掉很多你手动加的换行和缩进,导致代码“挤在一起”,<pre class="brush:php;toolbar:false;"></pre>附近尤其容易错乱 - 别选
"ignore":Prettier 完全跳过 HTML 空白处理,缩进可能错位,且与 ESLint 的indent规则冲突 -
<pre class="brush:php;toolbar:false;"></pre>只保留原始换行和空格,但默认white-space: pre会让字体变小、边距塌陷、横向溢出,缩进“存在但看不见” - 必须加 CSS:
white-space: pre-wrap(保留空格+自动换行)或white-space: pre-line(合并连续空格但保留换行) - 外层一定要包一层
<div class="code-block">,并设 <code>overflow-x: auto,否则宽代码直接撑破容器 - 别对
<pre class="brush:php;toolbar:false;"></pre>直接设text-indent—— 它在white-space: pre下无效;如真要模拟首行缩进,用<div> + <code>white-space: pre-wrap+text-indent最常被忽略的一点:缩进是给人看的,不是给浏览器执行的。所以别在
<pre class="brush:php;toolbar:false;"></pre>里靠空格写逻辑,也不要在p里靠做缩进 —— 那些都是临时补丁,迟早变成协作和维护的绊脚石。
<pre class="brush:php;toolbar:false;"></pre> 里的 HTML 缩进为什么保不住
这不是缩进失效,是浏览器默认样式压制了你的意图:



















