sublime text中tab键默认触发补全而非缩进,真正缩进快捷键是ctrl+](增)和ctrl+[(减),二者不可修改但可重绑定;需关闭detect_indentation才能使tab_size等设置生效。

Sublime Text 里没有“修改Tab缩进快捷键”这回事——Tab 键本身不是缩进命令,而是补全触发器;真正管缩进的快捷键是 Ctrl+](增)和 Ctrl+[(减),它们不可被“修改”,但可被“绕过”或“重绑定”。
为什么 Tab 键按下去不缩进?
因为 Sublime 默认把 Tab 绑定给补全(如 Emmet、函数参数提示、Snippet 展开),尤其当光标落在引号内、括号后、或有语法提示时,Tab 会弹菜单而非插空格。这不是快捷键冲突,是设计如此。
- 选中多行按
Tab,大概率什么也不发生,或只在第一行补全 - 未选中时按
Tab,可能展开ul>li*3这类 Emmet 片段,而非缩进 - 即使你设了
"translate_tabs_to_spaces": true,Tab也只在“无补全上下文”时才插空格(比如光标在行首空白处)
真正可靠的缩进快捷键是 Ctrl+] 和 Ctrl+[
这两个是原生命令:indent 和 unindent,只动行首空白符,不分析语法、不触发补全、不矫正倍数,对 .json、.md、.txt 同样生效。
- 没选中内容时:作用于当前行
- 选中多行时:整块统一增/减一档缩进(由
tab_size和translate_tabs_to_spaces决定) - 列选择(Alt+拖选)后按
Ctrl+]:会在每行光标位置前插入一档缩进,但注意——它不保证逻辑对齐,慎用于嵌套结构 - 若按了没反应,先检查右下角语法标识是否准确、是否混用空格/Tab、以及
detect_indentation是否开着
想让 Ctrl+] 固定插 4 个空格,而不是一个 Tab
原生命令受 tab_size 和 translate_tabs_to_spaces 控制,但默认行为仍可能插 \t(当后者为 false 时)。要彻底绕过缩进系统,直接插入固定字符:
- 打开
Preferences → Key Bindings – User - 加一条自定义绑定:
[{"keys": ["ctrl+]"], "command": "insert", "args": {"characters": " "}}] - 注意:这会完全忽略当前文件的
tab_size和缩进风格,适合团队强制 4 空格且不希望任何干扰的场景 - 同理,可为
Ctrl+[绑定删除前 4 个字符(需用run_macro_file或插件实现精准删缩进,原生不支持)
容易被忽略的关键点
detect_indentation 默认为 true,它不报错、不提示,只是默默扫描文件前几行,然后覆盖你的所有缩进设置——哪怕你刚在用户配置里写了 "tab_size": 4,打开一个旧 Python 文件,右下角立刻变成 Tab Width: 2。关掉它:"detect_indentation": false,才是让其他配置真正落地的前提。语法专属设置(如 Python.sublime-settings)优先级更高,改全局没用;EditorConfig 插件也能劫持缩进,且优先级高于 Sublime 自身设置。











