【问题标题】:How to move autocompleted closing tag in Visual Studio如何在 Visual Studio 中移动自动完成结束标记
【发布时间】:2010-09-29 06:19:34
【问题描述】:

我想让 Visual Studio 将自动完成的结束标记向右移动一个单词(或更多)。例如,给定以下 HTML:

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

如果我在“强调”一词之前输入&lt;em&gt;,Visual Studio 会自动完成如下:

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

然后我需要移动关闭&lt;/em&gt;以获得我想要的:

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

有没有办法让 Visual Studio 自动完成最后一步?

【问题讨论】:

    标签: html visual-studio autocomplete


    【解决方案1】:

    你的问题让我想到如果这个功能存在该有多酷。幸运的是,在 VS 中实现为宏非常简单。下面是宏的代码。您可以使用 VS 中的自定义工具轻松地将其绑定到 CTRL+ALT+Right。

    注意:因为现在是星期五晚上,所以我只是快速将这些放在一起)

    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
    

    【讨论】:

      【解决方案2】:

      我认为这是不可能的。但是,您可以配置自动关闭哪些 HTML 标签:

      工具 -> 选项 -> 文本编辑器 -> HTML -> 格式 -> “标签特定选项”按钮 -> 客户端 HTML 标签 -> em -> 关闭标签 -> 无关闭标签

      还请考虑自动移动结束标记并非微不足道(单词边界应该是什么?),它只涵盖一个非常特殊的用例(例如应该突出显示一个单词)。

      【讨论】:

      • 如果有 HTML 重构类型函数那就太好了,这样您就可以在标签中选择您想要的内容,然后选择“使用”所需的标签。
      • 我实际上更喜欢 CTRL+右箭头之类的东西,它将结束标记向右移动一个单词。这样您就可以根据需要多次执行此操作...
      • @Hugh:是的,那也很酷。我实际上尝试过,看看它是否会起作用。
      【解决方案3】:

      感谢@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 元素内结束,例如:
        />

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 2019-01-19
      • 1970-01-01
      • 2021-04-23
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多