Eliminar llaves coincidentes en Visual Studio

En Visual Studio puedo saltar de / a abrir / cerrar corsé con el acceso directo Control+] .

¿Hay algún método abreviado que me permita eliminar ambas llaves a la vez (quizás con una macro / extensión)?

p.ej

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

Cuando estoy en la primera llave de apertura, me gustaría eliminarla y su corsé correspondiente para obtener

 foo = 1 + bar() + 2; 

No hay una forma inherente de hacer esto con Visual Studio. Necesitarías implementar una macro para esto.

Si elige la ruta de macro, querrá familiarizarse con el comando Edit.GoToBrace . Este es el comando que lo saltará de la stream a la llave correspondiente. Tenga en cuenta que en realidad lo dejará después del corsé correspondiente, por lo que es posible que deba mirar hacia atrás un carácter para encontrar el elemento que desea eliminar.

La mejor manera de implementar esto como una macro es

  • Guardar la posición actual de caret
  • Ejecutar Edit.GoToBrace
  • Eliminar el corsé a la izquierda del caret.
  • Elimine el corsé en la posición del cursor original.

Haga una macro para presionar Ctrl +] dos veces y luego retroceda, luego presione Ctrl + menos y borre. Ctrl + minus mueve el cursor hacia atrás en el tiempo.

No es tan simple como lo sugirió JaredPar, pero tampoco soy un experto en macros.

Esto funciona para (), {} y []

 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 

A continuación, agregue un acceso directo a esta macro en VS.