如何让Visual Studio支持从代码块内跳转至各级闭合大括号?
我完全理解你的需求——在WebStorm/PhpStorm里用宏实现的那种逐层跳转闭合括号外侧的功能,确实在多层嵌套代码里特别实用。下面是几种在Visual Studio里实现这个功能的方案:
方法一:自定义宏(适配旧版VS及带宏扩展的新版VS)
Visual Studio默认的Edit.GoToBrace只认光标在{上的情况,我们可以写个宏来补全这个逻辑,和你在JetBrains IDE里的宏思路一致:先定位到当前代码块的闭合},再跳到它的外侧。
步骤:
- 如果你用的是VS2019及更早版本,直接打开宏资源管理器(快捷键
Alt+F8);如果是VS2022,先安装「Macros for Visual Studio 2022」扩展来启用宏功能。 - 创建一个新的宏模块,然后添加以下宏代码:
Sub GoToClosingBraceOutside() Dim objSel As TextSelection = DTE.ActiveDocument.Selection ' 先将光标定位到当前代码块的起始{位置 objSel.StartOfLine() DTE.ExecuteCommand("Edit.GoToBrace") ' 跳转到闭合}的下一个字符位置(即外侧) objSel.MoveToPoint(objSel.BottomPoint) objSel.CharRight() End Sub
- 打开工具→选项→环境→键盘,搜索你刚才创建的宏名称(比如
Macros.MyMacros.Module1.GoToClosingBraceOutside),将快捷键绑定为Ctrl+],替换掉原来的Edit.GoToBrace命令。
这样设置后,不管光标在代码块内的哪个位置,按下Ctrl+]都会先跳到当前代码块的闭合}外侧,多次按就会逐层往外跳,完全符合你的需求。
方法二:使用第三方扩展(推荐给VS2022用户)
如果不想折腾宏,直接在VS Marketplace里搜索类似「Enhanced Brace Navigation」的扩展,比如Go To Brace Plus或者Brace Navigator,这类扩展专门增强了括号跳转的逻辑,支持光标在代码块内任意位置直接跳转到对应闭合括号,而且大多支持逐层跳转。安装后,在键盘设置里将扩展提供的跳转命令绑定到Ctrl+]即可。
另外,如果你已经在用ReSharper这类付费工具,它自带的括号跳转功能完全满足你的需求,只需要在ReSharper的快捷键设置里找到「Go to Matching Brace」命令,调整为Ctrl+]就行。
补充测试验证
用你给出的嵌套代码测试:
private void Button_Click(object sender, EventArgs e) { if (enableCheckbox.Checked == true) { if (labelToChange.Text == "Right") { labelToChange.Text = "Left"; } else { labelToChange.Text = "Right"; } } }
当光标在labelToChange.Text = "Left";行任意位置时,第一次按Ctrl+]会跳到内层if的}外侧,第二次跳到中层if的}外侧,第三次跳到方法的}外侧,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者KulaGGin

