代码之家  ›  专栏  ›  技术社区  ›  Howard Pinsley

在Visual Studio中插入替换字符的最快方法

  •  2
  • Howard Pinsley  · 技术社区  · 17 年前

    我刚开始学习ASP.NETMVC,发现自己写了很多<%=%&燃气轮机;在视图中。Intellisense确实提供了结束百分比>,但我发现键入介绍性的<%=很麻烦(我很难打:-)。

    r<tab>  - which would expand to <%  %>
    

    re<tab>  - which would expand to <%= %>
    

    在VisualStudio2008IDE中可以做类似的事情吗?

    6 回复  |  直到 17 年前
        1
  •  4
  •   Hulk1991 moinudin    12 年前

    根据一条评论,我仔细检查了下面的代码片段答案,不幸的是它没有在HTML视图中运行。另一种方法是通过录制的宏:

    • 在web项目中,开始录制: 控制键 + 转移 R
    • <%= %> 然后将插入符号返回到“=”后面的空格之间
    • 停止录制: 控制键 转移 +
    • 通过插入宏 + P

    这已经足够了,但最好在所有项目中都使用它,另外,我们希望使用比 控制键 + + P

    • 保存宏:工具->宏->保存临时宏,并为其命名
    • 将其绑定到按键组合:
      • 搜索您选择的名称
      • 输入一个组合键(例如。 中高音 A. )然后单击OK

    中高音 + A. )在HTML视图中,它将插入<%=%>,并将插入符号放置在标记中,准备输入。


    [旧答案:不幸的是,在HTML视图中不起作用。]

    对于代码段,创建一个包含名称、快捷方式和扩展名的XML代码段文件(例如“asp.Snippet”),然后使用工具->代码段管理器,用于添加存储代码段的文件夹。

    下面是代码段的XML(通过“asp[tab][tab]”展开“<%=[code]]]>”

    <?xml version="1.0" encoding="utf-8"?>
    <CodeSnippet Format="1.0.0"  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
      <Header>
        <Title>ASP Server Tags</Title>
        <Author>Chris Bowen</Author>
        <Shortcut>asp</Shortcut>
        <Description>ASP.NET server escape characters, including equals</Description>
        <SnippetTypes>
          <SnippetType>SurroundsWith</SnippetType>
          <SnippetType>Expansion</SnippetType>
        </SnippetTypes>
      </Header>
      <Snippet>
        <Declarations>
          <Literal>
            <ID>code</ID>
            <Default>Code</Default>
          </Literal>
        </Declarations>
        <Code Language="csharp">
          <![CDATA[<%= $code$ $selected$%>$end$]]>
        </Code>
      </Snippet>
    </CodeSnippet>
    

    更多详情请参阅 here on MSDN .

    顺便说一句,VS有一个代码段来创建代码段。只需打开一个新的XML文件,然后右键单击并选择插入代码段->“片段”。

        2
  •  2
  •   Brian Schmitt    17 年前

    主代码将执行以下两项操作之一,如果未选择任何操作,则只插入<%=%&燃气轮机;代码构造,如果您当前在编辑器中选择了某个内容,它将使用该构造(例如<%=此处选择的代码%>

    Public Sub WrapMVC()
        Try
            DTE.UndoContext.Open("Wrap MVC")
            Dim OutText As String = ""
            Dim OutFormat As String = "<%={0} %>"
            DTE.ActiveDocument.Selection.Text = String.Format(OutFormat, ActiveWindowSelection)
        Finally
            DTE.UndoContext.Close()
        End Try
    End Sub
    

    Friend Function ActiveWindowSelection() As String
        If DTE.ActiveWindow.ObjectKind = EnvDTE.Constants.vsWindowKindOutput Then
            Return OutputWindowSelection()
        End If
        If DTE.ActiveWindow.ObjectKind = "{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}" Then
            Return HTMLEditorSelection()
        End If
        Return SelectionText(DTE.ActiveWindow.Selection)
    End Function
    
    Private Function HTMLEditorSelection() As String
        Dim hw As EnvDTE.HTMLWindow = ActiveDocument.ActiveWindow.Object
        Dim tw As TextWindow = hw.CurrentTabObject
        Return SelectionText(tw.Selection)
    End Function
    
    Private Function OutputWindowSelection() As String
        Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
        Dim ow As OutputWindow = w.Object
        Dim owp As OutputWindowPane = ow.OutputWindowPanes.Item(ow.ActivePane.Name)
        Return SelectionText(owp.TextDocument.Selection)
    End Function
    
    Private Function SelectionText(ByVal sel As EnvDTE.TextSelection) As String
        If sel Is Nothing Then
            Return ""
        End If
        If sel.Text.Length <= 2 Then
            SelectWord(sel)
        End If
        If sel.Text.Length <= 2 Then
            Return ""
        End If
        Return sel.Text
    End Function
    
    Private Sub SelectWord(ByVal sel As EnvDTE.TextSelection)
        Dim leftPos As Integer
        Dim line As Integer
        Dim pt As EnvDTE.EditPoint = sel.ActivePoint.CreateEditPoint()
    
        sel.WordLeft(True, 1)
        line = sel.TextRanges.Item(1).StartPoint.Line
        leftPos = sel.TextRanges.Item(1).StartPoint.LineCharOffset
        pt.MoveToLineAndOffset(line, leftPos)
        sel.MoveToPoint(pt)
        sel.WordRight(True, 1)
    End Sub
    
        3
  •  0
  •   Tom Ritter    17 年前

    我相信 Code Snippets

        4
  •  0
  •   plinth    17 年前

    我发现直接编写宏,然后将其绑定到键盘命令。

    我使用工具->宏->宏资源管理器,以查看有什么,您可以创建一个新模块,并添加一个宏来注入代码。然后使用工具将其绑定到密钥->定制->键盘

    因为它和您正在做的并没有太大的不同,所以这里有一个宏来注入一个带有日期和用户名的源命令-VBScript-我没有仔细寻找其他替代方法。

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports System.Diagnostics
    
    Public Module Module1
    
        Private Function GetUserName() As String
            GetUserName = System.Environment.UserName
        End Function
    
        Sub InjectChangeComment()
            ActiveDocument().Selection().Text = "// " + System.DateTime.Now.ToString("MM-dd-yy") + " " + GetUserName() + vbTab + vbTab + vbTab
        End Sub
    
    End Module
    
        5
  •  0
  •   Haacked    17 年前

        6
  •  0
  •   anonym0use    17 年前

    一个很好的工具是Resharper,它可以让你做到这一点。您可以创建自己的模板来完成所需的工作,但也可以使用环绕标签。它有一系列的功能,而且价格合理。