必须关闭detect_indentation并配置语法专属设置,否则tab_size和translate_tabs_to_spaces无效;Python文件需在Syntax Specific中单独设"tab_size":4和"translate_tabs_to_spaces":true;已有混用缩进文件须先Convert Indentation to Spaces再Reindent。

Sublime Text 的 Tab 缩进规则不会“设一次就全局生效”,必须同时控制 tab_size、translate_tabs_to_spaces 和 detect_indentation 三个参数,否则新开文件、切换语法、打开旧项目时缩进仍会静默变掉——这不是 Bug,是它的默认行为。
为什么改了 Settings – User 还是按 Tab 插 \t?
根本原因是 detect_indentation 默认为 true,它会在你打开任意文件的瞬间扫描前几行,强行把 tab_size 和 translate_tabs_to_spaces 改成“它猜的值”。比如你打开一个用 2 空格缩进的 Python 文件,右下角立刻显示 Tab Width: 2,哪怕你用户设置里写的是 4。
-
detect_indentation的覆盖发生在“视图级”,优先级高于用户设置,也高于语法专属设置 - 它不会弹窗提醒,也不会修改你的配置文件,你完全感知不到它在偷偷改
- 唯一可靠办法是在
Preferences → Settings – User中显式加一行:"detect_indentation": false
Python 文件缩进还是 2?必须进 Settings – Syntax Specific 单独配
全局设置对 .py 文件基本无效,因为 Python 语言包自带 Python.sublime-settings,里面硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。你改了全局,它照旧按自己的来。
- 操作路径:打开任意
.py文件 → 右下角点击语法名(如“Python”)→ 选Open Syntax Specific Preferences - 在弹出的 JSON 中只保留这两项:
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的
.py文件不会自动刷新,要按Ctrl+Shift+P输入Reload Syntax才生效
已有文件缩进混乱,怎么安全转成 4 空格?
配置只影响新输入,不清理历史内容。混用 \t 和空格的文件,直接 Ctrl+A + 缩进命令容易误伤字符串里的 \t 或对齐注释,导致语法错误。
- 先确认右下角显示
Spaces: 4(不是Tab) - 执行
View → Indentation → Convert Indentation to Spaces;若菜单灰掉,说明检测到混合缩进,需手动删掉几行开头的\t再试 - 转换完再执行
View → Indentation → Reindent Lines,让结构按当前规则重新对齐 - 顺手在用户设置里加
"draw_white_space": "all",空格显示为 ·,\t显示为 →,一眼识别混用
最常被忽略的是优先级链:文件内注释(如 # indent: 2) > 项目级 .sublime-project > 语法专属设置 > 全局用户设置。只要其中任一环存在,你的配置就可能静默失效。


















