必须关闭detect_indentation并配置tab_size、translate_tabs_to_spaces、detect_indentation三者,否则自动检测会覆盖用户设置;语法文件还需syntax specific配置;已有tab需手动convert to spaces。

Tab 键还是插入 \t?先关掉 detect_indentation
按 Tab 键仍出制表符,不是设置没写对,而是 Sublime 默认开启自动检测——它一打开文件就扫描前几行缩进,发现有个 \t,立刻把 translate_tabs_to_spaces 强制设为 false,把你用户配置里的 true 给覆盖了。
-
detect_indentation必须显式设为false,否则所有其他设置都可能白配 - 这个选项只在文件打开时生效,改完要重新打开已存在的文件才能看到效果
- 不关它,哪怕你在 Python 文件里单独配了
translate_tabs_to_spaces: true,只要文件开头有 Tab,照样失效
全局生效要配齐这三行:tab_size、translate_tabs_to_spaces、detect_indentation
只加 tab_size 或只开 translate_tabs_to_spaces 都不行:前者只影响显示宽度,后者没指定数量就按默认 4 算,但你项目可能要用 2。
- 进
Preferences → Settings – User,在 JSON 里加这三行(顺序无关):{ "tab_size": 2, "translate_tabs_to_spaces": true, "detect_indentation": false } - 数值按规范来:
python通常用4,vue/js项目常用2,json官方推荐2 - 这个配置管的是「新建文件」「纯文本」「没语法高亮的 .env 等文件」;有语法类型的文件(如
.py)还得额外配语法专属设置
Python/JS/JSON 等语言缩进不统一?必须进 Settings – Syntax Specific
Sublime 的语言包自带缩进规则,优先级高于全局设置。你全局设了 tab_size: 4,但打开 .py 文件后右下角显示 Tab Width: 8,大概率是 Python 插件或语言包自己又覆盖了一次。
- 打开一个
.py文件 →Preferences → Settings – Syntax Specific - 填入和用户设置里一样的内容:
{ "tab_size": 4, "translate_tabs_to_spaces": true } - 同理,对
.json文件也这么做,避免 Prettier 或 ESLint 格式化后缩进错乱(它们读自己的配置,但编辑器输入行为得先对) - 注意:改完不会刷新已打开文件的缩进显示,需手动执行
Convert Indentation to Spaces或重开文件
旧代码全是 Tab 怎么办?别等自动转,手动批量转 + 查空白字符
设置了 translate_tabs_to_spaces: true 只影响「新按 Tab 键」的行为,不会把已有 \t 换成空格。状态栏显示 Spaces: Off 就说明当前文件还没转。
- 全选代码(
Ctrl+A),再按Ctrl+Shift+P输入Indentation: Convert to Spaces回车 - 想确认有没有混用?开
View → Render Whitespace → All:空格显示为小点·,Tab 显示为箭头→ - 如果文件被标记“混合缩进”,Sublime 会禁用转换功能,得先人工删掉几行开头的 Tab 再试
- 插件如
EditorConfig也可能劫持行为——检查项目根目录有没有.editorconfig,里面若写了indent_style = tab,它就赢了
\t——因为某个插件、某行旧缩进、或者右下角那个没点开的“Tab Width”菜单正在悄悄接管。










