visual studio quitar linea indentar fuente espacios duplicar configurar codigo code cambiar buscar blanco atajos ajuste visual-studio visual-studio-2008

quitar - ¿Cómo eliminar automáticamente los espacios en blanco finales en Visual Studio 2008?



indentar codigo visual studio code (16)

A menos que este sea un proyecto de una persona, no lo hagas. Tiene que ser trivial diferir sus archivos locales contra su repositorio de código fuente, y borrar espacios en blanco cambiaría las líneas que no necesita cambiar. Entiendo perfectamente; Me encanta que mi espacio en blanco sea uniforme, pero esto es algo que debe renunciar por el bien de una colaboración más limpia.

¿Es posible configurar Visual Studio 2008 para eliminar automáticamente los espacios en blanco al final de cada línea al guardar un archivo? No parece haber una opción incorporada, ¿hay alguna extensión disponible para hacer esto?


Antes de guardar, es posible que pueda usar el atajo de formato automático CTRL + K + D.



Creo que la versión de Jeff Muir podría mejorarse un poco si solo recorta los archivos de código fuente (en mi caso C #, pero es fácil agregar más extensiones). También agregué un cheque para asegurar que la ventana del documento esté visible porque algunas situaciones sin esa verificación me muestran errores extraños (LINQ to SQL files ''* .dbml'', por ejemplo).

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved Dim result As vsFindResult Try If (document.ActiveWindow Is Nothing) Then Return End If If (document.Name.ToLower().EndsWith(".cs")) Then document.Activate() result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, ":Zs+$", vsFindOptions.vsFindOptionsRegularExpression, String.Empty, vsFindTarget.vsFindTargetCurrentDocument, , , vsFindResultsLocation.vsFindResultsNone) If result = vsFindResult.vsFindResultReplaced Then document.Save() End If End If Catch ex As Exception MsgBox(ex.Message & Chr(13) & "Document: " & document.FullName, MsgBoxStyle.OkOnly, "Trim White Space exception") End Try End Sub


Creo que tengo una versión de esta macro que no bloqueará VS2010 en refactor, y tampoco bloqueará el IDE cuando guarde archivos que no sean de texto. Prueba esto:

Private Sub DocumentEvents_DocumentSaved( _ ByVal document As EnvDTE.Document) _ Handles DocumentEvents.DocumentSaved '' See if we''re saving a text file Dim textDocument As EnvDTE.TextDocument = _ TryCast(document.Object(), EnvDTE.TextDocument) If textDocument IsNot Nothing Then '' Perform search/replace on the text document directly '' Convert tabs to spaces Dim convertedTabs = textDocument.ReplacePattern("/t", " ", _ vsFindOptions.vsFindOptionsRegularExpression) '' Remove trailing whitespace from each line Dim removedTrailingWS = textDocument.ReplacePattern(":Zs+$", "", _ vsFindOptions.vsFindOptionsRegularExpression) '' Re-save the document if either replace was successful '' (NOTE: Should recurse only once; the searches will fail next time) If convertedTabs Or removedTrailingWS Then document.Save() End If End If End Sub


Encontrar / Reemplazar usando Expresiones Regulares

En el cuadro de diálogo Buscar y reemplazar, expanda Buscar opciones , marque Usar , elija expresiones regulares

Encuentra qué : " :Zs#$ "

Reemplazar con : ""

clic en Reemplazar todo

En otros editores (un analizador de expresiones regulares normal ) " :Zs#$ " sería " /s*$ ".


Este es un muy buen ejemplo de cómo eliminar espacios en blanco al final. Hay algunas cosas que cambiaría según lo que descubrí usando esta macro. En primer lugar, la macro convierte automáticamente pestañas en espacios. Esto no siempre es deseable y podría empeorar las cosas para las personas que aman las pestañas (generalmente basadas en Linux). El problema de las pestañas en realidad no es lo mismo que el problema del espacio en blanco adicional. En segundo lugar, la macro asume que solo se está guardando un archivo a la vez. Si guarda varios archivos a la vez, no eliminará correctamente el espacio en blanco. El motivo es simple El documento actual se considera el documento que puede ver. En tercer lugar, no comete errores al verificar los resultados de búsqueda. Estos resultados pueden proporcionar una mejor información sobre qué hacer a continuación. Por ejemplo, si no se encuentran espacios en blanco y se reemplazan, no es necesario guardar el archivo nuevamente. En general, no me gustó la necesidad de que se salvara o no la bandera global. Tiende a pedir problemas basados ​​en estados desconocidos. Sospecho que la bandera se ha agregado únicamente para evitar un ciclo infinito.

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _ Handles DocumentEvents.DocumentSaved Dim result As vsFindResult ''Dim nameresult As String Try document.Activate() '' Remove all the trailing whitespaces. result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _ ":Zs+$", _ vsFindOptions.vsFindOptionsRegularExpression, _ String.Empty, _ vsFindTarget.vsFindTargetCurrentDocument, , , _ vsFindResultsLocation.vsFindResultsNone) ''nameresult = document.Name & " " & Str$(result) ''MsgBox(nameresult, , "Filename and result") If result = vsFindResult.vsFindResultReplaced Then ''MsgBox("Document Saved", MsgBoxStyle.OkOnly, "Saved Macro") document.Save() Else ''MsgBox("Document Not Saved", MsgBoxStyle.OkOnly, "Saved Macro") End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception") End Try End Sub

Agregué cuadros de mensajes de depuración para ayudar a ver qué estaba pasando. Dejó muy claro que el almacenamiento múltiple de archivos no funcionaba. Si quieres jugar con ellos, elimina el comentario de esas líneas.

