2

我刚开始拿起ASP.Net MVC,发现自己在视图中写了很多<%=%>。 Intellisense确实提供了关闭%>,但我发现输入介绍性的<%=会很麻烦(他们对我来说很难打字:-))。在Visual Studio中插入替换字符的最快方法

我周围Rails和NetBeans IDE中有些地方我能涉猎类型:

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

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

可以类似的东西在Visual Studio 2008 IDE完成?

回答

2

宏功能应该这样做:

主要的代码会做,如果没有被选中,将只需要插入<%=%>代码构造,如果你有一些目前在中选定一个的两件事情,编辑器,它将用构造EG包装该代码<%=此处所选代码%>

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 
0

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

我使用工具 - >宏 - >宏资源管理器来查看那里有什么,你可以创建一个新的模块,并添加一个宏来注入你的代码。然后你使用工具 - >自定义 - >键盘将它绑定到一个键...

由于它与你所做的没有太大的不同,因此这里有一个宏,用于向日志和用户名注入源命令 - 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

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

  • 在你的web项目,开始记录:CTRL + SHIFT + [R
  • 类型<%= %>然后插入符返回空间之间的 “=”
  • 停止记录之后:CTRL + SHIFT + - [R
  • 通过CTRL + SHIFT +P插入宏

可能是不够的,但它会更好,有它在所有项目,再加上我们想要更好的击键比CTRL + SHIFT +P

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

现在你可以按下快捷键(如ALT + 一个)在HTML视图,它会插入<%=%>,并将脱字符放置在标签中,以备输入。


[老答案:不会在HTML视图中工作,很遗憾]

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

下面是(经由 “ASP [标签] [标签]”),扩大 “<%= [代码]%>” 的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> 

更多细节是here on MSDN

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

+0

谢谢克里斯。我发现我无法将它安装为XML片段,除非我将语言更改为“XML”?甚至在此之后,我在编辑.ASPX页面时没有看到任何代码片段?如果我编辑XML文件,它会被提供。但是asp 不会调用它;菜单可以。 – 2008-11-05 01:49:04

+0

对不起,Decker。我已经用基于宏观的方法更新了答案。还是很容易的,应该是你在找什么。 – 2008-11-05 05:07:08

0

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

0

一个很好的工具,可以让你做到这一点是Resharper。您可以创建自己的模板,以满足您的需求,同时也可以使用标签环绕。有很多功能,价格非常合适。

相关问题