Python文件缩进必须设为4空格且禁用Tab,需三者协同:右下角识别为Python语言ID、settings.json中"[python]"块内配置"editor.insertSpaces":true、"editor.tabSize":4、"editor.detectIndentation":false,并手动转换已有混用缩进。

VSCode 中 Python 代码必须用 4 个空格缩进,不能用 Tab,否则会触发 IndentationError;这不能靠全局设置解决,必须通过语言特定配置 + 状态栏识别 + 关闭自动检测三者协同生效。
为什么 Python 文件右下角显示 Plain Text 就缩进错乱?
VSCode 不按文件扩展名(如 .py)决定语言行为,而依赖右下角状态栏识别出的 language ID。如果显示 Plain Text,说明它根本没把当前文件当 Python 处理,所有 [python] 配置都不会加载。
- 点击右下角语言名 → 在弹出菜单顶部确认真实 ID 是
python(不是py、python3或text) - 若不对,从菜单里手动选
Python;之后 VSCode 才会读取[python]块里的设置 - 临时修复:按
Ctrl+Shift+P→ 输入Change Language Mode→ 选python
settings.json 里怎么写才真正生效?
写错位置等于白配。全局 "editor.tabSize": 4 会让 JSON/JS/HTML 全部变成 4 空格,Python 反而可能被覆盖;必须把配置锁死在 [python] 块内,并显式关闭自动检测。
- 打开
settings.json(设置界面右上角 {} 图标) - 添加以下内容,**不要**删掉已有配置,只追加或修改对应块
{ "[python]": { "editor.insertSpaces": true, "editor.tabSize": 4, "editor.detectIndentation": false, "editor.autoIndent": "full" } }- 删掉根对象里任何
"editor.tabSize"或"editor.insertSpaces"的全局设置,避免干扰
老文件缩进混乱(混用 Tab 和空格)怎么办?
配置只影响新输入和格式化行为,对已存在的混合缩进无效。VSCode 不会自动“清理”历史缩进,必须手动转换。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- 确保光标在 .py 文件内,按
Ctrl+Shift+P→ 输入Convert Indentation to Spaces→ 回车 - 再输一次
Indent Using Spaces→ 选4 - 如果
Format Document右键菜单灰掉,说明没装或没启用 Python 格式化器(如black或autopep8),此时不能依赖Shift+Alt+F,只能走上面两步 - 开启
"editor.renderWhitespace": "all"后,能直接看到·(空格)和→(Tab),方便确认是否真清干净了
装了 Prettier / Black 之后缩进又不听 settings.json 了?
Prettier 和 Black 这类格式化器完全绕过 editor.tabSize,它们用自己的配置项(如 tabWidth)控制缩进,优先级更高。
- 检查有没有项目级
.prettierrc或pyproject.toml(Black 用),里面写了"tabWidth": 2之类 —— 这会直接覆盖 VSCode 设置 - 想让 VSCode 设置起效,要么统一改成
"tabWidth": 4,要么在[python]块里加"editor.defaultFormatter": null,禁用格式化器接管 - 注意:
editor.defaultFormatter必须写在语言块里,写在顶层无效
最常被忽略的是 editor.detectIndentation: false —— 不关它,VSCode 一打开旧文件就会根据第一行缩进“自作主张”改掉你的设置,连 [python] 块都救不了。这个开关必须每种语言单独关,不是设一次就完事。

















