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

Я хочу, чтобы 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 автоматически выполнять этот последний шаг?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
10
0
3 620
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Было бы неплохо, если бы была функция типа рефакторинга HTML, чтобы вы могли выбрать то, что хотите, внутри тегов, а затем выбрать «обернуть» желаемым тегом.

Jim Anderson 02.01.2009 19:14

На самом деле я бы предпочел что-то вроде CTRL + стрелки вправо, которая перемещала бы закрывающий тег на одно слово вправо. Таким образом, вы можете делать это столько раз, сколько нужно ...

Hugh 02.01.2009 19:28

@ Хью: Да, это тоже было бы круто. Я действительно пробовал это, чтобы увидеть, сработает ли это.

Jim Anderson 02.01.2009 19:44
Ответ принят как подходящий

Ваш вопрос заставил меня задуматься, как было бы здорово, если бы эта функция существовала. К счастью, это было довольно просто реализовать как макрос в 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

Благодарим @ 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

Интересно, но я обнаружил, что это не удается, когда встречается а). У меня был). <br/> в качестве конца строки, и когда я перемещаю тег <p> вправо, он оказывается внутри элемента br, например: <br </p> />

Richard Collette 17.08.2011 18:26

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