Sublime Text默认用TAB缩进,需设"translate_tabs_to_spaces": true和"detect_indentation": false使新文件默认空格缩进;当前文件转空格用Ctrl+Shift+P执行“Convert Indentation to Spaces”;批量处理需逐标签页操作或终端expand;保存后变TAB因detect_indentation生效,右下角点击转换并永久关闭该选项。

Sublime Text 默认用 TAB 字符缩进,但多数 Python、YAML、JSON 或团队协作项目要求用空格。直接批量转不会自动更新已存在的 TAB,必须手动触发转换动作,且设置不保存到文件就容易反复出错。
如何让新文件默认用空格缩进
这是最基础也最容易被忽略的一步:设置只影响新建或未修改过的文件,对已打开的文件无效。
- 菜单栏选择 Preferences → Settings,右侧用户设置中添加或修改以下两项:
-
"translate_tabs_to_spaces": true—— 输入TAB键时自动插入空格 -
"detect_indentation": false—— 关闭自动探测,避免打开旧文件时被覆盖成TAB - 同时建议设
"tab_size": 2或4,和团队规范对齐
如何把当前文件里的 TAB 全部转成空格
这个操作不可逆,且不会改变缩进逻辑(比如 1 个 TAB 不一定等于 4 个空格),得靠 Sublime 的内置命令精准执行。
- 确保文件已打开,光标在编辑区任意位置
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)呼出命令面板 - 输入
Convert Indentation to Spaces并回车 - 注意:该命令只转换“缩进用的
TAB”,行内或开头带空格混用的TAB不会动
如何批量处理多个已打开的文件
Sublime 没有原生“批量转所有标签页”的菜单项,但可以用命令行 + 插件或快捷键组合完成。
- 先全选所有要处理的标签页:点击任一 tab,按住
Ctrl(或Cmd)点其他 tab - 再按
Ctrl+Shift+P,输入Set Syntax: Plain Text(可选,避免语法高亮干扰) - 对每个 tab 单独执行
Convert Indentation to Spaces—— 没有捷径,必须逐个来 - 如果文件多,更稳的方式是关掉 Sublime,用终端跑
sed或expand:例如expand -t 4 file.py > file-spaced.py
为什么保存后又变回 TAB?
常见于打开一个已有缩进的文件时,Sublime 自动启用了 detect_indentation,覆盖了你的用户设置。
- 检查右下角状态栏:是否显示
TAB Width: 4旁边写着Indentation: Tab?说明检测生效了 - 此时点击该区域,选
Convert Indentation to Spaces,再点一次选Indentation: Convert to Spaces - 永久解决:务必在用户设置里加
"detect_indentation": false,否则每次打开旧文件都会重载为TAB - 另存为新文件名再重开,有时比“重新加载”更可靠
真正麻烦的不是怎么转,而是缩进混用后导致的 YAML 解析失败、Python 缩进错误或 Git diff 爆炸——这些往往发生在你没意识到某几行用了 TAB 的时候。










