Удалить соответствующие скобки в Visual Studio - PullRequest
8 голосов
/ 28 марта 2012

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

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

, например

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

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

foo = 1 + bar() + 2;

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

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

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

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

  • Сохранить текущую позицию каретки
  • Выполнить Edit.GoToBrace
  • Удалить скобкуслева от каретки
  • Удалить скобку в исходном положении каретки
3 голосов
/ 28 марта 2012

Это не так просто, как предположил 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 .

3 голосов
/ 28 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...