根本原因是文件混用\t和空格且Sublime默认启用detect_indentation;需禁用该选项、设置语法专属缩进、手动清理混合缩进并重排,EditorConfig优先级最高。

根本原因不是缩进“没对齐”,而是文件混用了 \t 和空格,且 Sublime 默认用 detect_indentation 自动劫持你的设置——不关它,其他配置全白配。
为什么刚打开 Python 文件就报 TabError?
Python 报 TabError: inconsistent use of tabs and spaces in indentation,90% 是因为文件里既有 \t 又有空格,而 Sublime 打开时自动启用 detect_indentation:只要前几行出现一个 \t,它立刻把当前文件切进 “Tabs” 模式,无视你设的 "translate_tabs_to_spaces": true。
- 右下角显示
Tabs: 4就是它在生效,不是你没改对 - 必须在
Preferences → Settings – User中加"detect_indentation": false,否则所有后续配置都只是临时起效 - 已打开的文件不会自动刷新,要手动
Ctrl+Shift+P→ 输入Reload Syntax回车
为什么 .py 文件缩进还是 2 空格?
全局设置对 Python 文件基本无效,因为 Python 语言包自带 Python.sublime-settings,里面硬写了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。
- 先打开一个
.py文件,确认右下角显示的是Python(不是Plain Text) - 菜单 →
Preferences → Settings – Syntax Specific,右侧只加两行:"tab_size": 4和"translate_tabs_to_spaces": true - 别碰全局
Settings – User里的tab_size,除非你想让 JSON 或 Markdown 也用 4 空格
Convert Indentation to Spaces 菜单灰掉了怎么办?
灰掉 = Sublime 检测到混合缩进(Indentation: Mixed),这是保护机制,不是功能失效。它拒绝自动替换,怕把 \t 错替成 2 或 8 个空格,导致层级塌缩。
- 先开
"draw_white_space": "all",让\t显示为→、空格为· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→),保存后再试 - 或临时切语法为
Plain Text(右下角点击 → 选Plain Text),再执行转换 - 转完后务必执行
Indentation: Reindent Lines,否则缩进层级可能未按新规则重算
旧文件里的 \t 不会自动消失,这点最容易被忽略
所有设置只控制“接下来按 Tab 插什么”,对已有 \t 字符完全无感。状态栏显示 Spaces: 4 只代表未来行为,不代表历史内容已清理。
- 当前文件统一处理:
Ctrl+A全选 → 右键 →Indentation → Convert Indentation to Spaces - 批量处理项目?Sublime 不支持跨文件操作,Linux/macOS 下可用:
find . -name "*.py" -exec sed -i 's/\t/ /g' {} \;(注意空格数要匹配tab_size) - EditorConfig 插件若存在,且含
indent_style = tab,它会直接覆盖所有 Sublime 设置,优先级最高


















