必须关闭detect_indentation才能使tab_size和translate_tabs_to_spaces生效,且需为不同语法单独配置,已打开文件需重载语法或重启。

Tab键还是插\t?先关掉detect_indentation
按 Tab 键仍插入 \t,不是配置漏了,而是 detect_indentation 默认为 true,它会在文件打开时扫描前几行,一看到 \t 就立刻覆盖你设的 translate_tabs_to_spaces。右下角显示 Tabs: 4 就是它在生效。
必须在 Preferences → Settings – User 中加这一行:
"detect_indentation": false
改完需关闭并重开已有文件——已打开的文件不会自动重载缩进模式。
-
translate_tabs_to_spaces是开关,不设成true,tab_size再怎么配都只影响显示宽度,和输入行为无关 - 全局设置对
.py、.js等文件基本无效,因为语言包自带的语法专属配置优先级更高 - 验证是否生效:新建一个
Plain Text文件,开启"draw_white_space": "all",按一次 Tab,看出现的是四个·还是一个→
Python/JS/YAML 缩进不统一?去 Syntax Specific 单独配
全局 tab_size 和 translate_tabs_to_spaces 对 Python 文件几乎没用——Python.sublime-settings 里默认写了 "tab_size": 2 和 "translate_tabs_to_spaces": false,直接屏蔽用户设置。
正确做法:打开一个 .py 文件 → Preferences → Settings – Syntax Specific → 右侧只加两行:
"tab_size": 4<br>"translate_tabs_to_spaces": true
注意文件名必须严格匹配:Python.sublime-settings(大小写敏感),写成 python.sublime-settings 或 Python3.sublime-settings 都不生效。
-
Makefile语法会强制忽略translate_tabs_to_spaces,这是设计使然——第一列必须是\t - 已打开的文件要手动执行
Ctrl+Shift+P→ 输入Reload Syntax才刷新配置 - YAML 推荐
tab_size: 2,但若项目里有.editorconfig且含indent_style = space,得装EditorConfig for Sublime Text插件,否则静默覆盖
Convert Indentation to Spaces 灰掉了?你在处理混合缩进
菜单灰掉不是 bug,是 Sublime 主动拒绝操作——它检测到当前文件存在混合缩进(部分行开头是 \t,部分是空格),怕批量替换导致错位。
安全处理步骤:
- 先开启空白字符可视化:
View → Whitespaces → Show Whitespaces(或设"draw_white_space": "all"),让\t显示为→,空格为· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→),保存后再试命令 - 或临时切语法为
Plain Text(右下角点击 → 选Plain Text),再执行转换,避开语法插件干扰 - 转完务必再执行
Indentation: Reindent Lines,否则缩进层级可能未对齐
别用正则替换 \t → 空格:会误伤字符串、注释里的制表符,还可能把 1 个 \t 替换成 2 或 8 个空格,破坏结构。
旧文件里的\t不会自动变,必须手动触发一次
所有配置只影响新输入和自动缩进,已有 \t 字符完全不动。状态栏显示 Spaces: 4 只代表“接下来按 Tab 会插 4 空格”,不代表历史内容已清理。
当前文件转换方法:
- 右键 →
Convert Indentation to Spaces - 或
Ctrl+Shift+P(Win/Linux)/Cmd+Shift+P(macOS)→ 输入该命令回车
这个操作只处理行首缩进,不碰字符串、注释或行中 \t,比正则安全得多。但前提是:当前视图的 tab_size 值和你目标一致(比如要转成 4 空格,就得先点右下角 Tab Width: X → 选 Tab Width: 4)。
最易被忽略的是优先级链:文件内注释(如 # indent: 2) > .editorconfig > 语法专属设置 > 全局用户设置。其中任一环存在,你的配置就可能静默失效。


















