必须将translate_tabs_to_spaces设为true并关闭detect_indentation,否则tab_size仅控制显示宽度;Python文件还需在Syntax Specific设置中单独配置,且已打开文件需Reload Syntax才生效。

为什么改了 tab_size 还是插 \t?
因为 translate_tabs_to_spaces 默认是 false,它不开启,tab_size 就只管显示宽度,不管输入行为。按 Tab 键永远插入制表符,哪怕状态栏显示 Tab Width: 4。必须显式设为 true 才能让 Tab 键输出空格。
更麻烦的是,这个开关容易被覆盖:语言包自带的 Python.sublime-settings 里硬编码了 "translate_tabs_to_spaces": false;项目根目录若有 .editorconfig 且含 indent_style = tab,EditorConfig 插件会直接劫持;甚至 detect_indentation 开着时,打开一个旧文件就可能临时切回 Tab 模式——你完全看不到配置被改,只看到右下角突然变成 Tabs: 2。
如何让 Python 文件稳定用 4 空格缩进?
不能只动全局设置。Sublime 对 .py 文件优先读 Python.sublime-settings,而它默认写死 "tab_size": 2 和 "translate_tabs_to_spaces": false,用户设置根本进不去。
- 先打开任意
.py文件,确保右下角显示Python - 菜单 →
Preferences → Settings – Syntax Specific(注意不是普通Settings) - 在右侧 JSON 中只添加两行(别删原有内容):
{"tab_size": 4,"translate_tabs_to_spaces": true} - 已打开的文件需按
Ctrl+Shift+P→ 输入Reload Syntax才生效
detect_indentation 为什么必须关?
它默认为 true,一打开文件就扫描前几行缩进,强行把当前视图的 tab_size 和 translate_tabs_to_spaces 改成“它猜的值”。这不是提示,也不写日志,你只会在状态栏发现缩进突然变了——比如刚配好 4 空格,打开一个用 2 空格写的旧脚本,立刻回退。
关它的唯一办法是在 Preferences → Settings – User 的右侧 JSON 中加一行:
"detect_indentation": false。不关掉,所有语法专属配置都可能被临时覆盖,尤其在团队协作或处理历史代码时。
已有文件缩进混乱怎么安全修复?
别直接 Ctrl+A + Ctrl+]。混合缩进(部分 \t、部分空格)下,强制缩进会错位字符串或注释里的制表符,导致语法错误。
- 先开空白字符可视化:
"draw_white_space": "all",看清哪些是→(Tab)、哪些是·(空格) - 若
Convert Indentation → To Spaces灰掉,说明 Sublime 检测到混合缩进——这是保护机制,不是 bug - 手动删掉开头几行明显混搭的缩进(如
→·→),保存后重试转换 - 转完务必执行
Indentation → Reindent,否则结构层级不会自动对齐
语法识别错也会导致修复失败,比如 Vue 单文件组件里的 <script> 块被当成 HTML,缩进规则就套错了——点右下角语法名手动切到 JavaScript 再试。


















