Sublime缩进失效的根源是detect_indentation默认开启,必须设为false才能使tab_size和translate_tabs_to_spaces生效;Python等语言需在语法专属设置中配置,且现有文件需手动转换缩进。

Sublime 默认不是“用空格缩进”,而是根据文件类型自动猜——猜错就插 \t,哪怕你设了 tab_size 也没用。真正起效的只有三件事:关掉自动检测、明确转空格、按语言单独配。
为什么改了 tab_size 还是插 Tab 字符?
因为 detect_indentation 默认为 true,Sublime 一打开文件就扫描前几行:看到开头有 \t,立刻切回 Tab 模式,把你设的 translate_tabs_to_spaces 直接无视。
- 右下角显示
Tabs: 4就是它在作怪,不是缩进宽度,是当前用的字符类型 - 必须在
Preferences → Settings(用户设置)里加"detect_indentation": false - 这行不加,其他所有配置都只是临时生效——新建文件、重开文件、甚至切换语法后都会回退
Python 文件缩进还是 2?别动全局设置
Python 语言包自带 Python.sublime-settings,里面硬编码了 "tab_size": 2,会直接覆盖你在全局设置里写的 4。
- 正确路径:
Preferences → Package Settings → Python → Settings – Syntax Specific - 在里面只加这两行(别删原有内容):
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的 .py 文件需手动触发
Ctrl+Shift+P→Reload Syntax才刷新设置 - 其他语言同理:JavaScript、JSON、HTML 都要各自进对应的
Settings – Syntax Specific
缩进设置不生效的三个高频错误
重启软件、重装插件都没用?大概率踩了这些坑:
-
indentation拼成identation或indention—— Sublime 完全忽略该行,JSON 也不报错 - 在全局
Settings里写了缩进配置,但当前文件类型有更高级的语法专属设置,直接被屏蔽 - 执行过
Convert Indentation to Tabs后没再点Convert Indentation to Spaces,导致文件混着\t和空格,此时tab_size设置完全不起作用
怎么让现有代码统一变 4 空格?
设置只管“以后按 Tab 插什么”,不管已有内容。要清理旧文件:
- 先全选(
Ctrl+A),再右键 →Indentation → Convert Indentation to Spaces - 如果菜单灰掉,说明 Sublime 检测到混合缩进(部分行是
\t,部分是空格),得手动删掉几行开头的\t再试 - 想实时看见空格和 Tab 区别?在用户设置里加
"draw_white_space": "all",空格变·,Tab 变→ - 注意:
trim_automatic_whitespace开了可能误删关键空格(比如字符串末尾),建议只在确认安全时启用
最麻烦的其实是优先级嵌套:文件内设置 > 项目设置 > 语法专属设置 > 全局设置。你改的那行配置到底有没有被更高优先级的规则盖掉,得看右下角语法名称、当前文件路径、甚至是不是在某个 Sublime 项目里打开的——这些细节不检查,光调参数就是白忙。











