必须同时设置 translate_tabs_to_spaces 为 true 和 tab_size 才能使 tab 键插入空格;仅改 tab_size 无效,因其仅控制显示宽度与缩进量,不改变按键行为。

Sublime Text 里按 Tab 键默认插的是 \t,不是空格;想让它插空格,必须同时设好 translate_tabs_to_spaces 和 tab_size,缺一不可。
为什么只改 tab_size 没用?
tab_size 只控制显示宽度、缩进量和转换时的换算比例,它不改变按键行为。哪怕你设成 "tab_size": 100,只要 "translate_tabs_to_spaces": false(默认值),按 Tab 还是插入一个 \t 字符。
-
"translate_tabs_to_spaces": true→ 按 Tab 插入tab_size个空格 -
"translate_tabs_to_spaces": false→ 按 Tab 插入\t,tab_size完全不起作用 - 右下角显示
Tabs: 4≠ 生效;必须看到Spaces: 4才说明当前文件正用空格缩进
怎么让新文件一打开就用空格?
编辑 Preferences → Settings(用户设置),确保右侧有这三行:
{
"translate_tabs_to_spaces": true,
"tab_size": 4,
"detect_indentation": false
}
detect_indentation 默认为 true,打开旧文件时会扫描前 200 行,只要发现行首有 \t,就强制切回 Tab 模式,覆盖你的设置。
- 改完后,新建文件立即生效;已打开的文件需关闭重开才刷新缩进模式
- Python 项目通常用 4,YAML 必须用 2,Vue/React 常用 2 ——
tab_size值要和项目规范一致 - 别写成
"translate_tabs_to_spaces": "true"(字符串),布尔值不能加引号
已有文件里的 Tab 怎么转?
Convert Indentation to Spaces 只处理行首缩进,不碰字符串或行中 \t,比正则替换安全得多。
- 快捷键:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Convert Indentation to Spaces回车 - 菜单路径:
View → Indentation → Convert Indentation to Spaces - 如果菜单灰掉,说明检测到混合缩进(Tab + 空格混用),先手动删掉几行开头的
\t再试 - 多文件批量处理:用
Ctrl+P打开文件列表,按住Ctrl多选标签页,再对任意一个执行该命令,所有选中文件同步转换
为什么改了设置还是插出 \t?
不是配置没写对,而是被更高优先级的设置静默覆盖了。
- 语法专属设置(如
Python.sublime-settings)优先级 > 全局用户设置;必须用Preferences → Settings – Syntax Specific单独配 - 项目根目录有
.editorconfig且含indent_style = tab,EditorConfig 插件会直接压倒 Sublime 设置 - 某些语言(如
Makefile)硬编码要求首列为\t,即使你开了translate_tabs_to_spaces也无效 - 临时验证方法:新建一个
Plain Text文件,敲 Tab,看是否出空格;如果是,问题一定出在语法或项目配置上
最常被忽略的是:右下角状态栏显示的缩进类型,反映的是当前文件实际生效的缩进模式,而不是你“以为”配好的全局设置。每次切换文件类型或打开旧项目,都要看一眼那里显示的是 Spaces: 4 还是 Tabs: 4。











