4

私が作成した C# コード スニペットは、Enter キーを押すことによってのみ終了できますが、'struct' などの組み込みのスニペットは、カスタム フィールドをタブで移動することによって完了することができます。

それは大きな問題ではありませんが、迷惑です。ショートカット名だけを置き換えて、構造体スニペットの XML 全体を自分のものにコピーしようとしました。それでも、挿入を完了するには Enter キーを押す必要がありました。

これがなぜそうなのか、何か考えはありますか?他の誰かがこの動作を再現できますか?

これが私が書こうとしているスニペットです:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
  <Title>cmd</Title>
  <Shortcut>cmd</Shortcut>
  <Description>Code snippet for ICommand</Description>
  <Author>Andreas Larsen</Author>
  <SnippetTypes>
    <SnippetType>Expansion</SnippetType>
  </SnippetTypes>
</Header>
<Snippet>
  <Declarations>
    <Literal>
      <ID>name</ID>
      <ToolTip>Command name</ToolTip>
      <Default>My</Default>
    </Literal>
  </Declarations>
  <Code Language="csharp"><![CDATA[public ICommand $name$Command
  {
  get
  {
    if (_$name$Command == null)
        _$name$Command = new DelegateCommand($name$);
    return _$name$Command;
  }
}
$end$]]>
  </Code>
 </Snippet>
</CodeSnippet>
</CodeSnippets>

編集: Carl G が指摘したように、Visual Studio の動作は ENTER または ESC のみで終了します。TAB で終了するのは、ReSharper Live Template の動作です。

4

2 に答える 2

3

Enter / Escapeを押したときにのみ、構造体スニペットをコミットできますが、タブは取得できません。私はあなたが達成したいことは可能ではないと思います(またはそのことについては賢明です)。完了するスニペットの規則は、Enterキーを押すか、エスケープすることです。これは、文書化された動作です。

他に何かすることは確かに慣習を破っていますか?forなどのパラメータ化されたスニペットを使用するときに規則が役立つ理由がわかります。タブを使用すると、決定に満足してEnterキーを押す前に、値を複数回変更できます。

于 2009-07-08T07:49:41.857 に答える
1

私は今それを理解しました。

ReSharper アドインを使用していますが、Visual Studio のスニペットをオーバーライドするライブ テンプレート機能があるようです。ReSharper は、TAB を使用してネイティブ VS スニペットとそのライブ テンプレートでスニペットを完成できる機能を追加しました。

代わりに、カスタム スニペットをライブ テンプレートに変換すると、希望どおりの動作が得られました。これで、各フィールドを TAB キーで移動して変更し、最後の要素を TAB キーで移動してスニペットを終了することができます。

興味のある方のために、ライブ テンプレートはより機能豊富なスニペット機能を提供します。たとえば、フィールドで単純なマクロを実行できるため、たとえば、プロパティの名前を再利用するときに、バッキング フィールドの最初の文字を小文字にすることができます (それが命名規則である場合)。余裕があれば非常におすすめのアドインです!

于 2009-07-09T07:59:29.720 に答える