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

时间:2008-11-04 14:16:54

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

我刚开始接受ASP.Net MVC并发现自己写了很多<%=%>在意见中。 Intellisense确实提供了结束%>,但我发现输入介绍<%=会很麻烦(我很难输入: - ))。

我已经使用Rails和我能够输入的NetBeans IDE了解了一下:

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

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

可以在Visual Studio 2008 IDE中完成类似的操作吗?

6 个答案:

答案 0 :(得分:4)

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

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

可能就足够了,但最好把它放在所有项目中,加上我们想要比 CTRL + SHIFT <更好的击键< / KBD> + P

  • 保存宏:工具 - &gt;宏 - &gt;保存临时宏,为其命名
  • 将其绑定到按键组合:
    • 工具 - &gt;选项,然后选择键盘节点
    • 搜索您选择的名称
    • 输入组合键(例如 ALT + A )并单击“确定”

现在您可以在HTML视图中按键快捷键(例如 ALT + A ),它将插入&lt;%=%&gt;,并将插入符号放入标签,准备输入。


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

对于代码段,使用名称,快捷方式和扩展名创建XML代码段文件(例如“asp.snippet”),然后使用工具 - &gt;代码片段管理器,用于添加存储代码段的文件夹。

这是片段的XML(通过“asp [tab] [tab]”),展开“&lt;%= [code]%&gt;”

<?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

BT,VS有一个片段来创建片段。只需打开一个新的XML文件,然后右键单击并选择Insert Snippet - &gt; “片段”。

答案 1 :(得分:2)

这个宏功能应该这样做:

主代码将执行以下两项操作之一:如果未选择任何内容,则只会插入&lt;%=%&gt;代码构造,如果你在编辑器中有当前选择的东西,它将使用构造E.G.包装该代码。 &lt;%=此处选择的代码%&gt;

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

答案 2 :(得分:0)

我相信Code Snippets符合条款。

答案 3 :(得分:0)

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

我使用Tools-&gt; Macros-&gt; Macro Explorer查看其中的内容,您可以创建一个新模块并添加一个宏来注入您的代码。然后使用工具 - >自定义 - >键盘...

将其绑定到键

因为它与你正在做的事情没什么不同,所以这里有一个宏来注入一个带有日期和用户名的源命令 - 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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

一个很好的工具可以让你这样做是Resharper。您可以创建自己的模板,这些模板可以满足您的需求,但也可以使用标签进行环绕。有很多功能,价格实惠。