必须同时设editor.insertspaces为true且配好editor.tabsize,否则按tab键永远插入\t字符;editor.tabsize仅控制显示宽度和转换时的空格数,真正决定输入行为的是editor.insertspaces,而editor.detectindentation为true会覆盖设置。

必须同时设 translate_tabs_to_spaces 为 true 且配好 tab_size,否则按 Tab 键永远插入 \t 字符,不是空格。
为什么改了 tab_size 却还是插 \t?
tab_size 只控制两件事:制表符在界面上的显示宽度、以及执行 Convert Indentation to Spaces 时一个 \t 换成几个空格。它完全不决定键盘输入行为。
真正开关是 translate_tabs_to_spaces——只有它为布尔值 true(不能写成 "true"),Tab 键才会输出空格;设成 false 或漏掉这一项,按下去都是单个 \t。
- 右下角状态栏显示
Tab Width: 4≠ 当前用空格缩进;要看右边是否写着Spaces: 4 - 已打开的文件不会自动切换缩进模式,改完设置需关闭再重开才能生效
- 如果文件开头有
\t,detect_indentation(默认true)会强制切回 Tab 模式,覆盖你的设置
怎么让新输入的 Tab 自动变空格?
编辑 Preferences → Settings(用户设置),右侧加这三行:
{
"translate_tabs_to_spaces": true,
"tab_size": 4,
"detect_indentation": false
}
其中 tab_size 要和项目规范一致(Python 通常用 4,YAML 必须用 2,Vue/React 常用 2)。
-
detect_indentation设为false才能防止打开旧文件时被自动覆盖 - 不同语言要不同缩进数?必须用
Preferences → Settings – Syntax Specific单独配,比如打开一个.py文件后配{"tab_size": 4, "translate_tabs_to_spaces": true} - 语法名大小写敏感,右下角显示的是
Python,就不能写成python或Py
已有文件里的 Tab 怎么批量转?
Convert Indentation to Spaces 只处理当前文件的行首缩进,不碰字符串或行中 \t,也不跨文件。它严格按当前视图的 tab_size 值换算:若设的是 4,就把每个 \t 替成 4 个空格。
- 快捷键:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Convert Indentation to Spaces回车 - 菜单路径:
View → Indentation → Convert Indentation to Spaces - 如果菜单灰掉,说明检测到混合缩进(Tab + 空格混用),需先删掉几行开头的
\t再试 - 想一次处理多个文件?用
Ctrl+P打开文件列表,按住Ctrl(或Cmd)多选,再对任意一个执行该命令——所有选中标签页都会同步转换
EditorConfig 或插件冲突怎么办?
如果项目根目录存在 .editorconfig 文件且含 indent_style = tab,而你又装了 EditorConfig for Sublime Text 插件,那它的优先级高于所有 Sublime 设置,你的配置会被静默覆盖。
- 检查是否装了 EditorConfig 插件:菜单
Preferences → Package Settings → EditorConfig - 确认
.editorconfig里没写indent_style = tab,或者改成indent_style = space并配好indent_size - 语法专属设置(如
Python.sublime-settings)优先级 >.editorconfig> 全局用户设置,但前提是语法被正确识别——右下角显示Plain Text就说明没识别,得手动点它选对语法
最易忽略的是:detect_indentation、语法专属设置、EditorConfig 这三者形成了一套覆盖链,很多人反复调 tab_size 却无效,问题不在数值,而在谁真正说了算。











