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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top