Ceci est un très bon exemple de la façon de supprimer les espaces blancs de fin. Il y a quelques choses que je changerais en fonction de ce que j'ai découvert en utilisant cette macro. Tout d'abord, la macro convertit automatiquement les tabulations en espaces. Ce n'est pas toujours souhaitable et pourrait aggraver les choses pour les personnes qui aiment les onglets (généralement basés sur Linux). Le problème de tabulation n'est pas vraiment le même que le problème d'espace blanc supplémentaire de toute façon. Deuxièmement, la macro suppose qu'un seul fichier est enregistré à la fois. Si vous enregistrez plusieurs fichiers à la fois, cela ne supprimera pas correctement les espaces. La raison est simple. Le document actuel est considéré comme le document que vous pouvez voir. Troisièmement, il ne vérifie aucune erreur sur les résultats de la recherche. Ces résultats peuvent donner une meilleure information sur ce qu'il faut faire ensuite. Par exemple, si aucun espace n'est trouvé et remplacé, il n'est pas nécessaire de sauvegarder à nouveau le fichier. En général, je n'aimais pas la nécessité du drapeau global pour être sauvegardé ou non. Il a tendance à poser des problèmes en fonction d'états inconnus. Je soupçonne que le drapeau a été ajouté uniquement pour empêcher une boucle infinie.
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
J'ai ajouté des boîtes de message de débogage pour aider à voir ce qui se passait. Cela montrait clairement que la sauvegarde de plusieurs fichiers ne fonctionnait pas. Si vous voulez jouer avec eux, décommentez ces lignes.
La principale différence consiste à utiliser document.Activate () pour forcer le document au premier plan du document actif actif. Si le résultat est 4, cela signifie que le texte a été remplacé. Zéro signifie que rien ne s'est passé. Vous verrez deux sauvegardes pour chaque fichier. Le premier remplacera et le second ne fera rien. Il pourrait y avoir des problèmes si la sauvegarde ne peut pas écrire le fichier, mais nous espérons que cet événement ne sera pas appelé si cela se produit.
Avant le script d'origine, je ne savais pas comment le script fonctionnait dans Visual Studio. Il est légèrement surprenant qu'il utilise Visual Basic comme interface principale, mais cela fonctionne très bien pour ce qu'il doit faire.