必须同时设translate_tabs_to_spaces为true且配好tab_size,否则Tab键永远插入\t;因tab_size仅控制显示宽度、自动缩进量及转换比例,真正决定输入行为的是translate_tabs_to_spaces,且detect_indentation默认开启会覆盖设置,Python等语言还需语法专属配置。

必须同时设 translate_tabs_to_spaces 为 true 且配好 tab_size,否则按 Tab 键永远插的是 \t 字符,不是空格。
为什么改了 tab_size 但 Tab 键还是插 \t?
tab_size 只控制三件事:制表符显示宽度、自动缩进量、以及执行 Convert Indentation to Spaces 时一个 \t 换成几个空格。它完全不决定你按 Tab 键输入什么。
真正开关是 translate_tabs_to_spaces:
-
"translate_tabs_to_spaces": true→ 按 Tab 插入tab_size个空格 -
"translate_tabs_to_spaces": false(默认值)→ 按 Tab 插入单个\t,无视tab_size - 该字段必须是布尔值
true,写成"true"(字符串)或漏掉,都无效
为什么刚打开文件,右下角就变成 Tabs: 4?
因为 detect_indentation 默认为 true,Sublime 会在打开文件时扫描前 200 行,只要发现行首有 \t,就强制切回 Tab 模式,覆盖你的全部设置。
解决办法是在用户设置里显式加:
"detect_indentation": false- 改完后需关闭再重开已有文件才生效
- 已打开的文件不会自动重排缩进,旧
\t不会变为空格,得手动触发转换
为什么 Python 文件死活不听全局设置?
Sublime 的 Python 语言包自带硬编码配置:"tab_size": 2 和 "translate_tabs_to_spaces": false。它的优先级高于用户设置(Preferences → Settings),属于「语法专属设置」。
正确做法是:
- 打开一个
.py文件 → Preferences → Settings – Syntax Specific - 在右侧 JSON 中只保留:
"tab_size": 4和"translate_tabs_to_spaces": true - 保存后执行
Ctrl+Shift+P→ 输入Reload Syntax回车,让新配置立即作用于当前文件 - 其他语言(如 JavaScript、YAML、Vue)同理,各自进对应
Settings – Syntax Specific
为什么 Convert Indentation to Spaces 菜单灰掉或转完缩进错位?
这个命令只处理行首缩进,且严格按当前视图的 tab_size 值换算:若设的是 4,就把每个 \t 替成 4 个空格;但它不重算逻辑层级,也不处理字符串或注释里的 \t。
常见失效场景:
- 菜单灰掉 → 检测到混合缩进(Tab + 空格混用),需先手动删掉几行异常开头的
\t再试 - 转完缩进塌陷 → 当前
tab_size值与原始\t实际占位不一致(比如文件原用 2 列 Tab,但你设了tab_size: 4) - 多文件批量处理 → 用
Ctrl+P打开文件列表,Ctrl+点击选中多个,再对任意一个执行该命令,所有选中标签页都会同步转换
最常被忽略的是三重覆盖机制:语法专属设置 > detect_indentation 自动推断 > 全局用户设置。很多人反复调 tab_size 却始终失效,问题不在数值,而在谁真正说了算。


















