Sublime缩进受detect_indentation、语法专属设置和文件内容三重影响;需关闭detect_indentation并配置语法专属设置,再用Convert Indentation to Spaces统一处理。

Sublime 的缩进不是“设一次就固定”,而是被 detect_indentation、语法专属设置、文件已有内容三重覆盖。不关 detect_indentation,其他配置基本白配。
为什么改了 tab_size 和 translate_tabs_to_spaces 还是插 \t
因为 detect_indentation 默认为 true,打开文件时 Sublime 会扫描前几行——只要看到开头有 \t 或 2 空格,立刻覆盖你设的 tab_size: 4 和 translate_tabs_to_spaces: true。右下角显示 Tabs: 4 就是它在作怪。
- 必须在
Preferences → Settings – User右侧 JSON 中加一行:"detect_indentation": false - 关掉后,新文件才严格按你设的
tab_size和translate_tabs_to_spaces行为 - 已打开的文件不会自动刷新,需手动
Ctrl+Shift+P→ 输入Reload Syntax才生效
Python 文件缩进还是 2?别动全局设置,去改语法专属配置
Python 语言包自带 Python.sublime-settings,默认写了 "tab_size": 2 和 "translate_tabs_to_spaces": false,优先级高于全局用户设置。你在 Settings – User 里写的 4 完全无效。
- 正确路径:
Preferences → Settings – Syntax Specific(注意:必须先打开一个.py文件,否则菜单不可用) - 在右侧 JSON 中只加两行:
"tab_size": 4和"translate_tabs_to_spaces": true,不要删原有内容 - JavaScript、JSON、YAML 等同理,都要单独配,不能指望一刀切
已有文件缩进混乱,怎么安全转成 4 空格
配置只影响“新输入”,不清理历史内容。混用 \t 和空格的文件,直接 Ctrl+A 再缩进容易误伤字符串里的 \t 或对齐注释。
- 先确认右下角显示
Spaces: 4(不是Tab),再执行View → Indentation → Convert Indentation to Spaces - 如果该菜单项灰掉,说明 Sublime 检测到混合缩进——此时先手动删掉几行开头的
\t,再重试 - 转换完再执行
View → Indentation → Reindent,让结构对齐更准确 - 顺手加
"draw_white_space": "all"到用户设置里,空格显示为·,\t显示为→,一眼识别混用
快捷键 Ctrl+] / Ctrl+[ 缩得不准?先看这三件事
这对组合才是官方推荐的块级缩进方式,但行为受干扰极多:
- 右下角语法标识是否准确?比如 Vue 单文件组件中
<script>块可能被误判为 HTML,点它手动切到JavaScript - 执行前先
Ctrl+Shift+P→ 输入Indentation: Convert Indentation to Spaces,把 Tab 归一化为空格 - 选区必须对准逻辑结构:嵌套结构建议先用
Ctrl+Shift+M(选括号内)或Ctrl+Shift+J(选同缩进内容),再缩进
最常被忽略的是:语法专属设置优先级高于全局设置,而 detect_indentation 又在文件打开瞬间就劫持了二者。三者不协同,改了也像没改。

















