Ctrl+Shift+M 是 Sublime 原生最可靠的语义化扩选入口,仅按括号配对(()、{}、[]、<tag></tag>)选中内容,不依赖语法识别,即使文件被误判为 Plain Text 也能使用。

Ctrl+Shift+M 选中括号配对内容,但只认语法结构
这个快捷键是 Sublime 原生最可靠的“语义化扩选”入口,按一次就选中光标所在最近的 ()、{}、[] 或 <tag></tag> 内容。它不依赖 scope,只看括号是否成对,所以即使文件被误识别为 Plain Text 也能用。
常见错误现象:Ctrl+Shift+M 按下没反应,大概率是光标不在括号内或括号不闭合;选中范围偏小(比如只选了 {} 里面,没包含前面的 function()),这是正常行为——它只做一层配对,不自动外延。
- 想往外扩一层?再按一次
Ctrl+Shift+M,比如从{...}扩到function() { ... } - 不支持单引号
''和反引号``,模板字符串得靠插件 - HTML 中若标签没闭合(如
<div>后无</div>),会选中到文件末尾,需先修复结构
Ctrl+Shift+Space 按作用域逐级扩展,但依赖语法识别
这个操作不是“选函数”或“选段落”,而是严格按 Sublime 的 scope 链向上跳:变量名 → 字符串 → 行 → 代码块 → 文件。它比 Ctrl+Shift+M 更智能,但也更脆弱。
常见错误现象:Ctrl+Shift+Space 没反应,或只扩了一行就停住。原因通常是右下角状态栏显示的是 Plain text 而非 JavaScript / Python 等;或者光标停在空行、注释开头、缩进符上——这些位置没有有效 scope。
- 确认语法正确:右下角必须显示目标语言名,否则 scope 链为空
- 光标要落在 token 内部,比如把光标放在
myVar的V上,而不是前面空格 - 按一次不够?多按几次,每次跳一级 scope,不是“一键全选”
- Python 函数体不会被自动包进一次扩选,因为缩进块本身没独立 scope,只靠上层
meta.function.python包裹
Ctrl+Shift+J 选中缩进块,对 Python/JS 最实用
这是写 Python 或 JS 时最接近“选整段逻辑”的原生命令。它不数空格,而是靠语法定义的 meta.block.python 或 meta.group.js 这类 scope 来判断块边界。
常见错误现象:按了没反应,或只选中单行。本质是当前文件没加载对应语法高亮规则——比如 .py 文件被当成 Plain Text,或 .js 文件里混用了非标准换行符(\r\n 导致解析中断)。
- 先执行
Ctrl+Shift+P→ 输入Indentation: Detect Indentation,确保缩进模式识别正确 - 光标放在任意一行(不必开头),按一次选当前缩进块,再按一次向外扩到父级块(如从 if 分支扩到整个函数)
- 遇到
else:或except:这类缩进更浅的行,选区会自然终止——这是设计行为,不是 bug - 纯文本(如 Markdown 列表)或未配置语法的配置文件(.env、.toml),此快捷键基本失效
Alt+.(ExpandRegion 插件)替代原生短板,但需手动绑定
原生命令在嵌套结构(如 JSX、深层对象字面量)或混合缩进场景下容易断层,ExpandRegion 插件用文本结构分析代替 scope 依赖,效果更稳定。
安装后默认没快捷键,必须手动加进用户键绑文件。它不看 scope,而是按“表达式→语句→缩进块→函数→文件”这种结构层级推进,和 WebStorm 的 Ctrl+W 行为一致。
- 推荐绑定为
Alt+.(扩大)和Alt+,(缩小),避免和 Emmet 冲突 - 对箭头函数
() => { ... }能完整选中函数体,而原生Ctrl+Shift+A在无大括号时会失败 - 插件不修改语法定义,所以不影响其他功能,但和
AutoFold配合使用时,选中后可自动折叠无关区域 - 如果扩选突然变慢或卡顿,检查是否同时启用了多个 scope 相关插件(如 BracketHighlighter),它们可能干扰解析路径
Ctrl+Shift+M,函数体用 Ctrl+Shift+A,缩进块优先试 Ctrl+Shift+J,失败再切语法或装 ExpandRegion。最常被忽略的是右下角那个小小的状态栏——它不显眼,但决定 scope 是否生效。

















