要使Tab键输入空格并统一缩进,需同时设置"translate_tabs_to_spaces": true、"tab_size": 4(依项目规范)、"detect_indentation": false;右下角显示Spaces: 4才表示生效,Convert Indentation to Spaces仅转换当前文件行首缩进。

不能真正“一键”全项目生效,但能用两步操作覆盖绝大多数场景:先让 Tab 键输入空格,再对当前文件执行Convert Indentation to Spaces处理已有缩进。
为什么改了设置右下角还显示 Tabs: 4?
因为translate_tabs_to_spaces默认是false,只设tab_size没用——它只控制视觉宽度,不改变输入行为。右下角显示Tab Width: 4 ≠ 你按 Tab 插入的是空格;必须看到Spaces: 4才算生效。
-
detect_indentation默认为true,打开旧文件时会扫描前 200 行,只要发现行首有\t,就强制切回 Tab 模式,覆盖你的设置 - 项目根目录存在
.editorconfig文件且含indent_style = tab,EditorConfig 插件优先级高于所有 Sublime 设置 - 当前语法(如 Python)的专属设置(
Python.sublime-settings)里没写translate_tabs_to_spaces,就会回退到默认行为
怎么让新输入的 Tab 自动变空格?
这不是“转换”,而是修改输入行为。编辑Preferences → Settings – User,必须同时加这三项:
-
"translate_tabs_to_spaces": true(布尔值,别加引号),否则tab_size不起作用 -
"tab_size": 4(值要和项目规范一致:Python 通常用 4,YAML 必须用 2,Vue/React 常用 2) -
"detect_indentation": false,防止打开旧文件时被自动覆盖
如果某语言(如 Markdown)需要不同缩进,用Preferences → Settings – Syntax Specific单独配。
已有文件里的 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)多选,再对任意一个执行该命令——所有选中标签页都会同步转换
最容易被忽略的是三重覆盖机制:语法专属设置 > detect_indentation自动推断 > 全局用户设置。很多人反复修改tab_size却始终失效,问题不在数值,而在谁真正说了算。

















