必须关闭 detect_indentation 才能使 tab_size 和 translate_tabs_to_spaces 生效,因其优先级最高且静默覆盖用户设置;python 等语言还需在语法专属设置中配置,并启用 draw_white_space 可视化验证。

Sublime Text 里按 Tab 键插不出空格,不是配置写错了,而是 detect_indentation 默认开启,它会扫描文件前几行、自动覆盖你设的 tab_size 和 translate_tabs_to_spaces——这个行为不报错、不提示,只在右下角默默显示 “Tabs: 4” 或“Detect Indentation”,让你以为改成功了。
必须关掉 detect_indentation 才能让设置生效
它优先级最高,只要打开的文件前几行有制表符或非预期空格数(比如旧 Python 文件开头是 2 空格),Sublime 就立刻切回对应模式,无视你的用户设置。不关它,其他所有配置都可能被临时劫持。
- 打开
Preferences → Settings – User - 在右侧 JSON 中添加:
"detect_indentation": false -
tab_size和translate_tabs_to_spaces才真正开始起作用
Python/JS 等语言必须进 Settings – Syntax Specific
全局用户设置对 .py 文件基本无效,因为 Python 语言包自带 Python.sublime-settings,里面硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于用户设置。
- 先打开一个
.py文件,确认右下角显示的是Python - 菜单 →
Preferences → Settings – Syntax Specific - 右侧只加两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的文件需执行
Ctrl+Shift+P→ 输入Reload Syntax才刷新
验证当前插入的是空格还是制表符
光看缩进视觉宽度不够,得确认实际字符。最直接的方法是开启空白符可视化:
- 在用户设置中加一行:
"draw_white_space": "all" - 保存后,所有空格显示为小圆点(
·),制表符显示为箭头(→) - 按一次 Tab 键,看出现的是四个
·还是一个→ - 若出现
→,说明translate_tabs_to_spaces没生效,或被语法设置覆盖
已有文件缩进混乱时别硬转
Convert Indentation → Convert to Spaces 灰掉,不是功能损坏,而是 Sublime 检测到混合缩进(部分行用 \t,部分用空格),它主动拒绝自动转换,防止错位。
- 先开启
"draw_white_space": "all",看清哪些行开头是→、哪些是· - 手动删掉前几行明显混搭的缩进(比如某行开头是
→·→) - 保存后重试命令;或临时切语法为
Plain Text,再执行转换 - 转完后务必执行
Indentation: Reindent Lines,否则缩进层级可能未对齐
真正容易被忽略的是 detect_indentation 的优先级——它不报错、不提示,只是默默把你的配置“架空”。关掉它,才能让 tab_size 和 translate_tabs_to_spaces 发挥作用。











