Ctrl+Shift+M无法选中带注释的代码块,因其仅识别成对{}且要求光标在语法作用域内,而注释会中断Sublime的scope解析;需用Ctrl+Shift+A或自定义Expand Selection to Function命令绕过干扰。

Ctrl+Shift+M 为什么选不中带注释的代码块?
因为 Ctrl+Shift+M(Windows/Linux)或 Cmd+Shift+M(macOS)只识别成对闭合的 {},且要求光标处于语法作用域内——而注释本身(如 //、/* */、#)会中断 Sublime 的 scope 解析。一旦光标落在注释行里,或选区包含注释符号,Sublime 就无法准确判断括号所属的逻辑块边界。
想选“函数体 + 里面的注释行”,得先绕过注释干扰
注释不是语法结构的一部分,Sublime 不会把它纳入作用域推导。可行路径是:先确保光标不在注释内,再用结构感知命令扩大范围:
- 把光标移到函数定义行(如
function foo() {或def bar():),再按Ctrl+Shift+A(Windows/Linux)或Cmd+Shift+A(macOS)——它基于语言 scope 逐层扩展,比Ctrl+Shift+M更容忍注释存在 - 若已卡在注释行中,先按
Ctrl+U(Undo Selection)退回上一级,或用Ctrl+Shift+P→ 输入Expand Selection to Function强制触发 - Python 用户特别注意:缩进才是块边界,但注释行若破坏缩进一致性(比如混入空格或 tab 不齐),
Expand Selection to Function可能提前终止——建议先执行Indentation: Reindent Lines
自定义键绑定让“选函数”更鲁棒
原生命令在含注释的复杂块里容易漏行,加一条用户键绑定可提升容错:
[{"keys": ["ctrl+alt+f"], "command": "expand_selection", "args": {"to": "function"}}]
这样按 Ctrl+Alt+F 会直接尝试选整个函数(含内部所有注释行),不依赖光标是否贴着 {。但它仍受限于当前语法包是否正确定义了 function scope——JavaScript、Python、PHP 插件通常支持,而纯 Plain Text 或未配置的 .env 文件则无效。
真正卡住的地方,往往不是快捷键记错,而是注释改变了语法解析上下文
比如在 JSX 中写 {/* comment */ state},Sublime 可能将 {/* 误判为对象字面量开头,导致 Ctrl+Shift+M 锁死在注释内部;又比如 Python 中 # if x: 这类注释后紧跟代码,会割裂缩进流。这种时候,手动删掉干扰性注释再操作,反而比调各种命令更快。











