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

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

Ответы [ 3 ]

6 голосов
/ 03 января 2009

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

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

Сервис -> Параметры -> Текстовый редактор -> HTML -> Формат -> кнопка "Параметры, специфичные для тега" -> Клиентские теги HTML -> em -> Закрывающий тег -> Нет закрывающего тега

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

2 голосов
/ 05 января 2009

Переходит к @ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...