在Visual Studio中删除匹配的大括号

本文关键字:Visual Studio 删除 | 更新日期: 2023-09-27 18:29:15

在Visual Studio中,我可以使用Control+]快捷键从/跳到左大括号/右大括号。

有没有一个快捷方式可以让我同时删除两个大括号(可能带有宏/扩展名)?

例如

foo = ( 1 + bar() + 2 );

当我在第一个左括号上时,我想删除它和它的匹配括号以获得

foo = 1 + bar() + 2;

在Visual Studio中删除匹配的大括号

Visual Studio没有固有的方法可以做到这一点。为此,您需要实现一个宏。

如果选择宏路由,则需要熟悉Edit.GoToBrace命令。这是一个将您从当前大括号跳转到匹配大括号的命令。请注意,它实际上会在匹配的大括号之后转储您,因此您可能需要向后看一个字符才能找到要删除的元素。

将其作为宏实现的最佳方式是

  • 保存当前插入符号位置
  • 执行Edit.GoToBrace
  • 删除插入符号左侧的大括号
  • 删除原始插入符号位置的大括号

制作一个宏,按Ctrl+]两次,然后按backspace,再按Ctrl+minus和delete。Ctrl+减号将光标向后移动。

这并不像JaredPar建议的那么简单,但我也不是宏专家。

这适用于()、{}和[]

Sub DeleteMatchingBrace()
    Dim sel As TextSelection = DTE.ActiveDocument.Selection
    Dim ap As VirtualPoint = sel.ActivePoint
    If (sel.Text() <> "") Then Exit Sub
    ' reposition
    DTE.ExecuteCommand("Edit.GoToBrace") : DTE.ExecuteCommand("Edit.GoToBrace") 
    If (ap.DisplayColumn <= ap.LineLength) Then sel.CharRight(True)
    Dim c As String = sel.Text
    Dim isRight As Boolean = False
    If (c <> "(" And c <> "[" And c <> "{") Then
        sel.CharLeft(True, 1 + IIf(c = "", 0, 1))
        c = sel.Text
        sel.CharRight()
        If (c <> ")" And c <> "]" And c <> "}") Then Exit Sub
        isRight = True
    End If
    Dim line = ap.Line
    Dim pos = ap.DisplayColumn
    DTE.ExecuteCommand("Edit.GoToBrace")
    If (isRight) Then sel.CharRight(True) Else sel.CharLeft(True)
    sel.Text = ""
    If (isRight And line = ap.Line) Then pos = pos - 1
    sel.MoveToDisplayColumn(line, pos)
    sel.CharLeft(True)
    sel.Text = ""
End Sub

然后在VS中添加此宏的快捷方式。