必须同时设置 tab_size 和 translate_tabs_to_spaces,否则按 Tab 键仍插入 \t;因后者默认为 false,仅设前者无效;右下角显示 Spaces: 4 才表示生效,且需禁用 detect_indentation 防被文件内容覆盖。

必须同时设 tab_size 和 translate_tabs_to_spaces,否则按 Tab 键永远插的是 \t,不是空格。
为什么改了 tab_size 还是插入制表符?
因为 translate_tabs_to_spaces 默认是 false。它不控制“缩进宽度”,只控制“按 Tab 键时输出什么”。哪怕你设了 "tab_size": 4,只要没写 "translate_tabs_to_spaces": true,按下 Tab 就还是一个 \t 字符。
- 右下角显示
Tab Width: 4≠ 当前用的是空格;它只表示“当前缩进视觉宽度为 4”,类型可能是\t或空格 - 点开右下角状态栏,确认旁边写的是
Spaces: 4(不是Tab)才说明生效 - 全局设置里只加
tab_size不加translate_tabs_to_spaces,等于白配
Python 文件死活不听用户设置?去语法专属设置里重写
Sublime 的 Python 语言包自带硬编码配置:"tab_size": 2 和 "translate_tabs_to_spaces": false。你的全局设置会被它直接覆盖——这不是 bug,是设计行为。
- 打开任意
.py文件 → 右下角点击Python→ 选Open Syntax Specific Preferences - 在弹出的 JSON 中只保留这两行:
"tab_size": 4和"translate_tabs_to_spaces": true - 已打开的文件不会自动刷新,必须手动执行
Ctrl+Shift+P→ 输入Reload Syntax回车 - 其他语言(如
JavaScript、JSON、Vue)同理,各自进对应Settings – Syntax Specific
为什么刚打开文件缩进就“变回去了”?关掉 detect_indentation
默认开启的 detect_indentation 会在你打开文件瞬间扫描前几行,强行把 tab_size 和 translate_tabs_to_spaces 改成它“猜”的值——比如看到开头有 \t,就静默设成 false,你完全看不到提示。
- 必须在
Preferences → Settings – User中显式加:"detect_indentation": false - 这个开关优先级极高,不关它,语法专属设置和全局设置都可能被覆盖
- 关掉后,缩进行为才真正由你写的配置决定,而不是被文件内容反向劫持
已有代码缩进混乱,怎么安全转成空格?
Convert Indentation to Spaces 不是万能的:它只做字符替换,不重算逻辑缩进层级。混用时菜单常灰掉,或转完缩进错位。
- 先确认右下角显示
Spaces: 4(不是Tab),且语法识别正确(如显示Python,不是Plain Text) - 执行
View → Indentation → Convert Indentation to Spaces—— 若灰掉,说明检测到混合缩进,需手动删掉几行开头的\t再试 - 再执行
Ctrl+Shift+P→ 输入Indentation: Reindent Lines,它才会按当前tab_size和translate_tabs_to_spaces重新计算整篇缩进 - 顺手开
"draw_white_space": "all",让\t显示为→、空格显示为·,一眼识别混用
最易被忽略的是优先级链:文件内注释(如 # indent: 2)>项目级 .editorconfig >语法专属设置 > 全局设置。其中任一环存在,你的配置就可能静默失效。

















