必须关闭 detect_indentation 才能使 tab_size 和 translate_tabs_to_spaces 生效,否则 Sublime 会自动检测并覆盖用户配置;语法专属设置优先级高于全局设置;.editorconfig 优先级最高。

Tab 键插不出空格,不是配置写错了,是 detect_indentation 在暗中接管——它默认开启、不报错、不提示,只默默把你的 tab_size 和 translate_tabs_to_spaces 全部覆盖。
为什么按 Tab 还是插入 \t?关掉 detect_indentation 才算真正生效
Sublime 默认扫描文件前几行缩进,一旦发现 \t 或非预期空格数(比如旧 Python 文件开头是 2 空格),立刻切回对应模式,无视你设的任何用户配置。右下角显示 Tabs: 4 或 Detect Indentation 就是它在运行。
- 必须在
Preferences → Settings – User中显式添加:"detect_indentation": false -
"translate_tabs_to_spaces": true是开关,决定按 Tab 插入的是空格还是\t;"tab_size": 4只定义宽度,不控制字符类型 - 只设
tab_size不开translate_tabs_to_spaces,Tab 键照旧插\t;只开translate_tabs_to_spaces不设tab_size,默认用 4,但可能被语法设置覆盖
Python/JS 文件缩进还是不对?去语法专属设置里配,别碰全局
全局设置对 .py、.js、.json 等文件基本无效,因为语言包自带的 Python.sublime-settings 等硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。
- 先打开一个
.py文件,确认右下角显示的是Python(不是Plain Text) - 菜单 →
Preferences → Settings – Syntax Specific,右侧 JSON 中只加两行:"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的文件需执行
Ctrl+Shift+P→ 输入Reload Syntax才刷新生效 - 文件名必须严格匹配:
Python.sublime-settings、JavaScript.sublime-settings——拼错一个字母就不生效
Convert Indentation to Spaces 灰掉了?那是 Sublime 在保护你
菜单里该命令灰掉,不是功能损坏,而是 Sublime 检测到混合缩进(部分行用 \t,部分用空格),主动拒绝自动转换,防止错位。
- 先开启空白符可视化:
"draw_white_space": "all",让\t显示为→,空格为· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→),保存后重试命令 - 或临时切语法为
Plain Text(右下角点击 → 选Plain Text),再执行转换 - 转完后务必执行
Indentation: Reindent Lines,否则缩进层级可能未对齐
项目根目录有 .editorconfig?它会直接劫持缩进逻辑
如果项目里有 .editorconfig 且含 indent_style = tab,EditorConfig 插件会优先级最高,完全覆盖所有 Sublime 自身设置,包括语法专属配置。
- 检查项目根目录是否存在
.editorconfig,用文本编辑器打开看是否有indent_style相关项 - 若想统一用空格,修改其中的
indent_style = space和indent_size = 4(或对应值) - 若不想受其影响,可禁用 EditorConfig 插件,或在
.editorconfig中为特定文件类型单独配置 - 注意:
.editorconfig的作用域规则(如[*.py])会影响匹配精度,拼写错误会导致整段失效
真正容易被忽略的是 detect_indentation 的静默覆盖行为——它不报错、不弹窗,只在右下角悄悄改掉显示,让你误以为配置成功了。关掉它,才是所有缩进设置落地的前提。


















