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。您可以創建自己的模板,以滿足您的需求,同時也可以使用標籤環繞。有很多功能,價格非常合適。

相關問題