【问题标题】:Fastest way to insert replacement characters in Visual Studio在 Visual Studio 中插入替换字符的最快方法
【发布时间】:2010-09-20 16:37:49
【问题描述】:

我刚开始学习 ASP.Net MVC,发现自己在视图中写了很多 。 Intellisense 确实提供了结束 %>,但我发现输入介绍性

我已经对 Rails 和 NetBeans IDE 进行了一些尝试,我可以在其中输入:

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

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

在 Visual Studio 2008 IDE 中可以做类似的事情吗?

【问题讨论】:

    标签: asp.net-mvc visual-studio visual-studio-2008 keyboard-shortcuts


    【解决方案1】:

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

    • 在您的 Web 项目中,开始录制:CTRL+SHIFT+R
    • 键入&lt;%= %&gt;,然后将插入符号返回到“=”之后的空格之间
    • 停止录制:CTRL+SHIFT+R
    • 通过 CTRL+SHIFT+P 插入宏

    可能就足够了,但最好在所有项目中都使用它,而且我们希望击键比 CTRL+SHIFT+P:

    • 保存宏:工具->宏->保存临时宏,给它一个名字
    • 将其绑定到按键组合:
      • 工具->选项,然后选择键盘节点
      • 搜索您选择的名称
      • 输入组合键(例如ALT+A)并点击确定

    现在您可以在 HTML 视图中按下快捷键(例如 ALT+A),它将插入 ,并将插入符号定位在标签中,准备好输入。


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

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

    这是用于 sn-p 的 XML(通过“asp[tab][tab]”)扩展“”

    <?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 有一个 sn-p 来创建 sn-ps。只需打开一个新的 XML 文件,然后右键单击并选择 Insert Snippet -> "Snippet"。

    【讨论】:

      【解决方案2】:

      这个宏函数应该可以做到:

      主代码将做两件事之一,如果没有选择它只会插入 代码结构,如果您当前在编辑器中选择了某些东西,它将用结构 E.G. 包装该代码。

      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】:

        我相信Code Snippets 符合要求。

        【讨论】:

          【解决方案4】:

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

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

          由于它与您正在做的事情并没有太大的不同,这里有一个宏来注入带有日期和用户名的源命令 - 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】:

            HTML 视图中的代码片段不起作用。它计划用于下一版本的 Visual Studio。我现在看一下宏方法,或者看看其他工具是否允许在 HTML 编辑器中使用 sn-ps。

            【讨论】:

              【解决方案6】:

              Resharper 是一个可以让您做到这一点的好工具。您可以创建自己的模板来满足您的需求,但也可以使用标签。有很多功能,而且物有所值。

              【讨论】:

                猜你喜欢
                • 2013-09-21
                • 1970-01-01
                • 1970-01-01
                • 2011-04-30
                • 1970-01-01
                • 2012-09-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多