必须关闭 editor.detectindentation 并统一 vscode 与 prettier/eslint 的缩进设置:禁用自动检测,设 insertspaces 为 true、tabsize 为 4,确保 tabwidth 一致,启用 renderwhitespace 查看空白符,禁用 formatonpaste 防粘贴错位。

不是代码写错了,是 VSCode 缩进设置和格式化工具在互相打架——核心要关掉 editor.detectIndentation,统一 editor.insertSpaces 和 editor.tabSize,再确保 Prettier/ESLint 的 tabWidth 与之完全一致。
为什么刚打开文件就报 IndentationError?关掉 editor.detectIndentation
VSCode 默认会读取文件前几行(哪怕只是注释或空行)来“猜”缩进风格。一旦开头混了 Tab 和空格,或者首行缩进不标准,editor.detectIndentation 就会误判整份文件该用 Tab 还是空格、缩进几格。后续所有自动缩进、光标跳转、保存格式化都基于这个错误前提。
- 右下角状态栏显示
Tab Size: 4后跟着Tab(不是Spaces),说明已被误判为 Tab 模式 - 改用户级
settings.json没用——新打开的项目仍会复现 - 必须在项目根目录建
.vscode/settings.json,写入:{"editor.detectIndentation": false,"editor.insertSpaces": true,"editor.tabSize": 4}
按 Shift+Alt+F 格式化后反而更乱?查三处配置是否对齐
Shift+Alt+F 本身不决定缩进字符和宽度,它只触发格式化器(如 Prettier)。真正重写缩进的是插件,不是编辑器。错位本质是 VSCode 设置和插件规则冲突。
- 检查
editor.tabSize(VSCode 显示宽度)是否等于 Prettier 的tabWidth(实际写入宽度) - 确认
editor.insertSpaces是true,且 Prettier 配置里没设"useTabs": true - 运行
Ctrl+Shift+P→ 输入Format Document With,看哪个格式化器被标 ✓;如果esbenp.prettier-vscode在列表里但没被选中,说明 ID 没配对
怎么一眼揪出哪行混用了空格和 Tab?开 editor.renderWhitespace
默认状态下 VSCode 不显示空白字符,你看到的“对齐”可能是假象。Python 里一个隐藏 Tab 就直接触发 IndentationError,Git 也会把整行标为变更。
- 快捷键
Ctrl+Shift+P→ 输入Toggle Render Whitespace回车,立刻看到·(空格)和→(Tab) - 执行
Convert Indentation to Spaces前,务必先git add -p或提交当前状态——它会重写整份文件的缩进字符 - Python 用户额外注意:不要用全局查找替换删
\t,容易误伤字符串里的合法制表符
粘贴代码后缩进全崩?禁用 editor.formatOnPaste 并手动拉齐
VSCode 粘贴逻辑默认按“光标所在行首空白”对齐,不是按语义层级。从 2 空格缩进的函数里粘贴一段 4 空格写的日志,缩进就会错位,且 editor.formatOnPaste 会在中间强行“翻译”,失败后更乱。
- 立刻修复:全选(
Ctrl+A)→Shift+Alt+F→ 点右下角Spaces: 4→ 选Convert Indentation to Spaces - 防复发:在项目
.vscode/settings.json中加"editor.formatOnPaste": false - 已有混排旧文件,建议先手动转一次,再关
editor.detectIndentation,否则下次打开仍可能被误判
最麻烦的不是修一次,而是不同人编辑、不同插件介入、不同文件历史混杂导致“表面正常,保存即崩”。盯住 editor.detectIndentation 是否关闭、tabWidth 是否真对齐,比反复手动调更省时间。











