Sublime中draw_white_space不显示Tab符号的主因是未识别Tab缩进模式,需禁用detect_indentation、设置语法专属tab_size、手动清理混合缩进并重载语法。

为什么开了 draw_white_space 还看不到 Tab 符号
常见原因是 Sublime 没把当前文件识别成“含 Tab 的文件”——它只高亮「当前缩进模式下应有的空白字符」,不是无差别渲染所有 \t 或空格。比如右下角显示 Spaces: 4,但文件里其实混着 \t,这些 \t 就不会被画出来。
排查步骤:
- 看右下角状态栏:若显示
Tabs: 4,说明 Sublime 已识别到 Tab;若显示Spaces: 4却看不到→,先确认draw_white_space是写在右侧Settings – User里,不是左侧 Default - 临时切到
Plain Text语法(Ctrl+Shift+P→Set Syntax: Plain Text),再观察是否出现→;如果出现了,说明是 Python 语法定义干扰了渲染 - 执行
View → Indentation → Convert Indentation to Tabs,再立刻切回Convert Indentation to Spaces,强制触发重识别
禁用 detect_indentation 是硬性前提
Sublime 默认打开 .py 文件时会扫描前几行:只要发现一个 \t,就立刻把整份文件切进 Tabs 模式,并覆盖你设的 translate_tabs_to_spaces: true。此时右下角显示的 Tabs: 4 不是你配的,是它“劫持”的结果。
必须在 Preferences → Settings – User 右侧 JSON 中加这一行:
{"detect_indentation": false}
不加这行,其他所有设置都只对新建文件或刚手动转换过的文件临时生效。已打开的文件需按 Ctrl+Shift+P → 输入 Reload Syntax 才能刷新。
Python 文件必须走语法专属设置
全局设置里的 tab_size 和 translate_tabs_to_spaces 对 .py 文件基本无效——Python 语言包自带的 Python.sublime-settings 会硬编码 "tab_size": 2 并优先覆盖。
正确做法:
- 先打开一个
.py文件 - 进入
Preferences → Package Settings → Python → Settings – Syntax Specific - 只添加这两行(不要删原有内容):
"tab_size": 4<br>"translate_tabs_to_spaces": true
- 别碰
Settings – User里的tab_size,否则 Markdown、JSON 等也会被强制改成 4 空格
Convert Indentation to Spaces 菜单灰掉怎么办
菜单变灰,说明 Sublime 检测到混合缩进:部分行开头是 \t,部分是空格。它拒绝自动处理,怕出错。
临时解法:
- 手动选中几行明显以
→开头的代码,按Delete或Backspace删掉开头的 Tab - 再试
Convert Indentation to Spaces,通常就能激活 - 转换后,用
Ctrl+A全选 →Ctrl+Shift+P→ 输入Indentation: Reindent补齐逻辑块对齐
已有 \t 不会自动消失,所有设置只影响“接下来按 Tab 键插什么”。可视化只是第一步,清理才是关键。批量处理请用命令行:find . -name "*.py" -exec sed -i 's/\t/ /g' {} \;(注意四个空格)


















