必须同时设置"tab_size":4和"translate_tabs_to_spaces":true,并禁用"detect_indentation":false,且为Python等语法单独配置Syntax Specific设置,否则Tab键仍插入\t或被自动覆盖。

Sublime Text 默认按 Tab 键插入的是 \t,不是空格——哪怕右下角显示 Tab Width: 4,那也只是制表位宽度,和实际插入字符无关。要真正让团队代码缩进统一、过 PEP 8/ESLint/Black,必须同时控制「输入行为」和「已有内容转换」,缺一不可。
为什么改了 tab_size 还是插出 \t?
因为 translate_tabs_to_spaces 默认是 false,这个开关不打开,tab_size 就只是个显示参数,对按键输入完全没影响。
-
translate_tabs_to_spaces: true→ 按Tab插入空格(数量由tab_size决定) -
translate_tabs_to_spaces: false(默认)→ 按Tab插入\t,哪怕tab_size是 100 - 全局设置里只加
"tab_size": 4不生效;必须显式写"translate_tabs_to_spaces": true(布尔值,别加引号)
Python 文件缩进还是 2 空格或 \t?去语法专属设置改
全局设置对 .py 文件基本无效,因为 Python 语言包自带硬编码的 "tab_size": 2 和 "translate_tabs_to_spaces": false。
- 打开一个
.py文件 →Preferences → Settings – Syntax Specific - 在右侧添加两行(别删原有内容):
"tab_size": 4和"translate_tabs_to_spaces": true - 关键补一刀:
"detect_indentation": false—— 否则一打开旧文件,Sublime 就扫描前 200 行,发现有\t就立刻切回 Tab 模式 - 已打开的文件需手动执行
Ctrl+Shift+P→Reload Syntax才生效
已有混用缩进的文件怎么安全批量转?
Convert Indentation to Spaces 不是万能替换,它只处理行首缩进,且依赖当前视图的 tab_size 设置。混用时直接调用常失败。
- 先确认右下角状态栏显示的是目标缩进类型,比如
Spaces: 4;如果是Tab,点它 →Convert Indentation to Spaces - 若菜单灰掉,说明 Sublime 检测到混合缩进(部分行是
\t,部分是空格),得手动删掉几行开头的\t再试 - 转完后,再执行
Ctrl+Shift+P→Indentation: Reindent Lines,它才按当前tab_size和translate_tabs_to_spaces重新计算整篇缩进层级 - 顺手开
"draw_white_space": "all",让\t显示为→、空格显示为·,一眼揪出混用
哪些地方会静默覆盖你的设置?
优先级从高到低是:文件内注释(如 # indent: 2) > 项目级 .editorconfig > 语法专属设置 > 全局用户设置。只要其中任一环存在,你的配置就可能失效。
- 检查项目根目录有没有
.editorconfig;如果有,需安装EditorConfig for Sublime Text插件才能生效,否则该配置会被忽略 - 某些语法(如
Makefile)强制用\t,即使你全局设了translate_tabs_to_spaces,它也会无视——这是故意设计 - 粘贴进来的代码不受
translate_tabs_to_spaces控制,仍保留原样;粘贴后需手动触发Convert Indentation to Spaces
最常被忽略的是 detect_indentation: false 和语法专属设置这两步——不关前者,打开旧文件就自动回退;不配后者,Python/JS/YAML 等文件永远走不通。


















