必须同时设置"tab_size": 4和"translate_tabs_to_spaces": true,并关闭"detect_indentation": false,否则按tab键仍插入制表符;detect_indentation会自动覆盖用户配置,语法专属设置可为不同语言单独指定缩进。

全局缩进设为4个空格,只改 tab_size 不够,必须同时设 translate_tabs_to_spaces 为 true,否则按 Tab 键插的还是制表符(\t),不是空格。
为什么改了 tab_size 却没效果?
Sublime 默认开启 detect_indentation,它会扫描文件前几行,自动覆盖你的用户设置。比如打开一个已有 2 空格缩进的 Python 文件,右下角立刻显示 Tab Width: 2,哪怕你用户配置里写了 "tab_size": 4 也无效。
- 检查右下角状态栏:如果显示
Detect Indentation,说明正在被自动接管 - 临时修复:点击右下角
Tab Width: X→ 选Convert Indentation to Spaces,再点一次 → 选Set Indent Width: 4 - 永久解决:在
Preferences → Settings – User中显式添加"detect_indentation": false
如何为不同语言单独设缩进?
Python 要 4 空格、JS 要 2 空格,不能靠全局配置一刀切——得用语法专属设置。
- 打开对应类型文件(如
app.js),确认右下角显示JavaScript - 菜单栏 →
Preferences → Settings – Syntax Specific - 在右侧编辑窗口中写入:
{
"tab_size": 2,
"translate_tabs_to_spaces": true
}
保存后,该语法所有新文件和已打开文件都会立即应用此设置。文件名无关,只认语法识别结果。
怎么验证当前插入的是空格还是制表符?
光看缩进视觉宽度不够,得确认实际字符。最直接的方法是开启空白符可视化:
- 在
Settings – User中加一行:"draw_white_space": "all" - 保存后,所有空格显示为小圆点(·),制表符显示为箭头(→)
- 按一次
Tab键,看出现的是四个 · 还是一个 → - 若出现 →,说明
translate_tabs_to_spaces没生效或被语法设置覆盖
真正容易被忽略的是 detect_indentation 的优先级——它不报错、不提示,只是默默把你的配置“架空”。关掉它,才能让 tab_size 和 translate_tabs_to_spaces 发挥作用。











