Domanda

Voglio fare in Visual Studio spostare il autocompletato tag di chiusura di una parola (o più) a destra.Per esempio, dato il seguente codice HTML:

<p>I need to emphasize some text.</p>

Se io tipo <em> prima che la parola "sottolineare", Visual Studio autocompletes in questo modo:

<p>I need to <em></em>emphasize some text.</p>

Quindi ho bisogno di spostare la chiusura </em> per ottenere ciò che voglio:

<p>I need to <em>emphasize</em> some text.</p>

C'è un modo per rendere Visual Studio fare quell'ultimo passo automaticamente?

È stato utile?

Soluzione

La tua domanda mi ha fatto pensare quanto sarebbe stato fantastico se questa funzionalità esistenti.Per fortuna è abbastanza semplice da implementare come una macro in VS.Di seguito è riportato il codice per la macro.Si può facilmente associare questo con CTRL+ALT+Destra utilizzando lo strumento di personalizzazione in VS.

(Nota:Ho messo insieme in fretta che è venerdì sera)

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

Altri suggerimenti

Non credo che questo è possibile.Tuttavia, è possibile configurare i tag HTML vengono chiuse automaticamente:

Strumenti -> Opzioni -> Editor -> HTML -> Formato -> "Tag Specifico pulsante" Opzioni -> Client Tag HTML -> em -> Tag di Chiusura -> Nessun Tag di Chiusura

Si prega di considerare che si spostano automaticamente la chiusura tagis non banale (quello che dovrebbe essere il limite di Parola?) e sarebbe coprire solo una molto speciale, in caso d'uso (solo una Parola dovrebbe essere ad es.evidenziato).

Puntelli a @w4g3n3r per fare il duro lavoro.Ho modificato la macro un po ' a giocare meglio con gli spazi.

Nota:Trovo che CTRL+. funziona bene come un tasto di scelta rapida per questo;il tuo dito anulare destro è già sul . chiave in caso d'uso originariamente ho descritto.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top