sublime text中tab键默认插入制表符\t,需同时关闭detect_indentation、设置tab_size为数字4、translate_tabs_to_spaces为true才能实现tab输出4个空格。

Sublime Text 默认按 Tab 键插入的是制表符 \t,不是空格——哪怕右下角显示 Tab Width: 4,那也只是渲染宽度,和输入行为无关。要真正让 Tab 键输出空格,必须同时满足三个条件:开关打开、数量指定、自动检测关闭。
为什么改了 tab_size 还是插 \t?
因为 translate_tabs_to_spaces 默认为 false,这个布尔值才是决定“按 Tab 插什么”的核心开关。只设 "tab_size": 4 不起作用;设成字符串 "4" 或加引号的 "true" 也会失效(JSON 要求数字和布尔字面量不带引号)。
-
tab_size是数字,例如4,不是"4" -
translate_tabs_to_spaces是布尔值,必须写true,不能写"true"或1 - 仅改这两项仍可能无效——
detect_indentation默认为true,它会扫描文件前几行并强行覆盖你的设置
全局配置必须关掉 detect_indentation
这个选项不报错、不提示,但优先级最高。只要打开一个已有缩进的文件,它就可能把你的 tab_size 和 translate_tabs_to_spaces 全部重置。验证方式:右下角若显示 Detect Indentation 或 Tab Width: X(非 Spaces: X),说明它正在生效。
- 打开
Preferences → Settings – User - 在右侧 JSON 中添加三行(不要删原有内容):
"detect_indentation": false"tab_size": 4"translate_tabs_to_spaces": true - 保存后,新建 Plain Text 文件按一次
Tab,再开"draw_white_space": "all"查看:应出现四个·,而非一个→
Python/JS 等语言不生效?去语法专属设置改
全局设置对 .py、.js、.json 等文件基本无效——语言包自带的 Python.sublime-settings 等配置优先级更高,且通常硬编码了 "tab_size": 2 和 "translate_tabs_to_spaces": false。
- 先打开一个
.py文件,确认右下角显示的是Python - 菜单栏选
Preferences → Settings – Syntax Specific - 右侧只加两行:
"tab_size": 4"translate_tabs_to_spaces": true - 已打开的文件需手动执行
Ctrl+Shift+P→ 输入Reload Syntax回车才刷新
已有文件缩进混乱,怎么安全转成 4 空格?
所有配置只影响新输入,不会动已有字符。混合缩进(部分行用 \t、部分用空格)时,菜单里的 Convert Indentation → Convert to Spaces 会灰掉——这是 Sublime 的保护机制,防止错位。
- 先开启空白符可视化:
"draw_white_space": "all",让\t显示为→,空格为· - 手动删掉开头几行明显混搭的缩进(比如
→·→) - 确保右下角显示
Spaces: 4(点击它可切换) - 再执行
Convert Indentation → Convert to Spaces;若仍灰,临时切语法为Plain Text再试 - 转换完务必执行
Indentation → Reindent Lines,否则缩进层级可能未对齐
真正容易被忽略的是 detect_indentation 的静默覆盖行为——它不改你的配置文件,也不弹提示,只是在你打开文件的瞬间把视图级缩进规则替换成它“猜”的结果。关不掉它,其他配置都是临时工。











