必须同时配置tab_size、translate_tabs_to_spaces和detect_indentation三个参数,否则缩进行为会被更高优先级规则覆盖;核心是translate_tabs_to_spaces默认false,需设为true才能使tab键输出空格而非\t。

必须同时配置 tab_size、translate_tabs_to_spaces 和 detect_indentation 三个参数,否则缩进行为会随时被覆盖——不是设置没生效,而是被更高优先级的规则悄悄劫持了。
为什么按 Tab 还是插入 \t?核心开关没开
Sublime 默认按 Tab 插入的是制表符 \t,和右下角显示的 “Tab Width: 4” 完全无关。真正起作用的是 translate_tabs_to_spaces,它默认为 false,必须显式设为 true 才会让 Tab 键输出空格。
-
tab_size是数字(如4),不是字符串;translate_tabs_to_spaces是布尔值,别加引号 - 只改
tab_size不设translate_tabs_to_spaces→ Tab 键照旧插\t - 右下角始终显示
Tabs: 4或Tab Width: 4,从不出现Spaces: 4→ 说明该开关未生效 - 新建文件正常,但一打开已有
.py文件就回退成 Tab 模式 → 很可能是语法专属设置或detect_indentation在干扰
Python/JS 文件不生效?语法专属设置优先级最高
全局用户设置对 .py、.js 等文件基本无效,因为语言包自带的 Python.sublime-settings 或 JavaScript.sublime-settings 优先级更高,且通常硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。
- 操作路径:先打开一个
.py文件 → 菜单Preferences → Settings – Syntax Specific - 在右侧 JSON 中只添加两行:
"tab_size": 4和"translate_tabs_to_spaces": true(不要删原有内容) - 文件名必须严格匹配:
Python.sublime-settings,拼错一个字母(比如写成Python3.sublime-settings)就不生效 - 已打开的文件需手动执行
Ctrl+Shift+P→ 输入Reload Syntax回车才刷新
Convert Indentation to Spaces 灰掉了?混合缩进被保护
菜单项灰掉不是功能损坏,而是 Sublime 检测到当前文件存在混合缩进(部分行用 \t,部分用空格),它主动拒绝自动转换,防止错位。
- 先开启空白字符可视化:
"draw_white_space": "all"(加到用户设置里),让\t显示为→,空格为· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→),保存后重试命令 - 或临时切语法为
Plain Text(右下角点击 → 选Plain Text),再执行Convert Indentation to Spaces - 转换完务必执行
Indentation: Reindent Lines,否则缩进层级可能未对齐
EditorConfig 或项目配置覆盖了你的设置?优先级陷阱
如果项目根目录有 .editorconfig,且含 indent_style = tab,EditorConfig 插件会直接劫持缩进逻辑,优先级高于所有 Sublime 自身设置。
- 检查项目根目录是否存在
.editorconfig,打开看是否有indent_style或tab_width相关配置 - 若需保留 EditorConfig 插件,可在其配置中显式写
indent_style = space和tab_width = 4 - 若只是临时调试,可临时禁用 EditorConfig 插件:
Preferences → Package Control → Disable Package → EditorConfig - 注意:
detect_indentation默认为true,它会在打开文件瞬间扫描前几行并覆盖你的设置——这个行为不报错、不提示,却最常被忽略
真正难搞的不是配哪几个键,而是弄清谁在背后改你的配置:语言包、EditorConfig、detect_indentation、甚至已打开文件的历史缩进痕迹——它们都可能在你保存设置后默默翻盘。











