shift+alt+→(win/linux)或 shift+option+→(macos)可连括号一起选中配对符号包裹的整个代码块,但要求光标必须精确落在{、}、[或]上且语言模式正确;ctrl+shift+→/cmd+shift+→则只选内容不选括号;select between brackets命令更稳定,不依赖ast,但仅处理最近一对括号。

光标在括号上时,用 Shift+Alt+→(Win/Linux)或 Shift+Option+→(macOS)连括号一起选中
这个快捷键触发的是 editor.action.smartSelect.expand,它会从光标所在括号出发,自动识别配对符号并选中整个块(含 { 和 } 或 [ 和 ])。适用于删除、移动、注释整段逻辑体。
常见错误现象:Shift+Alt+→ 按了没反应,大概率是光标没落在括号字符上——比如停在 { 后面的空格、换行符,或字符串内部的 {。VSCode 只认语法上下文中的结构化括号,不处理纯文本里的符号。
- 必须把光标直接放在
{、}、[或]上(哪怕只碰一个像素) - 文件语言模式必须正确,右下角应显示
JavaScript、TypeScript、JSON等,不能是Plain Text - 嵌套过深(如超过 10 层)或括号不匹配时,VSCode 可能放弃解析,此时左下角不会显示「Matching Bracket」提示
- 连续按多次可逐层向外扩展,比如从内层对象 → 外层函数 → 整个模块
光标在括号内部时,用 Ctrl+Shift+→(Win/Linux)或 Cmd+Shift+→(macOS)只选内容不选括号
这个操作本质是「基于语法树的智能扩展」,默认行为是选中括号包裹的全部内容,但不含括号本身。适合复制、提取 JSON 片段、重命名对象字段等场景。
为什么有时选得不准?因为它的判断依赖语言服务提供的 AST。在 JSX、Vue 的 <script setup></script>、模板字符串或未闭合注释里,AST 可能断裂,导致跳过某一层。
- 光标需在括号内部任意位置(包括空格、换行),但不能在引号包围的字符串里,例如
"{key: value}"中的{不会被识别为代码结构 - 若快捷键失效,优先检查右下角语言模式是否为
JavaScript React或Vue,而非Plain Text - 该快捷键和
editor.action.selectBetweenBrackets命令效果一致,但后者更稳定(见下一条)
不想猜光标位置?用命令 Select Between Brackets 最稳
按下 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Select Between Brackets 回车——只要光标落在任一括号字符上,它就无条件选中这对括号之间的全部内容(不含括号),不依赖 AST,也不怕 JSX 或模板干扰。
这个命令基于 VSCode 内置的 bracket pair colorization 引擎,比快捷键更底层、更可靠。但它有个硬限制:不支持嵌套跳转,每次只处理光标所在位置最近的一对。
- 必须停在
{、}、[或]字符上,停在中间空格无效 - 在
Plain Text模式下依然可用,但前提是括号确实成对且未被字符串/注释包裹 - 想绑定快捷键?在
keybindings.json里加一条:{"key":"ctrl+alt+b","command":"editor.action.selectBetweenBrackets","when":"editorTextFocus && !editorReadonly"}
括号不匹配或嵌套太深时,别硬试快捷键
VSCode 对括号的识别有明确边界:未闭合的 {、被字符串包裹的 {、或嵌套超 10 层,都会让所有基于语法的快捷键退化为普通文本选择。这时再反复按 Shift+Alt+→ 没意义。
先看左下角有没有「Matching Bracket」提示;没有,说明编辑器根本没把它当结构看待。强行操作只会选中单词或行,而不是你想要的逻辑块。
- 临时切到
JSON模式试试:右下角点击语言标识 → 选JSON,再试Select Between Brackets - 真实 JSON 数据建议用终端处理:
python -m json.tool或jq,比手动选中更准 - 正则
(?s)\{[^{}]*\}只适用于单层嵌套,遇到多层就不可靠,别在复杂代码里依赖它











