Удаление соответствующих фигурных скобок в Visual Studio

в Visual Studio я могу перейти от / к открытию / закрытию скобки с помощью Control+] ярлык.

есть ли ярлык, который позволит мне удалить обе фигурные скобки сразу (возможно, с макросом/расширением)?

например

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

когда я нахожусь на первой открывающей скобке, я хотел бы удалить ее и соответствующую скобку, чтобы получить

foo = 1 + bar() + 2;

3 ответов


нет неотъемлемого способа сделать это с помощью Visual Studio. Для этого вам нужно будет реализовать макрос.

Если вы выберете маршрут макроса, вы захотите ознакомиться с . Это команда, которая будет прыгать от текущего к парной скобке. Обратите внимание, что он фактически сбросит вас после соответствующей скобки, поэтому вам может потребоваться оглянуться на один символ, чтобы найти элемент для удаления.

лучший способ реализовать это как макрос-это

  • сохранить текущую позицию курсора
  • выполнить Edit.GoToBrace
  • удалить скобку слева от курсора
  • удалить скобку в исходном положении каретки

сделайте макрос, чтобы нажать Ctrl+] дважды, а затем backspace, затем Ctrl + минус и удалить. Ctrl + minus перемещает курсор назад во времени.


Это не совсем так просто, как 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.