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

Ctrl+] 和 Ctrl+[ 是唯一真正可靠的缩进快捷键
Tab 和 Shift+Tab 在 Sublime 里不是缩进命令,而是补全触发器。光标落在函数名后、引号内、或有 Emmet 补全提示的位置时,按 Tab 就弹菜单,根本不会缩进。而 Ctrl+](Windows/Linux)或 Cmd+](macOS)是原生块级缩进命令——它只改行首空白符,不分析语法、不触发补全、不自动对齐倍数。
行为规则很简单:
- 没选中任何内容时,作用于当前行
- 选中多行时,整块统一增减一档缩进(由
tab_size和translate_tabs_to_spaces决定) - 对
.json、.md、.txt这类无语法约束的文件也生效
按了 Ctrl+] 没反应?先查这三件事
这不是快捷键失效,是 Sublime 的缩进逻辑被卡住了:
- 右下角语法标识是否准确?比如 Vue 单文件组件的
<script></script>块常被误判为 HTML,点它手动切到 JavaScript - 是否混用了空格和 Tab?执行
Ctrl+Shift+P→ 输入Indentation: Convert Indentation to Spaces先归一化 -
detect_indentation是否开着?默认是true,它会在打开文件时锁定历史缩进风格(比如识别出是 2 空格,你按Ctrl+]加一档,它可能立刻把你多加的那 2 个空格“抹平”回合法倍数)
想让 Ctrl+] 固定插入 4 个空格,而不是一个 Tab
原生行为受两个设置控制:tab_size 控制宽度,translate_tabs_to_spaces 控制字符类型。但默认不保证插入空格——尤其当 translate_tabs_to_spaces 是 false 时,Ctrl+] 就只插一个 \t 字符。
推荐做法:
- 确保
"translate_tabs_to_spaces": true,否则Tab键和Ctrl+]都插\t -
"tab_size": 4要和translate_tabs_to_spaces同时设才有效 - 若团队强制用 4 空格且不想被任何文件影响,可在
Preferences → Key Bindings – User中加自定义绑定:[ {"keys": ["ctrl+]"],"command":"insert","args": {"characters":" "} } ]注意:这会完全绕过缩进设置,适合风格统一的项目
嵌套结构缩得准的关键是先选得准
靠手按 Ctrl+] 容易漏行或错层。对 if 块、函数体、HTML <div> 或 JSON <code>{} 这类结构,优先用精准选区:
- 把光标放在起始行(如
def func():),连按Ctrl+Shift+↓可逐级扩展选中整个逻辑块 - 对括号/标签结构,用
Ctrl+Shift+P→Selection: Expand Selection to Brackets,一键选中配对符号内全部内容 - 确认选区无误后再按
Ctrl+]——折叠区域不参与缩进计算,别依赖“折叠后缩进”
不同语言缩进要分开设,不能只改全局:Python 社区通用 4 空格,JS/TS/HTML 多用 2,YAML 必须空格且严格 2。全局 tab_size 一刀切会导致新开的 JS 文件也变成 4 空格。











