sublime 默认缩进是 tab,但需设"tab_size":2,"translate_tabs_to_spaces":true,"detect_indentation":false才能统一用空格;否则插件或文件已有缩进会覆盖设置。

Sublime 默认缩进是 Tab 还是空格?
默认是 Tab,但绝大多数现代项目(尤其 Python、JavaScript、YAML)要求用空格。直接改设置不等于生效——必须同时关掉 detect_indentation,否则文件一打开,Sublime 就会“自作主张”按文件已有缩进猜配置,覆盖你的手动设置。
-
"detect_indentation": false必须加进用户设置(Preferences → Settings – User),不是只改tab_size - 如果已打开文件,改完设置后要手动执行
Convert Indentation to Spaces(右键菜单或Ctrl+Shift+P搜) - 旧项目里混着 Tab 和空格?光设新文件没用,得批量清理:先全选
Ctrl+A,再执行Convert Indentation to Spaces
怎么让新文件、新建标签页也用空格缩进?
只改全局 tab_size 和关 detect_indentation 不够。Sublime 会按语法类型加载不同缩进规则(比如 Python 文件可能被插件强制设为 4 空格,而 JSON 默认是 2)。所以得在用户设置里明确指定通用行为:
- 加这三行到
Settings – User:"tab_size": 2,<br>"translate_tabs_to_spaces": true,<br>"detect_indentation": false
- 注意顺序无关,但
translate_tabs_to_spaces必须为true,否则按 Tab 键还是插入 Tab 字符 - 如果某类文件(如
.env)没语法高亮,Sublime 就不会应用语法专属设置,此时完全依赖这三条通用配置
为什么按 Tab 键还是插入 \t?
常见原因是插件冲突,尤其是 EditorConfig 或 SublimeLinter 类插件会劫持缩进逻辑。它们读取项目根目录的 .editorconfig 或 .sublimelinterrc,优先级高于用户设置。
- 检查项目根目录有没有
.editorconfig;如果有,里面indent_style = tab会直接覆盖 Sublime 设置 - 临时禁用插件测试:菜单
Preferences → Package Control → Disable Package,逐个关EditorConfig、SublimeLinter、Indentation Manager - 按
Ctrl+Shift+P输入Set Syntax: Plain Text切换到纯文本模式,再试 Tab 键——如果这时变空格了,说明是语法绑定的问题
缩进设对了,但代码格式化仍出错?
缩进设置管的是「按键输入行为」,不管「格式化工具输出」。比如用 Prettier 格式化 JS,它读的是自己配置(prettier.config.js 或 .prettierrc),和 Sublime 的 tab_size 无关。
- 确认格式化插件是否启用:比如
JsPrettier插件里要勾选auto_indent,且prettier_options里显式写"tabWidth": 2 - Python 用
Black时,它强制用 4 空格,无视 Sublime 设置;想统一就得改pyproject.toml里的line-length和缩进相关项 - 最稳的办法:格式化后手动执行一次
Indentation: Convert to Spaces,确保最终落盘是空格
缩进看似简单,但跨文件、跨插件、跨格式化工具时,真正起效的往往是那个被忽略的 detect_indentation 开关和项目级配置的优先级关系。










