Как переместить закрывающий тег автозаполнения в Visual Studio

StackOverflow https://stackoverflow.com/questions/407209

Вопрос

Я хочу, чтобы Visual Studio переместила закрывающий тег автозаполнения на слово (или более) вправо.Например, учитывая следующий HTML:

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

Если я наберу <em> перед словом «подчеркнуть» Visual Studio автозаполняется следующим образом:

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

Тогда мне нужно переместить закрытие </em> чтобы получить то, что я хочу:

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

Есть ли способ заставить Visual Studio автоматически выполнять этот последний шаг?

Это было полезно?

Решение

Ваш вопрос заставил меня задуматься, как было бы здорово, если бы такая функция существовала.К счастью, это было довольно просто реализовать в виде макроса в VS.Ниже приведен код макроса.Вы можете легко привязать это к CTRL+ALT+Right, используя инструмент настройки в VS.

(Примечание:Я просто быстро собрал это, так как сегодня вечер пятницы)

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

Другие советы

Я не думаю, что это возможно.Однако вы можете настроить, какие HTML-теги будут закрываться автоматически:

Инструменты -> Параметры -> Текстовый редактор -> HTML -> Формат -> кнопка «Параметры тега» -> Клиентские HTML-теги -> em -> Закрывающий тег -> Нет закрывающего тега

Также учтите, что автоматическое перемещение закрывающего тега не является тривиальной задачей (какой должна быть граница Word?) и охватывает только очень особый случай использования (только одно слово должно быть, например,выделено).

Респект @w4g3n3r за тяжелую работу.Я немного изменил макрос, чтобы лучше работать с пробелами.

Примечание:Я нахожу это CTRL+. прекрасно работает в качестве сочетания клавиш для этого;твой правый безымянный палец уже на . ключ в варианте использования, который я первоначально описал.

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top