必须关闭 detect_indentation 才能使 tab_size 和 translate_tabs_to_spaces 生效;否则 sublime 会自动覆盖设置。python 文件需语法专属设置,且右下角显示 spaces: 4 才表示空格插入已启用。

为什么改了 tab_size 还是插 \t?
因为 translate_tabs_to_spaces 默认是 false,它不开启,tab_size 只控制显示宽度,和按键行为无关。按 Tab 键永远插的是制表符,不是空格。
- 必须在用户设置(
Preferences → Settings – User)中显式加:"translate_tabs_to_spaces": true -
tab_size是数字,比如4;translate_tabs_to_spaces是布尔值,别写成"true"字符串 - 右下角显示
Tabs: 4或Tab Width: 4≠ 插入空格;只有显示Spaces: 4才说明生效
为什么 Python 文件设了全局缩进还是 2 空格?
Python 语言包自带 Python.sublime-settings,硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。全局配置对 .py 文件基本无效。
- 先打开一个
.py文件,确保右下角显示 “Python” - 菜单 →
Preferences → Settings – Syntax Specific(注意不是普通 Settings) - 右侧 JSON 中只添加两行:
"tab_size": 4和"translate_tabs_to_spaces": true,不要删原有内容 - 已打开的文件需手动
Ctrl+Shift+P→ 输入Reload Syntax才刷新
为什么刚打开文件缩进就“自己变了”?
因为 detect_indentation 默认为 true,Sublime 会扫描文件前几行,强行覆盖你所有设置——哪怕文件是空的,它也可能根据模板或历史残留误判。
- 这是最常被忽略的开关,关不掉它,其他缩进配置都只是临时有效
- 必须在
Settings – User中加:"detect_indentation": false - 语法专属设置里也建议加这一项,避免新建文件时被干扰
- 关掉后,新文件才严格按你写的
tab_size和translate_tabs_to_spaces行为
已有文件缩进混乱,怎么安全转成 4 空格?
直接 Ctrl+A + 缩进命令容易误伤字符串里的 \t 或注释对齐,导致语法错误。Sublime 的转换功能有保护机制,灰掉就是它在拦你。
- 先开可视化:
"draw_white_space": "all"(加到用户设置),让\t显示为→,空格为· - 如果
Convert Indentation to Spaces灰掉,说明检测到混合缩进;手动删掉前几行异常开头(比如→·→),保存后再试 - 确认右下角显示
Spaces: 4后,再执行该命令 - 最后补一步:
View → Indentation → Reindent,让结构按当前规则重排层级
tab_size、translate_tabs_to_spaces、detect_indentation 三者协同;而最容易被绕过、又最难察觉的,就是 detect_indentation 那个静默接管一切的默认行为。











