Comment déplacer une balise de fermeture à complétion automatique dans Visual Studio
-
03-07-2019 - |
Question
Je souhaite que Visual Studio déplace la balise de fermeture à remplissage automatique d’un mot (ou plus) vers la droite. Par exemple, étant donné le code HTML suivant:
<p>I need to emphasize some text.</p>
Si je tape <em>
avant le mot & "; mettez l'accent sur!"
<p>I need to <em></em>emphasize some text.</p>
Ensuite, je dois déplacer la fermeture </em>
pour obtenir ce que je veux:
<p>I need to <em>emphasize</em> some text.</p>
Existe-t-il un moyen de faire en sorte que Visual Studio effectue automatiquement cette dernière étape?
La solution
Votre question m'a fait penser à quel point ce serait génial si cette fonctionnalité existait. Heureusement, c'était assez simple à implémenter en tant que macro dans VS. Vous trouverez ci-dessous le code de la macro. Vous pouvez facilement le lier à CTRL + ALT + Droite à l’aide de l’outil de personnalisation de VS.
( Remarque : je viens de dire que c'est vendredi soir.)
Sub MoveClosingTag()
Dim ts As EnvDTE.TextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
Dim start As EditPoint = ts.ActivePoint.CreateEditPoint()
Dim tag As String
ts.WordRight(True)
If ts.Text = "</" Then
Do Until ts.ActivePoint.AtEndOfLine
ts.CharRight(True)
If ts.Text.EndsWith(">") Then Exit Do
Loop
tag = ts.Text
If tag.EndsWith(">") Then
ts.Delete()
ts.WordRight(False)
ts.Insert(tag, EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToStart)
Else
ts.MoveToPoint(start)
End If
Else
ts.MoveToPoint(start)
End If
End Sub
Autres conseils
Je ne pense pas que ce soit possible. Cependant, vous pouvez configurer les balises HTML qui seront fermées automatiquement:
Outils - > Options - & Gt; Éditeur de texte - & Gt; HTML - & Gt; Format - & Gt; " Options spécifiques aux balises " bouton - > Balises HTML clientes - & Gt; em - > Balise de fermeture - & Gt; Pas d'étiquette de fermeture
Pensez également que le déplacement automatique du tag de fermeture n’est pas trivial (quelle devrait être la limite de Word?) et qu’il ne couvrirait qu’un cas très particulier (un seul mot doit par exemple être mis en surbrillance).
Props à @ w4g3n3r pour le travail acharné. J'ai un peu modifié la macro pour mieux jouer avec les espaces.
Remarque: je trouve que CTRL+.
fonctionne bien comme touche de raccourci pour cela; votre annulaire droit est déjà sur la .
clé dans le cas d'utilisation que j'ai décrit à l'origine.
Sub MoveClosingTag()
Dim ts As EnvDTE.TextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
Dim start As EditPoint = ts.ActivePoint.CreateEditPoint()
Dim tag As String
ts.WordRight(True)
If ts.Text = "</" Then
Do Until ts.ActivePoint.AtEndOfLine
ts.CharRight(True)
If ts.Text.EndsWith(">") Then Exit Do
Loop
tag = ts.Text
If tag.EndsWith(">") Then
ts.Delete()
Dim pos As Integer
pos = ts.CurrentColumn
ts.FindPattern(">", vsFindOptions.vsFindOptionsRegularExpression)
If ts.CurrentColumn = pos Then
ts.WordRight(False)
ts.FindPattern(">", vsFindOptions.vsFindOptionsRegularExpression)
End If
ts.Insert(tag, EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToStart)
Else
ts.MoveToPoint(start)
End If
Else
ts.MoveToPoint(start)
End If
End Sub