Est-il possible de configurer Visual Studio 2008 pour supprimer automatiquement les caractères d'espacement à la fin de chaque ligne lors de l'enregistrement d'un fichier? Il ne semble pas y avoir d’option intégrée, existe-t-il des extensions pour le faire?
CodeMaid est une extension très populaire de Visual Studio et le fait automatiquement avec d’autres nettoyages utiles.
Je l'ai configuré pour nettoyer un fichier lors de la sauvegarde, ce qui, à mon avis, est le fichier par défaut.
Rechercher/remplacer à l'aide d'expressions régulières
Dans la boîte de dialogue Rechercher et remplacer, développez Options de recherche, cochez la case tiliser, choisissez Expressions régulières
Trouver quoi: ":Zs#$
"
Remplacer par: ""
cliquez Remplacer tout
Dans les autres éditeurs (a normal Analyseur d’expressions régulières) ":Zs#$
" serait "\s*$
".
Vous pouvez créer une macro qui s'exécute après une sauvegarde pour le faire pour vous.
Ajoutez ce qui suit dans le module EnvironmentEvents pour vos 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
Je l'utilise depuis un certain temps maintenant sans aucun problème. Je n'ai pas créé la macro, mais je l'ai modifiée par rapport à celle de ace_guidelines.vsmacros, qui peut être trouvée à l'aide d'une recherche rapide sur Google.
Avant de sauvegarder, vous pourrez peut-être utiliser le raccourci de formatage automatique CTRL+K+D.
Vous pouvez le faire facilement avec ces trois actions:
Ctrl + A (sélectionnez tout le texte)
Édition -> Avancé -> Supprimer les espaces blancs horizontaux
Édition -> Avancé -> Sélection du format
Attendez quelques secondes et c'est fait.
Ses Ctrl + Z'capable au cas où quelque chose se passait mal.
En prenant des éléments de toutes les réponses déjà données, voici le code avec lequel je me suis retrouvé. (J'écris principalement du code C++, mais il est facile de rechercher des extensions de fichiers différentes, si nécessaire.)
Merci à tous ceux qui ont contribué!
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
Vous pouvez utiliser une macro comme décrit dans Suppression des espaces et réécriture des commentaires à l'aide de recherches d'expression régulière
J'utilise VWD 2010 Express où les macros ne sont malheureusement pas prises en charge. Donc, je ne fais que copier/coller dans Notepad ++ menu en haut à gauche Edit
> Blank Operations
> Trim Trailing Space
il existe également d’autres opérations connexes. Copiez/collez ensuite dans Visual Studio.
On peut aussi utiliser NetBeans au lieu de Notepad ++, qui a "Supprimer les espaces de fin" dans le menu "Source".
À moins qu'il ne s'agisse d'un projet d'une personne, ne le faites pas. Il doit être facile de comparer vos fichiers locaux à votre référentiel de code source, et effacer les blancs modifierait les lignes que vous n'avez pas besoin de changer. Je comprends parfaitement; J'aime avoir tous mes uniformes dans les espaces blancs - mais c'est quelque chose que vous devriez abandonner pour des raisons de collaboration plus propre.
Je pense que la version Jeff Muir pourrait être un peu améliorée si elle ne supprime que les fichiers de code source (dans mon cas, C #, mais il est facile d’ajouter d’autres extensions). De plus, j'ai ajouté une vérification pour m'assurer que la fenêtre du document est visible, car certaines situations sans cette vérification m'indiquent d'étranges erreurs (par exemple, les fichiers LINQ to SQL '* .dbml').
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
Personnellement, j’aime beaucoup l’extension Visual Studio Trailing Whitespace Visualizer, qui prend en charge Visual Studio 2012.
J'utilise ArtisticStyle (C++) pour le faire et aussi reformater mon code. Cependant, j'ai dû ajouter ceci en tant qu'outil externe et vous devez le déclencher vous-même pour ne pas l'aimer.
Cependant, je trouve excellent que je puisse reformater le code de manière plus personnalisée (par exemple, les paramètres de fonction multiligne) et que je puisse payer le prix de l’exécution manuelle. L'outil est gratuit.
En vous appuyant sur la réponse de Dyaus et sur une expression régulière tirée d'un rapport de connexion , voici une macro qui gère tout enregistrer, ne remplace pas les tabulations par des espaces et ne nécessite pas de variable statique. Son inconvénient possible? Cela semble un peu lent, peut-être en raison d'appels multiples à 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
Pour tous ceux qui essaient d'utiliser cela dans un complément Visual Studio 2012, l'expression régulière que j'ai finalement utilisée est [ \t]+(?=\r?$)
(n'oubliez pas d'échapper aux barres obliques inverses si nécessaire). Je suis arrivé ici après plusieurs tentatives infructueuses de résolution des problèmes, avec un conversion brute de {:b}+$
Ne correspondant pas au retour chariot.
Je pense avoir une version de cette macro qui ne plantera pas VS2010 sur le refactor et ne bloquera pas non plus le IDE lors de l'enregistrement de fichiers non-texte. Essayez ceci:
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