需设置"translate_tabs_to_spaces": true、"tab_size": 4、"detect_indentation": false,并手动转换已有缩进;同时为Python文件绑定缩进规则,避免插件劫持Tab键。

如何让 Sublime Text 的 Tab 键插入 4 个空格(而非制表符)
Sublime Text 默认用 \t(制表符)响应 Tab 键,但 Python 要求缩进统一用空格,PEP 8 明确推荐 4 个空格。必须关闭制表符、强制空格化、并设对宽度。
- 打开 Preferences → Settings(左右双栏配置),在右侧用户设置中添加或修改以下三项:
-
"translate_tabs_to_spaces": true—— 关键!Tab 键不再输入\t,改输空格 -
"tab_size": 4—— 每次 Tab 插入 4 个空格(不是“显示为 4”,是“插入 4”) -
"detect_indentation": false—— 防止文件里已有\t或混合缩进时,Sublime 自作主张覆盖你的设置
{
"translate_tabs_to_spaces": true,
"tab_size": 4,
"detect_indentation": false
}
为什么改了设置后旧文件还是缩进错乱?
因为 "translate_tabs_to_spaces" 只影响「新按下的 Tab 键」,不自动转换已有内容。如果文件里混着 \t 和空格,Python 解释器会直接报 IndentationError: unindent does not match any outer indentation level。
- 手动修复:全选代码 → Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac)→ 输入
Convert Indentation to Spaces回车 - 一劳永逸:安装插件
EditorConfig,并在项目根目录加.editorconfig文件,写入:indent_style = space和indent_size = 4 - 别依赖「显示缩进线」:开启
"draw_white_space": "all"可看到空格和\t差异,方便肉眼排查
Python 文件如何确保每次新建都自动套用 4 空格?
Sublime 不按文件类型自动继承缩进设置,除非你显式绑定语法和缩进规则。仅靠全局设置不够,尤其当你同时写 Python、JSON、Shell 脚本时。
- 打开一个
.py文件 → View → Indentation → Convert Indentation to Spaces(先清理) - 再点 View → Indentation → Indentation Rules… → 勾选
Indent using spaces,并设Tab width:为4 - 最后点 View → Indentation → Detect Indentation 关掉(避免它下次又抢跑)
- 这样当前文件的语法绑定就记住了,新建
.py文件也会沿用(Sublime 会缓存 per-syntax 设置)
Tab 键行为异常?检查是否被插件劫持
有些插件(如 Emmet、AutoFileName)会重映射 Tab 键用于代码补全。此时即使设置正确,Tab 也可能不缩进,而是触发补全或卡住。
立即学习“Python免费学习笔记(深入)”;
- 临时禁用插件验证:菜单 Preferences → Package Control → Disable Package,逐个关掉可疑插件
- 查键位绑定:打开 Preferences → Key Bindings,搜索
"tab",看是否有插件级key binding优先于默认缩进逻辑 - 安全做法:把缩进相关快捷键显式写进用户键绑,例如强制
tab在 Python 中只做缩进:
[
{
"keys": ["tab"],
"command": "insert_best_completion",
"args": {"default": "\t", "exact": true},
"context": [
{ "key": "setting.auto_complete", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[^\\s]" },
{ "key": "following_text", "operator": "not_regex_contains", "operand": "[^\\s]" }
]
}
]
Python 缩进问题表面是 Tab 设置,实际常卡在「已有混排未清理」「插件干扰」「语法绑定未生效」这三处。调完配置别急着写代码,先用 Convert Indentation to Spaces 扫一遍当前文件。










