必须同时设置"tab_size":4和"translate_tabs_to_spaces":true,并关闭"detect_indentation":false,否则Tab键仍插入\t;右下角显示Spaces:4才表示生效,且需为不同语法单独配置。

不能只改 tab_size,必须同时设 translate_tabs_to_spaces 为 true,否则按 Tab 键永远插入 \t 字符。
为什么改了 tab_size 还是插 \t?
因为 tab_size 只控制两件事:制表符在界面上的显示宽度、以及执行 Convert Indentation to Spaces 时的换算比例。它完全不决定键盘输入行为。真正开关是 translate_tabs_to_spaces ——只有它为布尔值 true(不是字符串 "true"),Tab 键才会输出空格。
- 右下角状态栏显示
Tab Width: 4≠ 当前用空格缩进;要看是否写着Spaces: 4 - 全局设置只对新打开/新建文件生效;已打开的文件不会自动切换缩进模式
- 如果文件开头有
\t,detect_indentation默认为true,会强制切回 Tab 模式并覆盖你的设置
怎么让 Tab 键真正插入空格?
编辑 Preferences → Settings(用户设置),右侧 JSON 中添加或修改以下三项:
-
"translate_tabs_to_spaces": true(必须是布尔值,无引号) -
"tab_size": 4(按项目规范填,Python 通常用 4,YAML 必须用 2) -
"detect_indentation": false(防止打开旧文件时被自动覆盖)
保存后,新建文件或重新打开已有文件,再看右下角——出现 Spaces: 4 才算生效。
不同语言要不同缩进数怎么办?
全局设置不推荐,优先用语法专属配置。例如:
- 打开一个
.py文件 →Preferences → Settings – Syntax Specific→ 右侧加:{"tab_size": 4, "translate_tabs_to_spaces": true} - 打开一个
.js文件 → 同样路径 → 右侧加:{"tab_size": 2, "translate_tabs_to_spaces": true} - 确保文件被正确识别语法:右下角点击语法名(如
Plain Text),手动选成Python或JavaScript - 若项目根目录有
.editorconfig且含indent_style = tab,EditorConfig 插件会直接覆盖所有 Sublime 设置
已有文件里的 \t 怎么转?
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多选,再对任意一个执行该命令,所有选中标签页都会同步转换
最易忽略的点:文件是否被正确识别语法、detect_indentation 是否关掉、.editorconfig 是否存在且生效——这三者任何一个没处理好,都会让设置“看起来生效了,其实没起作用”。


















