32

Actualmente VS tiene una función muy útil: ordenar los usos (C#).Ordenar texto seleccionado del menú contextual de Visual Studio

Quiero la misma funcionalidad para cualquier texto aleatorio, por ejemplo, nodos XML en archivos de configuración.

¿Qué tan complejo es implementar eso? VS addin, ¿verdad? ¿Es posible llamar a algunos VS API que se utiliza para clasificar los usos?

Respuesta

11

acaba de encontrar un buen complemento gratuito: Menees VS Tools 2012 (o 2010 ver) - hace exactamente eso y una algunos trucos de texto más. Hubo algunas cuestiones negativas menores cuando lo instalé, pero después de dejar un comentario en la página de revisión se solucionó en cuestión de días. Waay para ir! =)

hay una versión 2017 ahora: Menees VS Tools 2017

22

Editar: Tenga en cuenta que esta solución no funciona en VS2013 o superior, ya que se eliminó el soporte para macros.

No necesita necesariamente codificar un complemento VS para hacer esto: Visual Studio tiene macros incorporadas. Para comenzar, utilice Herramientas, Macros, Grabar macro temporal.

Aquí hay un comando 'Ordenar Lines Pirateé basé juntos en el código que Grabar macro Temporal me dio:

Imports System 
Imports EnvDTE 

Public Module TimModule 
    Sub SortLines() 
     Dim Selection As TextSelection = DTE.ActiveDocument.Selection 
     Dim Lines() As String = Selection.Text.Replace(Environment.NewLine, Chr(13)).Split(Chr(13)) 
     Array.Sort(Lines) 
     DTE.UndoContext.Open("Sort Lines") 
     ' Edit - see comments 
     ' Selection.Text = String.Join(Environment.NewLine, Lines) 
     Selection.Delete 
     Selection.Insert(String.Join(Environment.NewLine, Lines)) 
     DTE.UndoContext.Close() 
    End Sub 
End Module 
+5

está utilizando la propiedad de cambiar TextSelection.Text el texto. Esta suele ser una razón de una ejecución muy lenta. Puede tomar incluso varios segundos. La mejor manera es usar TextSelection. Insertar y eliminar métodos. No lo he probado, pero recomiendo reemplazar la línea: Selection.Text = String.Join (Environment.NewLine, Lines) con 2 líneas: Selection.Delete Selection.Insert (String.Join (Environment.NewLine, Líneas)) Luego puede colocar su macro en la barra de herramientas o en el menú (http://www.helixoft.com/blog/archives/7) o asignarle un atajo de tecla (http://www.helixoft.com/blog)/archives/8) –

+2

@Peter, gracias. No tardé mucho escribiendo esto: si agrega una respuesta al OP la votaré –

+0

La sugerencia de Peter cambió mi tiempo de ejecución de ~ 30 segundos a casi instantáneo, y también impidió que se generaran algunas líneas de basura. –

5

Puede copiar el código en Sublime Text, seleccione la sección de código y pulsa F9 (o vaya a Editar> Ordenar Líneas). Luego puede copiarlo nuevamente en Visual Studio.

+0

buena idea. lo mismo con emacs: marcar región, luego líneas de orden Alt-X – user829755

2

Estoy personalmente usando la extensión Web Essentials de Mads Kristensen. Simplemente seleccione las líneas que desea ordenar y Alt + 3 o Alt + 4 (asc/desc).

13

Un buen complemento para Visual Studio es Code Maid

selecciona algunas líneas y elegimos desde el menú contextual "Ordenar Lines"

enter image description here

y listo, sus líneas se clasifican muy bien en orden alfabético:

enter image description here

+0

Esto no funciona para Code Maid 10.2 en VisualStudio 2013 al editar un archivo fuente C++. Las líneas seleccionadas se dejan sin cambios. – Eponymous

Cuestiones relacionadas