【问题标题】: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
- 键入
<%= %>,然后将插入符号返回到“=”之后的空格之间
- 停止录制: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
【解决方案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 是一个可以让您做到这一点的好工具。您可以创建自己的模板来满足您的需求,但也可以使用标签。有很多功能,而且物有所值。