sublime按tab插入\t的根本原因是detect_indentation默认为true,会强制切换至tab模式并忽略translate_tabs_to_spaces;解决需设"detect_indentation": false,并在语法专属设置中配置tab_size和translate_tabs_to_spaces。

Sublime 默认按 Tab 键插入 \t 字符,不是空格;想让它统一用空格缩进,必须关掉自动探测、明确启用转换、并按语言分别加固——只改 tab_size 或只开 translate_tabs_to_spaces 都会失效。
为什么按 Tab 还是插入 \t?
根本原因是 detect_indentation 默认为 true,Sublime 打开文件时会扫描前 200 行,只要发现任意一行以 \t 开头,就强制把整个视图切到 Tab 模式,并直接忽略你设的 translate_tabs_to_spaces。
- 右下角显示
Tabs: 4就是它在起作用,不是缩进宽度问题 - 即使你在
Preferences → Settings – User里写了"translate_tabs_to_spaces": true,也白搭 - 解决办法只有一条:
"detect_indentation": false必须加进用户设置(右边 JSON)
Python/JS/JSON 等文件缩进还是不对?去语法专属设置里重写
Sublime 的缩进规则优先级是:文件内注释 > 语法专属设置 > 项目设置 > 全局用户设置。Python 包自带 Python.sublime-settings,默认写了 "tab_size": 2,会直接覆盖你全局写的 4。
- 打开一个
.py文件 → 右下角点语法名(如 “Python”)→ Open Syntax Specific Preferences - 在弹出的
Python.sublime-settings右侧加这两行(别删原有内容):"tab_size": 4"translate_tabs_to_spaces": true - 同理处理
.js(用JavaScript.sublime-settings)、.json(JSON.sublime-settings)等 - 拼错文件名(比如写成
JS.sublime-settings)会导致配置完全不加载
旧文件混着 \t 和空格,怎么安全转成纯空格?
所有设置只管“新输入”,不管“已有内容”。你改完配置后打开老文件,缩进不会自动变——得手动触发转换,而且不能直接搜替换。
- 先确保当前文件语法识别正确(右下角显示
Python,不是Plain Text) - 全选(
Ctrl+A)→ 右键 → Indentation → Convert Indentation to Spaces - 如果菜单灰掉,说明 Sublime 检测到混合缩进,需先删掉几行开头的
\t再试 - 想实时验证效果?在用户设置里加
"draw_white_space": "all",\t显示为→,空格显示为·
EditorConfig 插件正在偷偷覆盖你的设置
如果你项目根目录有 .editorconfig,且含 indent_style = tab 或 indent_size = 2,EditorConfig 插件会直接劫持缩进逻辑,优先级高于所有 Sublime 设置。
- 临时验证:关掉 EditorConfig 插件,或删掉
.editorconfig中相关项 - 长期方案:把
.editorconfig改成indent_style = space,和 Sublime 设置对齐 - 注意:
expand_tabs_on_save是个辅助项,只在保存时批量转\t,但不能替代translate_tabs_to_spaces的按键行为
真正容易被忽略的是:语法专属设置和 detect_indentation 必须同时生效,缺一不可;而旧文件里的 \t 永远不会自动消失,哪怕你设置了 100 遍 tab_size。











