必须禁用 detect_indentation,否则缩进设置仅对新建文件临时有效;需在用户设置中添加 "detect_indentation": false,并为 python 文件单独配置语法专属设置。

必须禁用 detect_indentation,否则所有缩进设置都只对新建文件临时有效。 Sublime 默认会扫描文件前几行,只要发现一个 \t,就立刻把当前文件切到 Tab 模式,并覆盖你设的 translate_tabs_to_spaces: true。右下角显示 Tabs: 4 不是你在控制,是它在“劫持”。
关掉 detect_indentation 是硬性前提
这个开关不关,其他配置全是纸面功夫:
- 在
Preferences → Settings – User的 JSON 右侧加这一行:"detect_indentation": false - 已打开的 .py 文件不会自动刷新设置,需按
Ctrl+Shift+P→ 输入Reload Syntax手动重载 - 如果项目根目录有
.editorconfig且含indent_style = tab,EditorConfig 插件会直接接管,detect_indentation彻底失效
Python 文件必须用语法专属设置
全局设置里的 tab_size 和 translate_tabs_to_spaces 对 Python 文件无效——Python 语言包自带的 Python.sublime-settings 会硬编码 "tab_size": 2 并优先覆盖。
- 先打开一个
.py文件,再进入Preferences → Package Settings → Python → Settings – Syntax Specific - 只加这两行(不要删原有内容):
"tab_size": 4和"translate_tabs_to_spaces": true - 别碰
Settings – User里的tab_size,否则 Markdown、JSON 等也会被强制改成 4 空格
已有代码里的 \t 不会自动消失
所有设置只影响“接下来按 Tab 键插什么”,对历史 \t 字符完全无感。状态栏显示 Spaces: 4 只代表“未来行为”,不代表文件已干净。
- 开启空白字符显示:
"draw_white_space": "all"(加到Settings – User),空格显示为·,Tab 显示为→ - 若
Convert Indentation → To Spaces菜单灰掉,说明 Sublime 检测到混合缩进,需手动删掉几行开头的→再试 - 批量处理?Sublime 不支持跨文件操作,Linux/macOS 下可用:
find . -name "*.py" -exec sed -i 's/\t/ /g' {} \;(注意四个空格)
粘贴或热键缩进失效,大概率不是配置问题
即使设置全对,Ctrl+V 粘贴后缩进错乱、Ctrl+] 没反应,往往是因为上下文没被识别为 Python。
- 看右下角是否显示
Python—— 如果不是,按Ctrl+Shift+P→ 输入Set Syntax: Python强制切换 - 复制粘贴引入的隐藏字符(尤其从网页、LeetCode、PDF 复制)是高频污染源,建议先粘到纯文本编辑器里过一遍
-
trim_automatic_whitespace默认为true,保存时会删行尾空格——若你靠空格对齐 YAML 或 Markdown 表格,得在用户设置里加"trim_automatic_whitespace": false
真正麻烦的从来不是改设置,而是混用缩进的文件一旦存在,Sublime 就会拒绝自动转换,逼你一行行手动清理。这不是 bug,是它在防止你把 if 块错缩进成 for 子句——Python 的缩进就是语法,改错了不是格式问题,是逻辑崩塌。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











