Sublime按Tab插入\t是因detect_indentation自动启用、语法/EditorConfig覆盖用户设置;需全局+语法专属设tab_size、translate_tabs_to_spaces、detect_indentation三者为true/false,并手动转换旧文件缩进。

为什么按 Tab 键还是插入 \t?
这不是 Sublime “没设对”,而是它默认会优先服从文件已有缩进、语法绑定规则或插件配置——你的用户设置只是“备选”。常见现象是:明明在 Settings – User 里写了 "translate_tabs_to_spaces": true,但一按 Tab 还是跳一个制表符。
-
detect_indentation默认为true,打开文件时 Sublime 会扫描前 200 行,一旦发现开头有\t,就自动切到 Tab 模式,并覆盖你手动写的translate_tabs_to_spaces - 项目根目录存在
.editorconfig文件,且含indent_style = tab,EditorConfig 插件会直接劫持缩进逻辑,优先级高于所有 Sublime 设置 - 当前文件已绑定语法(如 Python),而该语法的专属设置(
Python.sublime-settings)里没写translate_tabs_to_spaces,语言包自带规则就会回退到默认行为 - 右下角状态栏显示
Tabs: 4而不是Spaces: 4,说明当前视图仍未生效
怎么让新建文件和所有 .py/.js/.env 都统一用空格?
必须同时满足三个条件,缺一不可:全局默认 + 语法覆盖 + 自动检测关闭。只改 tab_size 或只关 detect_indentation 都不够。
- 在
Preferences → Settings – User中加入这三行(顺序无关,但三者都要):"tab_size": 4、"translate_tabs_to_spaces": true、"detect_indentation": false - 对每种常用语法单独设置:打开一个
.py文件 → 右下角点语法名(如 “Python”)→Open Syntax Specific Preferences→ 在弹出的Python.sublime-settings里也写上同样三行 - 对于无语法高亮的文件(如
.env、.gitignore),Sublime 完全依赖用户设置,所以那三条就是唯一生效入口;但若你装了 EditorConfig 插件,它仍可能绕过这些设置
旧项目混着 Tab 和空格,怎么批量清理?
设置只管“新输入”,不管“已有内容”。你改完配置后打开老文件,缩进不会自动变——得手动触发转换,而且要分场景处理。
- 单个文件:全选
Ctrl+A→ 右键 →Indentation → Convert Indentation to Spaces(或按Ctrl+Shift+P搜该命令) - 多个文件一起转:先用
Ctrl+P打开快速跳转,输入@folder:myproject进入项目,再用侧边栏多选文件 → 右键 →Convert Indentation to Spaces - 如果某文件执行后右下角仍显示
Tabs: 8,说明它被.editorconfig锁死了,要么删掉该文件,要么临时禁用 EditorConfig 插件(Preferences → Package Control → Disable Package)再试
缩进设好了,但 Prettier/Black 格式化还是用 Tab?
这是最常被混淆的一点:Sublime 的缩进设置只控制你按 Tab 键的行为,和代码格式化工具完全无关。它们读自己的配置,不看 tab_size。
- Prettier 以
.prettierrc为准,其中"useTabs": false才强制空格;即使你 Sublime 设成 4 空格,它也可能输出 2 空格甚至带 Tab - Black 不支持 Tab,但它的缩进宽度由
--line-length和内部策略决定,不受 Sublimetab_size影响 - 验证方式:保存文件后看右下角是否仍是
Spaces: 4;如果不是,说明格式化工具重写了整行缩进,此时应检查其配置,而非折腾 Sublime 设置
.py 文件受 Python 专属设置管,.js 受 JavaScript 设置管,而 .env 这类纯文本文件只吃用户设置——如果你没给 Python 单独配,它就可能沿用语言包默认的 4 空格,但 JS 插件又强制 2 空格,结果就是缩进风格不一致。得一个个语法去确认,不能只信全局设置。










