Come spostare autocompletato tag di chiusura in Visual Studio
-
03-07-2019 - |
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?
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