ctrl+d选词后缩进会错乱,因它仅插入字符而非调整行首缩进;正确做法是用ctrl+shift+m选结构块再执行ctrl+]或reindent命令。

Ctrl+D 选词后缩进会错乱?别这么干
多重选择本身不负责缩进,Ctrl+D 选中多个变量名或关键词后按 Tab,只会往光标位置插入字符(空格或 Tab),不是调整行首缩进。结果往往是:有的词缩了,有的没动,Python 直接报 IndentationError。
真正要批量校对缩进,得先让光标落在「结构层级」上,而不是词上。比如想统一调整所有 if 块内的语句,应该用 Ctrl+Shift+M 选中整个括号范围,再操作缩进命令。
- 选词 ≠ 选结构 ——
Ctrl+D是文本层操作,缩进是结构层行为 - 若已误用
Ctrl+D+Tab导致缩进混杂,立刻执行Ctrl+Shift+P→ 输入Indentation: Convert Indentation to Spaces归一化 - Python 文件里尤其危险:一个
Tab和四个空格在语法上不等价,Ctrl+D后乱按Tab很可能引入不可见错误
怎么用 Ctrl+Shift+L 实现“列对齐式”缩进校对
Ctrl+Shift+L 把选中的每行拆成独立光标,适合做列级微调,但必须配合 Ctrl+[/Ctrl+] 才能真正生效——它本身不缩进,只铺开光标。
典型场景:你有一组 key-value 对齐的 JSON 或 YAML,想把所有 : 后面的内容统一右移 2 格。这时:
- 先用鼠标或
Ctrl+L选中所有目标行 - 按
Ctrl+Shift+L,光标会出现在每行末尾 - 用方向键 ← 移到冒号后、空格前的位置,再按
Ctrl+]—— 这时每行都在同一列插入缩进 - 如果光标停在行中任意位置,
Ctrl+]只会在该列插入空格,不是行首缩进,这点极易混淆
Reindent 不生效?先查三件事
Reindent 是唯一能按语法规则重算缩进的命令,但它很“挑”:语法识别错、detect_indentation 开着、或文件被当成 Plain Text,都会让它静默失败。
- 看右下角状态栏:必须显示
Python、JavaScript等具体语法名,不能是Plain Text;点它手动切换 - 检查用户设置里有没有
"detect_indentation": true—— 如果有,删掉或设为false,否则它会强行沿用文件开头几行的旧风格 - 大文件(>10MB)慎用:它会解析整棵树,卡顿甚至无响应;此时改用
Ctrl+]手动逐档调整更稳
为什么 Ctrl+] 在 .json 里缩进没反应?
不是快捷键坏了,是 Sublime 默认禁用了 JSON 的自动缩进逻辑 —— 它不认为 JSON 需要“代码块缩进”,所以 Ctrl+] 仍有效,但 Reindent 不触发格式化。
解决方法很简单:不用等它“理解”JSON,直接用原生命令:
-
Ctrl+]和Ctrl+[在 JSON 里照常工作,因为它们只机械增减行首空白,不依赖语法 - 想格式化整个 JSON,得装
JSFormat或用Ctrl+Shift+P→JSON Reindent(需插件支持) - 如果按了
Ctrl+]没反应,大概率是没选中任何行,且光标停在行中 —— 它只影响行首空白,不会在中间插空格