La diferencia clave es usar document.Activate () para forzar el documento en el documento actual activo de primer plano. Si el resultado es 4, eso significa que el texto fue reemplazado. Cero significa que no pasó nada. Verá dos salvaciones por cada archivo. El primero reemplazará y el segundo no hará nada. Potencialmente, podría haber problemas si el guardado no puede escribir el archivo, pero es de esperar que este evento no se llame si eso sucede.

Antes de la secuencia de comandos original, no sabía cómo funcionaba la secuencia de comandos en Visual Studio. Es un poco sorprendente que utilice Visual Basic como interfaz principal, pero funciona perfectamente para lo que necesita hacer.


Estoy usando VWD 2010 Express donde las macros no son compatibles, desafortunadamente. Así que simplemente copio / pego en Notepad++ arriba a la izquierda menú Edit > Blank Operations > Trim Trailing Space hay otras operaciones relacionadas disponibles también. Luego copie / pegue de nuevo en Visual Studio.

También se puede usar NetBeans lugar de Notepad ++, que tiene "Eliminar espacios finales" en el menú "Fuente".



Puede crear una macro que se ejecute después de guardar para hacer esto por usted.

Agregue lo siguiente en el Módulo EnvironmentEvents para sus macros.

Private saved As Boolean = False Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _ Handles DocumentEvents.DocumentSaved If Not saved Then Try DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _ "/t", _ vsFindOptions.vsFindOptionsRegularExpression, _ " ", _ vsFindTarget.vsFindTargetCurrentDocument, , , _ vsFindResultsLocation.vsFindResultsNone) '' Remove all the trailing whitespaces. DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _ ":Zs+$", _ vsFindOptions.vsFindOptionsRegularExpression, _ String.Empty, _ vsFindTarget.vsFindTargetCurrentDocument, , , _ vsFindResultsLocation.vsFindResultsNone) saved = True document.Save() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception") End Try Else saved = False End If End Sub

He estado usando esto desde hace un tiempo sin ningún problema. No creé la macro, pero la modifiqué de la de ace_guidelines.vsmacros que se puede encontrar con una búsqueda rápida en Google.



Puedes hacerlo fácilmente con estas tres acciones:

  • Ctrl + A (selecciona todo el texto)

  • Editar -> Avanzado -> Eliminar espacio en blanco horizontal

  • Editar -> Avanzado -> Selección de formato

Espera unos segundos y listo.

Es Ctrl + Z ''capaz en caso de que algo salga mal.


Sobre la base de la respuesta de Dyaus y una expresión regular de un informe de conexión , aquí hay una macro que maneja guardar todo, no reemplaza las pestañas con espacios y no requiere una variable estática. ¿Su posible inconveniente? Parece un poco lento, tal vez debido a múltiples llamadas a FindReplace .

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _ Handles DocumentEvents.DocumentSaved Try '' Remove all the trailing whitespaces. If vsFindResult.vsFindResultReplaced = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _ "{:b}+$", _ vsFindOptions.vsFindOptionsRegularExpression, _ String.Empty, _ vsFindTarget.vsFindTargetFiles, _ document.FullName, , _ vsFindResultsLocation.vsFindResultsNone) Then document.Save() End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception") End Try End Sub

Para cualquier otra persona que intente usar esto en un complemento de Visual Studio 2012, la expresión regular que terminé usando es [ /t]+(?=/r?$) (No olvide escapar de las barras diagonales inversas si es necesario). Llegué aquí después de varios intentos inútiles de solucionar los problemas con una conversión sin formato de {:b}+$ no coincidía con el retorno del carro.


Tomando elementos de todas las respuestas ya dadas, aquí está el código con el que terminé. (Principalmente escribo código C ++, pero es fácil verificar las diferentes extensiones de archivos, según sea necesario).

¡Gracias a todos los que contribuyeron!

Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _ Handles DocumentEvents.DocumentSaved Dim fileName As String Dim result As vsFindResult Try fileName = document.Name.ToLower() If fileName.EndsWith(".cs") _ Or fileName.EndsWith(".cpp") _ Or fileName.EndsWith(".c") _ Or fileName.EndsWith(".h") Then '' Remove trailing whitespace result = DTE.Find.FindReplace( _ vsFindAction.vsFindActionReplaceAll, _ "{:b}+$", _ vsFindOptions.vsFindOptionsRegularExpression, _ String.Empty, _ vsFindTarget.vsFindTargetFiles, _ document.FullName, _ "", _ vsFindResultsLocation.vsFindResultsNone) If result = vsFindResult.vsFindResultReplaced Then '' Triggers DocumentEvents_DocumentSaved event again document.Save() End If End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception") End Try End Sub


Una simple adición es eliminar los retornos de carro durante el guardado.

'' Remove all the carriage returns. result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _ "/x000d/x000a", _ vsFindOptions.vsFindOptionsRegularExpression, _ "/x000a", _ vsFindTarget.vsFindTargetCurrentDocument, , , _ vsFindResultsLocation.vsFindResultsNone)

La clave para este trabajo está cambiando / x000d / x000a a / x000a. El prefijo / x indica un patrón Unicode. Esto automatizará el proceso de preparación de los archivos fuente para los sistemas Linux.


Utilizo ArtisticStyle (C ++) para hacer esto y también reformateo mi código. Sin embargo, tuve que agregar esto como una herramienta externa y debes activarlo tú mismo para que no te guste.

Sin embargo, me parece excelente que pueda reformatear el código de una manera más personalizada (por ejemplo, los parámetros de funciones de líneas múltiples) que puedo pagar el precio de ejecutarlo manualmente. La herramienta es gratis.