Python文件缩进应设为4空格,需在语法专属配置中设置"tab_size": 4和"translate_tabs_to_spaces": true,并关闭"detect_indentation": false以防自动覆盖。

Python 文件缩进还是 2?别动全局设置,去改语法专属配置
全局 Preferences.sublime-settings 里写 "tab_size": 4 对 .py 文件基本无效。Python 语言包自带 Python.sublime-settings,默认硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false,它的优先级高于用户全局设置。
正确做法是:先打开一个 .py 文件 → 右下角点击语法名(如“Python”)→ 选择 Open Syntax Specific Settings → 在右侧 JSON 中只添加两行:
{
"tab_size": 4,
"translate_tabs_to_spaces": true
}
不要删原有内容,保存即可。已打开的文件需手动 Ctrl+Shift+P → 输入 Reload Syntax 才刷新生效。
JavaScript、JSON、HTML 怎么各自配缩进?语法名必须对得上
每种语言的语法专属配置文件名必须严格匹配 Sublime 内部识别的语法名,比如:
- JS 文件对应
JavaScript.sublime-settings - JSON 文件对应
JSON.sublime-settings - HTML 文件对应
HTML.sublime-settings - Vue 单文件组件中的
<script>块若被误判为 HTML,缩进就会错——点右下角语法名手动切到JavaScript才能加载正确配置
找不到菜单项?用 Ctrl+Shift+P 输入 Set Syntax Specific Setting 回车,再选语言。首次打开时文件为空,手动写入配置即生效,无需重启。
为什么改了 tab_size 还是插 \t?detect_indentation 在偷偷覆盖
即使你为 Python 单独配了 "tab_size": 4 和 "translate_tabs_to_spaces": true,只要 "detect_indentation": true(默认值),打开旧文件时 Sublime 就会扫描前几行,看到开头有 \t 或 2 空格,立刻把当前视图的缩进规则改成它“猜”的值——右下角显示 Tabs: 2 就是它在作怪。
必须在 Preferences → Settings – User 的右侧 JSON 中显式加一行:
"detect_indentation": false
关掉后,新文件才严格按你设的规则行为;已打开的文件仍需 Reload Syntax 才刷新。这个开关不关,其他所有缩进配置都可能被临时劫持。
已有混用缩进的文件怎么安全转成 4 空格?别 Ctrl+A 直接缩进
Convert Indentation to Spaces 不是万能清洁工:它会无差别替换所有行首缩进,但字符串里的 \t、注释对齐用的空格也会被转,可能破坏语义或导致语法错误。
安全操作顺序:
- 确认右下角状态栏显示
Spaces: 4(不是Tabs: 4) - 若
Convert Indentation → To Spaces菜单项灰掉,说明检测到混合缩进——先手动删掉前几行开头的\t,再重试 - 转换完立刻执行
View → Indentation → Reindent,让 Sublime 按语法结构重新对齐嵌套层级 - 顺手加
"draw_white_space": "all"到用户设置,空格显示为·,\t显示为→,一眼识别残留混用
语法专属设置生效的前提,是文件已被正确识别为对应语言;而 detect_indentation 关闭与否,决定了你写的配置到底能不能落地——这两点漏掉任何一个,缩进都会“看起来设了,其实没用”。


















