必须关闭 detect_indentation 才能使 tab_size 和 translate_tabs_to_spaces 生效,否则打开文件时会被自动覆盖;python/js 等需在语法专属设置中配置,且需 reload syntax 刷新。

为什么改了 tab_size 还是插 \t
因为 tab_size 只控制显示宽度和换算比例,不决定按 Tab 键输出什么字符。真正开关是 translate_tabs_to_spaces:设为 true 才会插入空格;默认是 false,所以无论 tab_size 设成 2 还是 4,按 Tab 仍只插一个 \t。便携版和安装版行为完全一致,没有特殊逻辑。
必须关掉 detect_indentation,否则配置白设
Sublime 默认开启 detect_indentation(值为 true),它会在打开文件时扫描前几行,自动覆盖你写的 tab_size 和 translate_tabs_to_spaces。现象就是:新建文件正常,一打开旧 .py 或 .js 文件,右下角立刻变成 Tabs: 2 或 Detect Indentation,你的设置被静默接管。
- 在便携版的
Data\Packages\User\Preferences.sublime-settings中,显式添加:"detect_indentation": false - 不要依赖“重启软件”——已打开的文件不会自动刷新,需手动执行
Ctrl+Shift+P→ 输入Reload Syntax回车 - 如果右下角始终显示
Tabs: X(不是Spaces: X),说明translate_tabs_to_spaces仍未生效或被更高优先级覆盖
Python/JS 等语言必须走语法专属设置
全局用户设置对 .py 文件基本无效,因为 Python 插件自带的 Python.sublime-settings 里硬写了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户配置。便携版路径是 Data\Packages\Python\Python.sublime-settings,但你不该改它——应走标准路径:
- 打开一个
.py文件,确认右下角显示的是Python - 菜单 →
Preferences → Settings – Syntax Specific - 在右侧 JSON 中只加两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 保存后,当前文件不会立即更新,必须
Ctrl+Shift+P→Reload Syntax - 同理,
.js文件要进JavaScript.sublime-settings配置,.json文件进JSON.sublime-settings,拼错文件名(如写成Python3.sublime-settings)就不生效
已有文件缩进混乱,Convert Indentation to Spaces 灰掉了怎么办
灰掉 = Sublime 检测到混合缩进(部分行用 \t,部分用空格,甚至不同空格数混用),这是保护机制,不是 bug。直接全选再缩进会误伤字符串或注释里的 \t。
- 先在用户设置中加:
"draw_white_space": "all",让\t显示为→,空格为· - 检查前几行,手动删掉明显混搭的开头(比如某行是
→·→),保存后再试命令 - 或临时把语法切为
Plain Text(右下角点击 → 选Plain Text),再执行Convert Indentation to Spaces - 转换完立刻执行
Indentation → Reindent Lines,否则层级可能错位 - 别漏掉
expand_tabs_on_save:在语法专属设置里加一行"expand_tabs_on_save": true,保存时自动把残留\t转为空格
detect_indentation 的静默覆盖行为:它不报错、不提示、不修改你的配置文件,只是每次打开文件时悄悄接管缩进规则。关不掉它,其他所有设置都只是临时状态。











