应使用ctrl+]和ctrl+[进行多行缩进,因其是sublime原生块级操作,不依赖语法分析、不触发补全、不受detect_indentation干扰,且在无语法约束文件中同样有效。

别用 Tab 键做多行缩进,它不是为这个设计的——按了没反应、缩错行、甚至触发补全菜单,都是正常现象。
Ctrl+] 和 Ctrl+[ 是唯一靠谱的多行缩进快捷键
这对组合是 Sublime 原生的块级缩进行为,不分析语法、不触发补全、不矫正空格数,只机械加减缩进层级。选中多行时整块右移或左移;未选中时只作用于当前行,适合微调。
- Windows/Linux 用
Ctrl+]右缩进,Ctrl+[左缩进;macOS 对应Cmd+]/Cmd+[ - 缩进宽度由当前文件的
tab_size和translate_tabs_to_spaces决定,但不会被detect_indentation干扰 - 对
.json、.md、.txt等无语法约束文件同样生效,不像 Tab 那样在 JSON 里直接失效 - 如果按了没反应,大概率是没选中任何内容且光标停在行中——它只影响行首空白,不插入字符
为什么选中多行按 Tab 没缩进,或者只缩了一半
因为 Tab 默认绑定的是「补全触发器」,不是缩进命令。它是否插入空格/Tab,取决于光标位置和当前上下文。
- 光标在函数名后、引号内、或注释中时,
Tab会弹出补全菜单,而不是缩进 -
Shift+Tab在 Python 中可能只退一个层级,但在空行或注释行可能直接跳到行首 - 即使你手动选中了多行,
Tab也只对每行“当前光标所在列”起作用,不是统一处理行首空白 - 插件如 Emmet、AutoFileName 会劫持
Tab行为,优先补全而非缩进
缩进前必须检查的三件事
哪怕用了 Ctrl+],缩错行也常因这三点漏查:
- 右下角语法标识是否准确?比如 Vue 单文件组件中的
<script></script>块常被误判为 HTML,点它手动切到JavaScript - 是否混用空格与 Tab?先按
Ctrl+Shift+P→ 输入Indentation: Convert Indentation to Spaces归一化 -
detect_indentation是否开着?默认为true,它会偷偷根据文件头缩进风格覆盖你的设置;在用户设置中加"detect_indentation": false才能真正按你设的走
想彻底绕过干扰,固定插入 4 个空格
如果你团队强制要求统一 4 空格、且不想被语法、插件或历史文件带偏,就自定义键绑定:
- 打开
Preferences → Key Bindings – User - 加入这两条(注意逗号):
[ {"keys": ["ctrl+]"], "command": "insert", "args": {"characters": " "} }, {"keys": ["ctrl+["], "command": "left_delete", "args": {"forward": false} } ] - 这样
Ctrl+]永远插入 4 个空格,Ctrl+[删除开头最多 4 个空格——不看语法、不读配置、不触发补全 - 缺点:删除不智能,不能按“层级”退格;所以建议配合精准选区使用,比如先
Ctrl+Shift+M选括号内再操作
真正麻烦的从来不是快捷键记不住,而是缩进行为被语法识别、插件、历史文件格式、甚至右下角那个不起眼的状态栏悄悄改写了——每次缩错,先看那三处,比重装插件快得多。











