必须同时设置"translate_tabs_to_spaces":true、"tab_size":4和"detect_indentation":false,否则tab键仍插入\t;因tab_size不控制输入行为,真正决定按键输出的是translate_tabs_to_spaces,且detect_indentation默认会覆盖配置。

Sublime Text 里按 Tab 键默认插的是 \t,不是空格;想让它自动输出空格,必须改输入行为本身,而不是“等写完再转”——否则你永远在手动补救。
为什么改了 tab_size 还是插 \t?
tab_size 只控制两件事:制表符在界面上的显示宽度、以及执行 Convert Indentation to Spaces 时的换算比例。它完全不决定键盘输入行为。
真正开关是 translate_tabs_to_spaces:
- 必须设为布尔值
true(不能加引号,也不能写成字符串"true") - 只设
tab_size不设它,按 Tab 永远插\t - 该设置对已打开的文件不生效,只影响新建或新打开的文件
怎么让 Tab 键真正插入 4 个空格?
编辑 Preferences → Settings(用户设置),右侧 JSON 中加入:
{
"translate_tabs_to_spaces": true,
"tab_size": 4,
"detect_indentation": false
}
关键点:
-
detect_indentation设为false是为了防止打开旧文件时被前 200 行里的\t强制切回 Tab 模式 - 右下角状态栏必须显示
Spaces: 4才算生效;若显示Tabs: 4,说明设置没起作用或被覆盖 - 如果项目根目录有
.editorconfig且含indent_style = tab,EditorConfig 插件会优先覆盖你的 Sublime 设置
已有文件里的 \t 怎么批量转?
Convert Indentation to Spaces 只处理行首缩进,不碰字符串或注释里的 \t,也不跨文件。
操作方式:
- 快捷键:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Convert Indentation to Spaces回车 - 菜单路径:
View → Indentation → Convert Indentation to Spaces - 多文件批量:用
Ctrl+P打开文件列表,Ctrl+点击多选,再对任意一个执行该命令,所有选中标签页同步转换 - 若菜单灰掉,说明检测到混合缩进(Tab + 空格混用),需先删掉几行异常开头的
\t再试
不同语言要用不同缩进数(比如 Python 用 4、YAML 用 2)怎么办?
全局设置会被语法专属设置覆盖,所以得单独配:
- 打开一个
.py文件 →Preferences → Settings – Syntax Specific→ 右侧加:{"tab_size": 4, "translate_tabs_to_spaces": true} - 打开一个
.yml文件 → 同样路径 → 右侧加:{"tab_size": 2, "translate_tabs_to_spaces": true} - 文件名必须匹配语法名:例如
Python.sublime-settings,拼错成JS.sublime-settings就不生效 - 确认当前文件已被正确识别语法(右下角显示 “Python” 或 “YAML”,不是 “Plain Text”)
最常被忽略的是 detect_indentation 和语法识别——哪怕配置全对,只要文件一打开就被扫描出 \t,或者语法没认出来,设置就等于没写。











