保存后代码没自动缩进最常见原因是插件未安装、editor.formatonsave为false或editor.defaultformatter未设为"esbenp.prettier-vscode",三者缺一不可;同时需确保.prettierrc.json中tabwidth与vscode的editor.tabsize一致,并关闭editor.detectindentation。

为什么保存后代码没自动缩进?
最常见原因是三个开关没同时打开:插件没装、editor.formatOnSave 关闭、或 editor.defaultFormatter 没指向正确插件。哪怕只漏一个,Ctrl+S 都不会触发格式化。
- 确认已安装官方插件
esbenp.prettier-vscode(不是 “Prettier” 或 “Prettier Code Formatter” 等相似名) -
editor.formatOnSave必须为true,且不能被语言专属设置覆盖(例如"[javascript]": { "editor.formatOnSave": false }会关掉 JS 文件) -
editor.defaultFormatter设为"esbenp.prettier-vscode";若只想对 HTML 生效,改用"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 改完
settings.json后必须重启 VSCode 窗口,否则配置不生效
缩进参数怎么和 Prettier 对齐?
Prettier 不读 VSCode 的 editor.tabSize,它只认自己的 tabWidth 和 useTabs。两者不一致会导致保存时反复“抖动”——格式化完又变回原样。
- 在项目根目录放
.prettierrc.json,内容如:{ "tabWidth": 2, "useTabs": false, "semi": false, "singleQuote": true } - VSCode 设置里同步配:
"editor.tabSize": 2、"editor.insertSpaces": true、"editor.detectIndentation": false - HTML 特别注意:
html.format.indentInnerHtml设为true才会让内部子元素也缩进
不同语言要不同缩进,怎么配?
Python 要 4 空格,HTML 要 2 空格,Go 要 Tab——混在一个项目里时,不能只靠全局设置。
- 语言级配置优先级高于全局,直接写进
settings.json:"[python]": { "editor.tabSize": 4, "editor.insertSpaces": true },<br>"[html]": { "editor.tabSize": 2, "editor.insertSpaces": true },<br>"[go]": { "editor.insertSpaces": false } - 如果用了
.editorconfig,它的规则优先级更高,会覆盖 VSCode 设置;建议团队统一用它,内容示例:root = true<br>[*]<br>indent_style = space<br>indent_size = 2<br>[*.py]<br>indent_size = 4
- 检查当前文件语言模式是否正确:右下角状态栏点语言名,选 “Change Language Mode”,避免 .js 文件被误识别为 TypeScript
格式化后代码错位或换行异常?
这不是缩进问题,而是 Prettier 的 printWidth 和 VSCode 的软换行冲突,或者 HTML 格式化选项没开全。
-
html.format.preserveNewLines设为true,否则 Prettier 可能删掉你手动加的空行 -
html.format.wrapLineLength默认是 120,如果设得太小(比如 40),会导致标签被强行折成多行,破坏结构 - 禁用
editor.wordWrap(设为"off"),否则编辑器软换行会和 Prettier 的硬换行打架 - 某些框架模板(如 Vue 的
<template></template>)需要额外配置:"vetur.format.options.tabSize": 2,否则 Vetur 会用自己的规则覆盖 Prettier
.editorconfig 和语言专属设置的叠加效应——它可能静默覆盖你刚调好的 settings.json,而且不报错、不提示。每次配置完,务必用一个真实文件测试保存行为,而不是只看设置项是否勾上。











