必须关闭detect_indentation才能使Tab缩进设置永久生效,否则打开文件时会被自动覆盖;需在用户设置中添加"detect_indentation": false、"tab_size": 4和"translate_tabs_to_spaces": true。

Tab 缩进模式切换不是点一下状态栏就能永久生效的事,必须关掉 detect_indentation,否则打开文件瞬间就被覆盖。
为什么点右下角 Tabs/Spaces 没用?
那是临时切换,只影响当前文件本次会话。Sublime 默认开启 detect_indentation,一打开文件就扫描前 200 行——只要看到开头有 \t,立刻把 translate_tabs_to_spaces 设为 false,并忽略你所有手动设置。
- 现象:刚点成 Spaces: 4,保存后关掉再打开,又变回 Tabs: 4
- 验证方法:新建 Plain Text 文件按 Tab,如果出空格,说明用户设置有效;如果还是
\t,大概率是detect_indentation没关 - 必须在 Preferences → Settings(用户设置)里加:
"detect_indentation": false
如何让 Tab 键真正输出空格?
tab_size 控制宽度,translate_tabs_to_spaces 才决定输出什么字符——两者缺一不可,且后者必须是布尔值 true,不能加引号。
- 用户设置里至少要包含这三行:
"tab_size": 4、"translate_tabs_to_spaces": true、"detect_indentation": false - Python / JS / JSON 等文件不生效?因为语言包自带的
Python.sublime-settings优先级更高,且默认设了false和2 - 正确做法:打开一个
.py文件 → Preferences → Settings – Syntax Specific → 右侧只加两行:"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的文件需执行
Ctrl+Shift+P→ 输入Reload Syntax回车才生效
已有文件缩进怎么安全转换?
菜单里的 Convert Indentation to Spaces 灰掉,不是功能坏了,是 Sublime 检测到混合缩进(部分行用 \t、部分用空格),它主动拒绝操作以防错位。
- 先开空白符可视化:
"draw_white_space": "all",让\t显示为 →,空格为 · - 手动删掉前几行明显混搭的缩进(比如 →·→ 这种),保存后再试命令
- 或临时切语法为 Plain Text(右下角点击 → Plain Text),再执行转换,避开语法插件干扰
- 转完务必执行
Indentation: Reindent Lines,否则层级可能没对齐
EditorConfig 会完全接管缩进逻辑
如果项目根目录有 .editorconfig 且含 indent_style = tab 或 indent_size = 2,EditorConfig 插件会直接劫持缩进行为,优先级高于所有 Sublime 自身设置。
- 现象:设置全对,但右下角始终显示 Tabs: 4,点不动
- 检查路径:项目根目录 → 是否存在
.editorconfig→ 里面是否有indent_style相关项 - 临时验证:禁用 EditorConfig 插件,再试一次状态栏切换
- 团队协作建议:统一配
.editorconfig,比靠个人 Sublime 设置更可靠
最常被忽略的其实是「已打开文件不会自动刷新缩进模式」——改完设置、重载语法、甚至重启编辑器,都得手动触发一次 Reindent Lines,否则光标跳转或自动补全时缩进仍可能错乱。


















