2

我刚开始学习 ASP.Net MVC,发现自己在视图中写了很多 <%= %> 。Intellisense 确实提供了结尾的 %>,但我发现输入介绍性的 <%= 很麻烦(我很难输入 :-))。

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

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

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

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

4

6 回答 6

4

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

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

可能就足够了,但最好在所有项目中都有它,而且我们想要一个比CTRL+ SHIFT+更好的击键P

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

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


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

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

这是(通过“asp[tab][tab]”)扩展“<%= [code] %>”的片段的 XML

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

更多详细信息在 MSDN 上

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

于 2008-11-04T16:52:45.093 回答
2

这个宏函数应该这样做:

主代码将做两件事之一,如果没有选择它只会插入 <%= %> 代码结构,如果您当前在编辑器中选择了一些东西,它将用结构 EG <%= selected 包装该代码代码在这里 %>

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
于 2008-11-04T16:52:59.850 回答
0

我相信代码片段会符合要求。

于 2008-11-04T14:33:50.083 回答
0

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

我使用 Tools->Macros->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
于 2008-11-04T16:10:17.673 回答
0

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

于 2008-11-04T23:20:36.013 回答
0

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

于 2008-11-07T11:19:58.743 回答