Delete Matching Braces in Visual Studio

后端 未结 3 480
刺人心
刺人心 2021-01-12 04:15

In Visual Studio I can jump from/to opening/closing brace with the Control+] shortcut.

Is there a shortcut that will allow me to delete both braces at o

相关标签:
3条回答
  • 2021-01-12 04:33

    There isn't an inherent way to do this with Visual Studio. You would need to implement a macro in order for this.

    If you choose the macro route you'll want to get familiar with the Edit.GoToBrace command. This is the command which will jump you from the current to the matching brace. Note it will actually dump you after the matching brace so you may need to look backwards one character to find the element to delete.

    The best way to implement this as a macro is to

    • Save the current caret position
    • Execute Edit.GoToBrace
    • Delete the brace to the left of the caret
    • Delete the brace at the original caret position
    0 讨论(0)
  • 2021-01-12 04:42

    Make a macro to press Ctrl+] twice and then backspace, then Ctrl+minus and a delete. The Ctrl+minus moves the cursor back in time.

    0 讨论(0)
  • 2021-01-12 04:46

    It's not quite as simple as JaredPar suggested but I'm no Macro expert either.

    This works for (), {} and []

    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
    

    Then add a shortcut to this macro in VS.

    0 讨论(0)
提交回复
热议问题