必须关闭detect_indentation,否则sublime会自动覆盖用户设置;需在settings–user中设"translate_tabs_to_spaces": true,并在python语法专属设置中配置"tab_size": 4和"translate_tabs_to_spaces": true,再手动reload syntax生效。

必须关掉 detect_indentation,否则无论你怎么设 tab_size 和 translate_tabs_to_spaces,打开已有文件时都会被自动覆盖——这不是 bug,是 Sublime 的默认行为。
为什么改了设置,按 Tab 还是插 \t?
根本原因是 translate_tabs_to_spaces 默认为 false,哪怕 tab_size 是 4,按 Tab 键插入的仍是单个制表符 \t,不是空格。
- 必须在用户设置(
Preferences → Settings – User)中显式写"translate_tabs_to_spaces": true - 如果只改
tab_size不改这个,缩进“看起来”没变,但实际字符是\t,和 PEP 8、ESLint、Black 等工具冲突 - 右下角显示
Tabs: 4≠ 用了 4 个空格;它只表示“当前缩进宽度为 4”,类型可能是Tab或Spaces,得点开确认
Python 文件缩进还是 2?去 Syntax Specific 改
全局设置对 .py 文件基本无效,因为 Python 语言包自带 Python.sublime-settings,里面硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。
- 路径:菜单
Preferences → Package Settings → Python → Settings – Syntax Specific - 只加这两行(别删原有内容):
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的
.py文件需手动执行Ctrl+Shift+P → Reload Syntax才刷新生效 - 其他语言同理:JavaScript、JSON、Vue 都要各自进对应的
Settings – Syntax Specific
已有代码缩进混乱,怎么一键统一?
Convert Indentation to Spaces 命令不等于“重排缩进”,它只做字符替换(\t → 空格),不改变空格数量。混用缩进时直接调用会失效。
- 先确保当前视图已正确识别语法(右下角显示
Python,不是Plain Text) - 执行
View → Indentation → Convert Indentation to Spaces—— 若菜单灰掉,说明检测到混合缩进,需手动删掉几行开头的\t再试 - 再执行
Ctrl+Shift+P → Indentation: Reindent Lines,它才按当前tab_size和translate_tabs_to_spaces重新计算整篇缩进 - 顺手开
"draw_white_space": "all",让空格显示为·、Tab 显示为→,一眼识别混用
最容易被忽略的是优先级链:文件内注释(如 # indent: 2)>项目级 .editorconfig >语法专属设置 > 全局设置。只要其中任一环存在,你的用户配置就可能静默失效。











