sublime text 缩进需同时配置 tab_size、translate_tabs_to_spaces 和 detect_indentation 才生效:仅改 tab_size 无效;python 等语言需单独配 syntax-specific 设置;detect_indentation 默认开启会静默覆盖用户配置,必须设为 false。

Sublime Text 的 Tab 缩进规则不会“设一次就全局生效”,必须同时控制 tab_size、translate_tabs_to_spaces 和 detect_indentation 三个参数,否则新开文件、切换语法或打开旧项目时,缩进会突然变回 2 空格、插 \t 或右下角显示 “Tabs: 4” 却不按空格缩进。
为什么改了 Settings – User 还是插 \t?
因为 translate_tabs_to_spaces 默认是 false,它决定 Tab 键到底输出制表符还是空格——tab_size 只控制宽度,和输入行为无关。常见表现:
- 右下角显示 “Tab Width: 4”,但旁边写着 Tabs(不是 Spaces)
- 新建文件按 Tab 插入的是单个 →,不是 4 个 ·
- 保存后 Python 报
IndentationError,实际是混用了 \t 和空格
解决方法:在 Preferences → Settings – User 右侧 JSON 中明确添加:
{ "translate_tabs_to_spaces": true, "tab_size": 4 }
注意:tab_size 是数字,translate_tabs_to_spaces 是布尔值,别加引号;仅改 tab_size 不生效。
Python 文件缩进仍是 2 空格?去配 Python.sublime-settings
Python 语言包自带硬编码配置,优先级高于用户全局设置。你在 Settings – User 里写 "tab_size": 4 对 .py 文件完全无效。
正确操作路径:
- 先打开任意
.py文件(确保右下角显示 “Python”) - 菜单 →
Preferences → Settings – Syntax Specific - 右侧只加两行(不删原有内容):
{ "tab_size": 4, "translate_tabs_to_spaces": true }
保存后,新创建的 .py 文件(包括 Ctrl+N → Save As → xxx.py)立即生效;已打开的需手动 Ctrl+Shift+P → Reload Syntax。
同理,.js 文件要配 JavaScript.sublime-settings,.json 配 JSON.sublime-settings,文件名拼错一个字母就不生效。
右下角总显示 “Detect Indentation” 或 “Tab Width: 2”?关掉 detect_indentation
detect_indentation 默认为 true,它会在打开文件瞬间扫描前几行,强行把你的 tab_size 和 translate_tabs_to_spaces 覆盖成“它猜的值”。你完全感知不到,但它让所有缩进配置变成临时的。
典型现象:
- 打开一个用 2 空格缩进的老 Python 文件,右下角立刻变成 “Tab Width: 2”
- 刚配好
translate_tabs_to_spaces: true,一打开文件又插 \t - 菜单
Convert Indentation to Spaces灰掉,提示混合缩进
唯一解法:在 Preferences → Settings – User 中显式加一行:
"detect_indentation": false
关掉后,新文件严格按你设的规则行为;已打开的文件仍需 Reload Syntax 才刷新。这个开关不关,其他配置大概率被架空。
已有文件缩进混乱,怎么安全转成 4 空格?
直接 Ctrl+A → Ctrl+[ 或 Reindent 会误伤字符串里的 \t、注释对齐或 YAML 键值间距,导致语法错误。
安全流程:
- 先确保右下角显示 Spaces: 4(不是 Tabs)
- 执行
View → Indentation → Convert Indentation to Spaces—— 若灰掉,说明检测到混合缩进 - 此时开启可视化:
"draw_white_space": "all",看清哪些行开头是 →(\t)、哪些是 ·(空格) - 手动删掉前几行明显异常的缩进(比如 →·→),保存后重试转换
- 转换完再执行
Indentation → Reindent,让结构按当前语法重新对齐
真正容易被忽略的是:detect_indentation 的覆盖是静默的、视图级的,且优先级最高;而语法专属配置(如 Python.sublime-settings)必须通过 Settings – Syntax Specific 路径创建,手动建文件或改名都无效。











