必须关闭detect_indentation并为每种语法单独配置tab_size和translate_tabs_to_spaces,否则全局设置无效;Python需在Syntax Specific中设"tab_size": 4和"translate_tabs_to_spaces": true,JS/TS/JSON也须分别配置对应语法专属文件,且均需禁用detect_indentation。

不能只改全局设置,必须关掉 detect_indentation 并为每种语法单独配 tab_size 和 translate_tabs_to_spaces,否则 Python 还是 2 空格、JS 还是 Tab、新文件一打开就“变回原样”。
为什么改了 Settings – User 还是无效
因为 detect_indentation 默认为 true,它会在打开文件瞬间扫描前几行缩进,直接覆盖你设的 tab_size 和 translate_tabs_to_spaces。右下角显示 Tab Width: 2 或 Spaces: 2 就是它在生效——不报错、不提示,只默默接管。
- 必须在
Preferences → Settings – User中显式加上"detect_indentation": false - 已有文件不会自动刷新,要按
Ctrl+Shift+P输入Reload Syntax才能应用新配置 - 这个设置关的是“自动探测行为”,不是缩进功能本身;关掉后,所有新文件才严格按你的语法专属设置走
Python 文件缩进必须单独配 Python.sublime-settings
Python 语言包自带默认配置:"tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。你在 Settings – User 里写 4 完全没用。
- 先打开一个
.py文件,确保右下角显示 “Python” - 菜单 →
Preferences → Settings – Syntax Specific,会打开Python.sublime-settings - 在里面只加这两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 保存后,已打开的文件需手动
Reload Syntax;新打开的.py文件立即生效
JavaScript/TypeScript/JSON 怎么统一设 2 空格
它们语法标识不同(source.js、source.ts、source.json),不能靠后缀匹配,得分别配。尤其 JSON 文件常被粘贴内容带 Tab,不关 detect_indentation,下次打开又变回 Tab 缩进。
- 打开
.js文件 →Preferences → Settings – Syntax Specific→ 写入:{"tab_size": 2, "translate_tabs_to_spaces": true, "detect_indentation": false} - 同理,用
.ts文件触发生成TypeScript.sublime-settings - 对
.json文件:右下角点 “Plain Text” → 切成 “JSON” → 再进Settings – Syntax Specific配JSON.sublime-settings
怎么验证当前插的是空格还是 Tab
光看缩进宽度没用,得确认实际字符。最可靠方法是开启空白符可视化:
- 在
Settings – User中加一行:"draw_white_space": "all" - 保存后,空格显示为
·,制表符显示为→ - 按一次
Tab键,如果出现四个·,说明生效;如果出现一个→,说明translate_tabs_to_spaces没起作用,或被某层语法设置覆盖了 - 旧文件里的
\t不会自动转,必须手动执行Convert Indentation to Spaces(快捷键Ctrl+Shift+P→ 输入该命令)
真正容易被忽略的是 detect_indentation 的静默覆盖能力——它不改你的配置文件,也不弹提示,只是在你打开文件那一瞬间,把你的设置“架空”。关掉它,才是让不同文件类型缩进规则稳定落地的第一步。


















