Удаление соответствующих фигурных скобок в 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