改 tab_size 不起作用是因为它只控制显示宽度,真正决定插入空格还是制表符的是 translate_tabs_to_spaces,且需关闭 detect_indentation 才能生效。

改 tab_size 不起作用,是因为它只控制“显示宽度”,不决定按 Tab 键插什么;真正控制插入行为的是 translate_tabs_to_spaces,而它的生效前提是关掉 detect_indentation。
为什么改了 tab_size 还是插制表符(\t)?
因为 translate_tabs_to_spaces 默认为 false,tab_size 再大也只会让一个 \t 显示得宽一点。你看到右下角写着 “Tabs: 4”,不是缩进设成了 4 空格,而是 Sublime 在用 1 个 \t 模拟 4 字符宽。
-
tab_size只影响视觉对齐和自动缩进的宽度计算,不影响输入字符类型 -
translate_tabs_to_spaces才是开关:设为true,按 Tab 才插入空格;设为false,永远插 \t - 即使这两项都写了,只要
detect_indentation是true(默认值),打开文件时就会被前几行内容覆盖,配置形同虚设
如何让 Python 文件稳定用 4 空格?
全局设置对 .py 文件基本无效——Python 语言包自带 Python.sublime-settings,里面硬写了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。
- 必须先打开一个
.py文件,确保右下角显示 “Python” - 菜单 → Preferences → Settings – Syntax Specific,在右侧 JSON 中只加两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的文件不会自动刷新,需手动
Ctrl+Shift+P→ 输入Reload Syntax回车 - 不要删原有内容,也不要加其他字段(比如
detect_indentation),语法专属设置里只放缩进相关项
已有文件缩进混乱,怎么安全转成 4 空格?
所有配置都不动已有字符,Convert Indentation to Spaces 菜单项灰掉,说明 Sublime 检测到混合缩进(Mixed),这是保护机制,不是 bug。
- 先开启空白符可视化:
"draw_white_space": "all"加入用户设置,· 表示空格,→ 表示 \t - 确认右下角显示
Spaces: 4(点击右下角缩进指示器可切换) - 若菜单灰掉,手动删掉前几行开头的 →(或明显混用的行),再重试
Convert Indentation to Spaces - 转换完立刻执行
Indentation → Reindent,否则结构层级可能错位 - 切忌
Ctrl+A后直接缩进——会误处理字符串、注释里的 \t 或对齐空格
最容易被忽略的是 detect_indentation 的静默覆盖行为:它不报错、不提示、不修改你的配置文件,只是在每次打开文件时悄悄接管缩进规则。关不掉它,其他所有设置都只是临时状态。


















