必须关闭 detect_indentation 并启用 translate_tabs_to_spaces,否则 tab 键始终插入制表符;语法专属设置优先级高于全局配置,需在 syntax specific 设置中显式配置 tab_size 和 translate_tabs_to_spaces。

Sublime Text 的 Tab 缩进不是改一个配置就能稳住的,关键得关掉 detect_indentation,否则它会在你打开文件的瞬间偷偷覆盖你的 tab_size 和 translate_tabs_to_spaces 设置——你根本看不到提示,但右下角已经变成 Tabs: 2 了。
为什么按 Tab 还是插入 \t?核心开关没开
默认 translate_tabs_to_spaces 是 false,所以按 Tab 插入的永远是制表符,不是空格。右下角显示 Tab Width: 4 只是控制显示宽度,和输入行为无关。
- 必须在用户设置(
Preferences → Settings – User)中显式加:"translate_tabs_to_spaces": true(布尔值,别加引号) -
tab_size要配成数字,比如4,不是"4" - 如果只改了
tab_size没开translate_tabs_to_spaces,Tab 键照旧插\t - 已打开的文件不会自动响应,需执行
Ctrl+Shift+P→Reload Syntax才生效
Python/JS 文件缩进不生效?语法专属设置优先级更高
全局设置对 .py、.js 等文件基本无效,因为语言包自带的 Python.sublime-settings 或 JavaScript.sublime-settings 会硬编码 "translate_tabs_to_spaces": false 和 "tab_size": 2。
- 操作路径:先打开一个
.py文件 →Preferences → Settings – Syntax Specific - 右侧只加两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 文件名拼写必须严格匹配,比如写成
Python3.sublime-settings就不生效 - 切换语法后(如从 Python 切到 Plain Text),设置立即失效,得重新切回
Convert Indentation to Spaces 灰掉了?混合缩进被保护
菜单项变灰不是功能坏了,是 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_size的值 - 若想以 Sublime 配置为准,可临时禁用 EditorConfig 插件,或把
.editorconfig中相关项注释掉 -
detect_indentation默认为true,它不报错、不弹窗,只是默默把你的配置“架空”——这是最容易被忽略的点











