要让tab键真正输出4个空格,必须同时设置"tab_size":4和"translate_tabs_to_spaces":true;仅设前者无效,因tab_size只控制显示宽度与换算,不改变按键行为;还需禁用"detect_indentation":false并检查语法专属设置及.editorconfig覆盖。

直接改 Preferences → Settings – User 里的两个字段就能让 Tab 键真正输出 4 个空格,但只设 "tab_size": 4 没用——它不控制按键行为,只管显示和换算。
为什么改了 tab_size 还是插入 \t?
tab_size 本身不决定按 Tab 键插什么,只影响制表符显示宽度、自动缩进量、以及「Convert Indentation」操作的换算比例。真正开关在 translate_tabs_to_spaces:
-
"translate_tabs_to_spaces": true→ 按 Tab 插入tab_size个空格 -
"translate_tabs_to_spaces": false(默认之一)→ 按 Tab 插入单个\t,哪怕tab_size是 100 也无效
二者必须同时存在、同级配置、值都正确,缺一不可。
为什么新建 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 值,而在谁说了算。











