先关闭detect_indentation并设translate_tabs_to_spaces为false,再执行Convert Indentation to Tabs命令,确保tab_size与空格数一致,否则仍显示Spaces: 4。

右下角显示 Spaces: 4,但想切回 Tab 缩进?先关自动检测
Sublime 默认打开文件时会扫描前几行缩进,只要看到 \t 就立刻把 translate_tabs_to_spaces 设为 false、tab_size 覆盖为你文件里实际的 Tab 宽度——哪怕你用户设置里写死了 true 和 4,也白搭。所以第一步必须关掉这个“自作主张”:
- 打开
Preferences → Settings,在右侧用户设置中加入:"detect_indentation": false - 同时确认已有:
"translate_tabs_to_spaces": false(注意是false,不是true) - 保存后,新打开的文件才会真正按你设的规则走;已打开的旧文件仍维持原状,需手动转换
当前文件怎么把空格缩进批量转成 Tab?别用全选+退格
直接全选再按 Shift+Tab 或 Ctrl+[ 是错的:它只对“被识别为缩进”的开头空格起作用,中间或行尾的空格不会动,还可能漏掉注释行、空行、字符串里的空格,导致错位。
- 正确做法:右键 →
Indentation → Convert Indentation to Tabs - 或按
Ctrl+Shift+P搜命令:Indentation: Convert Indentation to Tabs - 执行前务必确认右下角状态栏显示的是
Spaces: 4(说明当前确实是空格缩进),否则命令无效 - 如果点完没反应,检查是否被
.editorconfig锁死:项目根目录若有该文件且含indent_style = space,EditorConfig 插件会强行拦截,临时禁用插件再试
为什么转完还是显示 Spaces: 4?Tab 宽度没对齐
Convert Indentation to Tabs 命令不会无脑把每 4 个空格换成 1 个 \t。它依赖当前 tab_size 值,按“视觉等宽”原则换算:比如 tab_size 是 4,那么开头连续 4/8/12 个空格才转成 1/2/3 个 \t;如果是 3 个空格,就留着不动——结果就是混着 \t 和空格,状态栏仍报 Spaces: 4。
- 转之前先统一
tab_size:在用户设置或语法专属设置中明确写入"tab_size": 4 - 确保原始空格缩进是严格倍数:比如每级缩进正好 4 空格,而不是 2+2+4 这种不规则组合
- 若已有不规则缩进,先用
Convert Indentation to Spaces归一化,再设好tab_size,最后转 Tab
整个项目批量转,Sublime 原生不支持,得绕开
Sublime 没有“对整个文件夹所有 .py 文件执行 Convert Indentation to Tabs”的菜单项。侧边栏多选 → 右键 → 转换,只对纯文本文件生效;对 Python、JSON 等语法高亮文件,命令常静默失败或只处理部分文件。
- 稳妥做法:用命令行 +
sed(Linux/macOS)或 PowerShell(Windows)批量替换开头空格 - 例如 macOS 下进项目根目录执行:
find . -name "*.py" -exec sed -i '' 's/^[[:space:]]\{4\}/\t/g' {} \;(仅处理开头恰好 4 空格) - 更安全的替代:用
autopep8 --in-place --aggressive --aggressive *.py(需装 autopep8),它会按 PEP8 规则重排缩进,且默认输出 Tab(需配--indent-size=4 --indent-with-tabs) - 编辑器内只做校验:转完后打开几个文件,按
View → Whitespaces → Show Whitespaces,确认\t显示为→、空格为·,没有残留
最易被忽略的一点:转成 Tab 后,如果项目里还有 .editorconfig 文件且含 indent_style = space,下次用 VS Code 或其他编辑器打开,或者 CI 流水线跑 linter,依然会报缩进错误——规范不是改编辑器设置就能落地的,得同步清理配置冲突。











