Ctrl+]和Ctrl+[是Sublime中唯一真正可靠的多行缩进快捷键,因Tab/Shift+Tab实为补全触发器而非缩进命令;前者专用于块级缩进,不分析语法、不触发补全、不矫正空格,选中多行时整块统一增减一档缩进,未选中时仅作用于当前行,且对.json、.md、.txt等无语法约束文件同样生效。

Ctrl+] 和 Ctrl+[ 是唯一能稳定解决多行缩进问题的快捷键,Tab 和 Shift+Tab 在 Sublime 里根本不是缩进命令——它们是补全触发器,按了没反应、缩错行、弹出菜单,全是正常表现。
为什么选中多行按 Tab 没缩进
Tab 键在 Sublime 中默认绑定的是 insert_best_completion 或 auto_complete,不是缩进行为。它是否插入空格,取决于光标位置:
- 光标在函数名后、引号内、注释中,Tab 就会弹补全菜单
- 即使你手动选中了 5 行,Tab 也只对每行“当前光标列”起作用,不是统一处理行首空白
- Shift+Tab 在 Python 中可能只退一格,但在空行或注释行会直接跳到行首
Ctrl+] 和 Ctrl+[ 到底怎么工作
这对组合是 Sublime 原生的块级缩进命令,行为机械、可预测:
- 未选中任何内容时,只修改当前行的行首空白
- 选中多行时,整块统一增减一档缩进(由
tab_size和translate_tabs_to_spaces决定) - 不分析语法、不触发补全、不自动对齐倍数,对
.json、.md、.txt同样有效 - 不会被
detect_indentation干扰——它只加减,不“矫正”你加的字符数
按了 Ctrl+] 没反应?先查这三件事
这不是快捷键坏了,是 Sublime 的缩进逻辑被卡住了:
- 右下角语法标识是否准确?比如 Vue 的
<script>块常被误判为 HTML,点它手动切到 JavaScript - 是否混用了空格和 Tab?执行
Ctrl+Shift+P→ 输入Indentation: Convert Indentation to Spaces先归一化 -
detect_indentation是否开着?默认为true,它会在打开文件时锁定历史缩进风格(比如识别出是 2 空格,你加 4 个空格,它可能悄悄删成 2 个)
想让 Ctrl+] 固定插 4 个空格,而不是 Tab
原生行为受 tab_size 和 translate_tabs_to_spaces 控制,但默认不保证插空格——尤其当 translate_tabs_to_spaces 是 false 时,Ctrl+] 就只插一个 \t。要彻底绕过干扰:
- 打开
Preferences → Key Bindings – User - 粘贴这段配置(让
Ctrl+]固定插入 4 个空格):[ {"keys": ["ctrl+]"],"command":"insert","args": {"characters":" "}} ] - 配套加一条反缩进(删除开头最多 4 个空格):
{"keys": ["ctrl+["],"command":"left_delete","args": {"forward": false}}
注意:这种写法不读取当前文件设置,纯机械插入——适合规范明确的项目,但跨语言项目建议用 EditorConfig 插件替代。

















