必须同时设置tab_size为4且translate_tabs_to_spaces为true,否则按tab键无法输出4个空格;因tab_size仅控制显示宽度与换算比例,真正决定插入空格还是\t的是translate_tabs_to_spaces;且需关闭detect_indentation并配置语法专属设置,否则会被自动探测或高优先级规则覆盖。

必须同时设置 tab_size 为 4 且 translate_tabs_to_spaces 为 true,否则按 Tab 键永远插不出 4 个空格——只改其中一个,等于没改。
为什么改了 tab_size 还是插入 \t?
tab_size 本身不控制按键行为,它只决定制表符显示宽度、自动缩进量、以及“转换缩进”时的换算比例。真正让 Tab 键输出空格的是 translate_tabs_to_spaces。
-
translate_tabs_to_spaces: true→ 按Tab插入tab_size个空格 -
translate_tabs_to_spaces: false(默认值之一)→ 按Tab插入单个\t,哪怕tab_size是 100 也无效 - 两个配置必须写在同一级 JSON 中,且都在用户设置或语法专属设置里,缺一不可
为什么新建 Python 文件还是用 Tab 或 2 空格?
Sublime 的语法专属设置(如 Python.sublime-settings)优先级高于全局用户设置。很多语言包自带缩进规则,会直接覆盖你设的 tab_size 和 translate_tabs_to_spaces。
- 检查
Preferences → Package Settings → Python → Settings,删掉或同步改成"tab_size": 4和"translate_tabs_to_spaces": true - 对
JavaScript、JSON、HTML等常用语法,也需进Preferences → Settings – Syntax Specific单独确认 - 如果项目根目录有
.editorconfig,Sublime 默认不读——得装EditorConfig for Sublime Text插件,否则配置会被静默覆盖
为什么刚打开文件时缩进又变回去了?
因为 detect_indentation 默认为 true,Sublime 会在加载文件时扫描前几行,自动推断并覆盖你的全部缩进设置。这不是 bug,是设计行为。
- 状态栏右下角显示
Tab Width: 2或Tab,说明检测已生效,当前视图设置已被临时覆盖 - 在用户设置中加
"detect_indentation": false才能锁死你的配置 - 该设置只在文件打开时触发,改完需重新打开已有文件才能看到效果
- 已有文件里的
\t不会自动转成空格——需手动执行Convert Indentation to Spaces(快捷键Ctrl+Shift+P输入后回车)
最易被忽略的是:语法专属设置和 detect_indentation 的双重覆盖机制。很多人只动了全局配置,结果在 .py 文件里反复失效,其实问题不在 tab_size 值,而在谁说了算。











