2

私は ASP.Net MVC を手に入れ始めたばかりで、ビューに多くの <%= %> を書いていることに気づきました。インテリセンスは締めの %> を提供しますが、導入部の <%= を入力するのは面倒だと思います (入力するのは難しいです :-))。

Rails と NetBeans IDE を少し試してみましたが、次のように入力できました。

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

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

Visual Studio 2008 IDE で同様のことができますか?

4

6 に答える 6

4

コメントに基づいて、以下のスニペットの回答を再確認しましたが、残念ながら HTML ビューでは実行されません。これを行うもう 1 つの方法は、記録されたマクロを使用することです。

  • Web プロジェクトで、記録を開始します。CTRL+ SHIFT+R
  • 入力<%= %>してから、「=」の後のスペースの間にキャレットを戻します
  • 録音を停止: CTRL+ SHIFT+R
  • CTRL+ SHIFT+経由でマクロを挿入しますP

これで十分かもしれませんが、すべてのプロジェクトでこれを使用したほうがよいでしょう。さらに、CTRL+ SHIFT+よりも優れたキーストロークが必要Pです。

  • マクロを保存します: [ツール] -> [マクロ] -> [一時マクロを保存] で名前を付けます。
  • キーストロークの組み合わせにバインドします。
    • Tools->Options を選択し、Keyboard ノードを選択します
    • 選んだ名前で検索
    • キーの組み合わせ (例: 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

このマクロ関数はそれを行う必要があります:

メイン コードは次の 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

HTMLビューのコードスニペットは機能しません。VisualStudioの次のバージョンが予定されています。今のところマクロアプローチを検討するか、他のツールでHTMLエディターでスニペットを使用できるかどうかを確認します。

于 2008-11-04T23:20:36.013 に答える
0

これを可能にする優れたツールの 1 つが Resharper です。必要なことを行う独自のテンプレートを作成できますが、タグで囲むこともできます. 十分な機能があり、価格の割には十分な価値があります。

于 2008-11-07T11:19:58.743 に答える
0

マクロを書いて、それをキーボードコマンドにバインドするのは簡単だということがわかりました。

Tools->Macros->Macro Explorer を使用してそこにあるものを確認すると、新しいモジュールを作成し、マクロを追加してコードを挿入できます。次に、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
于 2008-11-04T16:10:17.673 に答える