ctrl+], ctrl+[ 是唯一真正生效的批量缩进快捷键,tab/shift+tab 在 sublime 中实为补全触发器而非缩进命令,其行为严格依赖当前视图的 tab_width 设置与文件实际缩进字符,需统一空格/tab风格后使用才可靠。

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_size": 4与团队/项目规范一致 - 关闭
"detect_indentation": false,避免历史缩进干扰
批量调整嵌套代码块该用什么选区策略
单纯靠 Ctrl+] 容易漏行或缩进不齐,尤其面对嵌套结构时。更可靠的方式是:
- 用
Ctrl+Shift+M选括号配对内容(如{}或()),再按Ctrl+] - 写 Python/JS 时优先用
Ctrl+Shift+J选同缩进块——它靠meta.block.python这类语法 scope 判断边界,比纯空格计数准 - 避免鼠标拖选:跨行时容易漏掉空行或注释行,而
Ctrl+Shift+J会自然跳过else:或except:这类缩进更浅的行
最易被忽略的一点:Ctrl+] 和 Ctrl+[ 永远基于「当前视图的 tab_width 设置」和「文件实际使用的缩进字符」。如果你在混合空格与 Tab 的文件里批量操作,有些行删空格、有些行删 Tab,视觉上可能错位——这不是 bug,是你得先统一缩进风格再批量操作。











