必须同时设 translate_tabs_to_spaces 为 true 且配好 tab_size,否则按 Tab 键永远插入 \t 字符;tab_size 仅控制显示宽度和转换比例,不决定输入行为,真正开关是 translate_tabs_to_spaces。

必须同时设 translate_tabs_to_spaces 为 true 且配好 tab_size,否则按 Tab 键永远插入 \t 字符,不是空格。
为什么改了 tab_size 但 Tab 键还是插 \t?
tab_size 只控制两件事:制表符在界面上的显示宽度、以及执行 Convert Indentation to Spaces 时的换算比例。它完全不决定键盘输入行为。
真正开关是 translate_tabs_to_spaces——只有它为 true,Tab 键才会输出空格;设成 false 或漏掉这一项,哪怕 tab_size 是 2、4、8,按下去都是单个 \t。
- 该值必须是布尔类型
true,不能写成字符串"true" - 全局设置只对新打开/新建文件生效;已打开的文件不会自动切换缩进模式
- 右下角状态栏显示
Tab Width: 4≠ 当前用空格缩进;要看右边是否写着Spaces(而不是Tabs)
如何让不同语言用不同缩进宽度?
全局 tab_size 是兜底值,但你可以为特定语法单独配置。例如让 Python 文件强制用 4 空格,而 Markdown 用 2:
- 打开一个
.py文件 →Preferences → Settings – Syntax Specific - 右侧添加:
{"tab_size": 4, "translate_tabs_to_spaces": true} - 这个配置会生成
Packages/User/Python.sublime-settings,只对.py文件生效 - 语法名必须和右下角状态栏显示的完全一致(比如是
Python,不是python或py),大小写敏感
已有文件里的 Tab 怎么批量转?
translate_tabs_to_spaces 只影响「未来输入」,不自动清理历史缩进。已有文件里的 \t 仍保留,且光标跳转、选中行为仍按制表位宽度计算(哪怕显示为空格)。
- 先点状态栏
Tab Width: X→ 确保它和你目标一致(比如要转成 4 空格,就选Tab Width: 4) - 再点同一位置 →
Convert Indentation to Spaces;或快捷键Ctrl+Shift+P(Win/Linux)/Cmd+Shift+P(macOS)→ 输入Convert Indentation to Spaces回车 - 该命令只处理行首缩进,不会动字符串或注释里的
\t - 多文件批量处理:用
Ctrl+P打开文件列表,Ctrl+点击选中多个,再对任意一个执行上述命令,全部同步转换
最常被忽略的是 detect_indentation 默认为 true:打开旧文件时会扫描前 200 行,只要发现任意一个行首 \t,就强制把当前视图切到 Tab 模式,并覆盖你的设置。如果右下角始终显示 Tabs: 4,大概率就是它在作祟。


















