必须关闭detect_indentation,否则sublime会扫描前200行并强制切回tab模式覆盖所有设置;translate_tabs_to_spaces必须设为true(布尔值),仅设tab_size无效;python文件需在语法专属设置中配置tab_size和translate_tabs_to_spaces,并执行reload syntax生效。

必须关掉 detect_indentation,否则打开旧文件时 Sublime 会扫描前 200 行,只要发现一个 \t 就强制切回 Tab 模式,覆盖你所有设置——这不是 bug,是默认行为。
为什么改了 tab_size 和 translate_tabs_to_spaces 还是插出 \t?
根本原因是 translate_tabs_to_spaces 默认为 false,它不控制显示宽度,只控制按键输入行为。只设 tab_size 不设这个,按 Tab 键插入的永远是单个 \t 字符,不是空格。
-
translate_tabs_to_spaces必须是布尔值true(不能加引号),否则整个缩进逻辑失效 - 右下角显示
Spaces: 4才表示生效;Tabs: 4只说明当前缩进宽度为 4,类型仍是制表符 - 粘贴进来的
\t不受该设置影响,仍会原样保留
Python 文件为啥死活不认你的全局设置?
因为 Python 插件自带硬编码的 "tab_size": 2 和 "translate_tabs_to_spaces": false,全局设置会被语法专属配置完全屏蔽。
- 必须打开一个
.py文件 → Preferences → Settings – Syntax Specific - 在右侧添加这两行(不要删原有内容):
"tab_size": 4和"translate_tabs_to_spaces": true - 务必加上
"detect_indentation": false,否则一打开旧文件就回退 - 已打开的
.py文件需手动执行Ctrl+Shift+P→Reload Syntax才刷新
已有混用缩进的文件怎么安全转?
Convert Indentation to Spaces 不是“重排缩进”,它只做行首 \t → 空格的机械替换,且严格按当前视图的 tab_size 值换算(比如设 4,就每个 \t 换成 4 个空格)。
- 菜单灰掉?说明 Sublime 检测到混合缩进(部分行是
\t,部分是空格),需先手动删掉几行开头的\t再试 - 转完后必须再执行
Ctrl+Shift+P→Indentation: Reindent Lines,它才真正按新规则重算整篇缩进层级 - 顺手开
"draw_white_space": "all",让\t显示为 →、空格显示为 ·,一眼识别混用点 - 优先级链:文件内注释(如
# indent: 2) > 项目级.editorconfig> 语法专属设置 > 全局用户设置——任一环存在都可能静默覆盖你的配置











