必须手动配置settings.json:禁用自动检测、强制空格缩进、启用indentinnerhtml和preservenewlines;prettier需在[html]块指定默认格式化器并配.prettierrc,否则仍用内置引擎。

VSCode 里改 HTML 缩进和换行,直接改 settings.json
VSCode 默认的 HTML 格式化很基础,缩进不统一、属性挤在一行、嵌套不清晰——根本没法直接用。必须手动干预配置文件,否则每次保存都在“倒退”。
关键不是装插件,而是先锁定编辑器行为:禁用自动检测、强制空格缩进、明确子元素是否缩进。
-
"[html]"块内设置"editor.tabSize": 2和"editor.insertSpaces": true,避免混用 tab 和空格 - 加
"html.format.indentInnerHtml": true,否则<div> 这种嵌套不会缩进 <li> <code>"html.format.preserveNewLines": true要开,不然你手动换的行全被抹掉 - 别信“Detect indentation”,设成
false才能稳定;历史文件缩进混乱时,它只会让格式化结果更 unpredictable - 必须在 VSCode 设置中搜索
default formatter,对 HTML 类型显式选esbenp.prettier-vscode -
.prettierrc至少写清这三项:"tabWidth": 2、"useTabs": false、"htmlWhitespaceSensitivity": "css"(后者影响标签间空格处理) - 如果项目用 Webpack/Vite 构建,记得把
.prettierrc提交进 Git,否则 CI 流水线格式化结果和本地不一致 - 用
editor.getHtml({ indentation: ' ' })才生效,值必须是字符串(如两个空格),不能是数字 - 如果导出后仍无缩进,检查是否启用了
avoidInlineStyle或cleanCSS,它们可能干扰结构序列化 - 属性顺序要自定义?得用
attributes回调函数,但注意:这个函数只处理组件级属性,全局标签的lang等属性不走这里 - 进
Settings → Editor → Code Style → HTML → Other,勾上Do not wrap attributes才能让长属性不折行;不勾的话,即使wrapLineLength设成 200,它也会强行拆 - 导出 XML 配置前,先点右上角齿轮 →
Reset to Default,再微调,避免旧配置残留干扰 - 团队共用配置时,XML 文件里
<option name="USE_TAB_CHARACTER" value="false"></option>这类布尔值必须显式声明,不能靠默认
Prettier 插件不是“装了就完事”,得配 .prettierrc
只启用 Pretterr 插件,它默认用自己那套规则(比如单引号、80列折行),跟团队规范大概率冲突。真正起效的是项目根目录下的 .prettierrc 文件。
常见踩坑点:VSCode 设置里没指定默认格式化工具,结果右键“Format Document”调用的还是内置引擎,Prettier 形同虚设。
GrapesJS 导出 HTML 时缩进失效?问题出在 toHTML() 的参数传法
GrapesJS 的 editor.getHtml() 返回的是“原始字符串”,不是渲染后的 DOM。想控制导出代码缩进,不能靠编辑器设置,必须在调用时传参。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
很多人试过 editor.getHtml({ indent: ' ' }) 没反应,其实是参数名错了——正确字段是 indentation,不是 indent。
WebStorm 里 HTML 格式化“不生效”,大概率卡在模板设置没关
WebStorm 的 HTML 格式化逻辑比 VSCode 更细,但也更隐蔽。点了 Ctrl + Alt + L 没反应,或者缩进错乱,往往是因为“Live Templates”或“File and Code Templates”里的预设覆盖了你的规则。
尤其要注意 Settings → Editor → File and Code Templates 里的 HTML 模板,如果里面写了硬编码缩进(比如开头几个空格或 tab),新建文件时就会继承,后续格式化也救不回来。
最麻烦的不是配不对,而是不同环节用不同工具:GrapesJS 导出、VSCode 保存、CI 流水线 lint —— 每个都走一套规则。真要统一,就得把 .prettierrc 当唯一权威,其他地方全对齐它,连 GrapesJS 的 toHTML 参数也要按 tabWidth 动态生成。










