需在语法专属设置中配置{"tab_size":4,"indent_with_tabs":false,"detect_indentation":false},因语法设置优先级最高且detect_indentation为true会自动覆盖配置。

如何让 Sublime Text 的 Tab 键插入 4 个空格?
Sublime Text 默认 Tab 宽度是 4,但默认行为是插入 \t 字符(制表符),不是空格。要真正「用 Tab 键输入 4 个空格」,得关掉 indent_with_tabs 并设好 tab_size。
常见错误现象:改了 tab_size 但按 Tab 还是缩进一个 \t;或者只改了全局设置,新建文件/不同语法(如 Python、JSON)又恢复默认。
-
"tab_size": 4控制缩进显示宽度和自动缩进量 -
"indent_with_tabs": false才能让 Tab 键实际插入空格(而非\t) - 必须在「语法专属设置」里配,否则 Python 文件可能被 .py 的默认设置覆盖
为什么改了 Preferences → Settings 没生效?
因为 Sublime 的设置分三层:默认设置(只读)、用户设置(全局)、语法特定设置(最高优先级)。Python、JavaScript 等语言自带的 Python.sublime-settings 会覆盖你改的用户设置。
正确做法是打开当前文件 → Preferences → Settings – Syntax Specific,然后填入:
{
"tab_size": 4,
"indent_with_tabs": false,
"detect_indentation": false
}
detect_indentation 设为 false 很关键——否则打开已有文件时,Sublime 会根据文件里第一个缩进自动切回 indent_with_tabs: true 或 tab_size: 2,瞬间覆盖你的配置。
如何批量为所有语言统一设成 4 空格?
不推荐全局硬设。不同项目、不同团队规范差异大(比如 Go 要用 tab,YAML 必须空格),强行统一反而容易踩坑。
更稳妥的做法是:
- 用户设置里保留
"tab_size": 4和"indent_with_tabs": false作为兜底 - 对每种常用语言单独建
xxx.sublime-settings(比如JavaScript.sublime-settings)并启用"detect_indentation": false - 用插件
EditorConfig(需配合项目根目录的.editorconfig)——它优先级高于 Sublime 自身设置,且能跨编辑器同步
Tab 键缩进异常的隐藏原因
有时按 Tab 没反应、缩进错位、或光标跳到行首,往往不是设置问题,而是:
- 文件编码含 BOM(尤其 Windows 下保存的 UTF-8 with BOM),会导致
detect_indentation解析失败 - 开启了
translate_tabs_to_spaces但没关indent_with_tabs,两者逻辑冲突 - 某些插件(如
SublimeCodeIntel)会劫持 Tab 行为做代码补全,干扰缩进
验证方法:新建无插件纯净窗口(subl -n --safe-mode),再试 Tab。如果正常,就说明是插件或项目配置在捣鬼。
真正麻烦的从来不是设几个空格,而是搞清楚哪一层设置正在起效、谁在悄悄覆盖它。










