2009-07-08 7 views
4

Die C# -Code-Snippets, die ich erstelle, können nur durch Drücken der Eingabetaste beendet werden, während die integrierten Snippets wie 'struct' durch Tabulatoren durch die benutzerdefinierten Felder vervollständigt werden können.Schreiben Sie C# -Snippets, die mit TAB enden

Es ist kein großes Problem, aber es ist ärgerlich. Ich habe versucht, den gesamten XML-Code für das Struct-Snippet in mein eigenes zu kopieren und dabei nur den Namen der Verknüpfung zu ersetzen. Trotzdem musste ich Enter drücken, um die Einfügung abzuschließen.

Irgendwelche Ideen, warum das so ist? Kann jemand anderes dieses Verhalten reproduzieren? Hier

ist das Snippet ich zu schreiben versuchen:

<?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> 

Edit: Wie von Carl G, das Visual Studio Verhalten ist nur mit ENTER oder ESC zu beenden. Beenden mit TAB ist ein ReSharper Live Template-Verhalten.

+2

Sie werden es wahrscheinlich einfacher finden, ein Tool wie http://snipper.codeplex.com/, http://snippetiditor.codeplex.com/, http://snippetitor.codeplex.com/ –

+0

nicht zu verwenden Letztes, das ist VB –

Antwort

1

Ich habe es jetzt herausgefunden.

Ich verwende das ReSharper-Add-In und scheint eine Live-Template-Funktion zu haben, die Visual Studio-Snippets überschreibt. ReSharper hat die Funktionalität hinzugefügt, dass TAB verwendet werden kann, um ein Snippet auf nativen VS-Snippets sowie auf seinen Live-Templates zu vervollständigen.

Wenn ich meine benutzerdefinierten Snippets stattdessen in Live-Templates umwandelte, bekam ich das Verhalten, das ich wollte. Ich kann jetzt durch jedes Feld TAB wechseln und sie ändern, wie ich gehe, und das Snippet durch TABing vorbei am letzten Element beenden.

Für Interessierte bietet Live Templates eine viel funktionsreichere Snippet-Funktionalität. Zum Beispiel können Sie einfache Makros auf den Feldern ausführen, so dass zum Beispiel Hintergrund-Felder kleingeschriebenen Anfangsbuchstaben haben können (wenn das Ihre Namenskonvention ist), wenn Sie den Namen einer Eigenschaft wiederverwenden. Sehr empfehlenswert, wenn Sie es sich leisten können!

+1

Es wäre hilfreich für diejenigen, die zu spät kommen, um in Ihrer Frage oder irgendwo zu klären, dass Visual Studio-integrierte Snippets NICHT nach Tab enden. Es sind nur ReSharper-Snippets, die über die Registerkarte enden. Es gibt also keine Antwort auf Ihre Frage, es sei denn, Sie haben eine Antwort eingegeben oder ein Antworter hat vermutet, dass Sie ReSharper ebenfalls installiert haben. –

+1

Danke, ich habe eine Klarstellung zu der Frage hinzugefügt. – angularsen

3

Ich kann das Struct-Snippet nur erhalten, wenn ich die Enter/Escape-Taste drücke, aber keine Tabulatortaste. Ich denke nicht, was Sie erreichen wollen, ist möglich (oder sinnvoll). Die Konvention mit Snippets, die abgeschlossen werden sollen, besteht darin, entweder Enter oder Escape this is the documented behaviour zu drücken.

Tun Sie etwas anderes, die Konvention sicher zu brechen? Sie können sehen, warum die Konvention nützlich ist, wenn Sie parametrisierte Snippets wie für verwenden. Mit der Tab-Taste können Sie die Werte mehrmals ändern, bevor Sie mit Ihrer Entscheidung zufrieden sind, und die Eingabetaste drücken.

+0

Ich nehme an, Sie haben Recht, aber wenn ich mehrere Felder habe, möchte ich durch sie Tab und es ist sehr bequem, Tabbing zu halten, um das Snippet abzuschließen. Gerade weil die eingebauten Snippets dies auch unterstützen, ist es für mich zu einem natürlichen Verhalten geworden. – angularsen

+2

Wie kann das Snippet auf einem Tab ausgefüllt werden? Alle die ich verwendet habe, erlauben es Ihnen, zwischen Feldern zu wechseln und wenn Sie zum letzten Feld kommen und Tab erneut drücken, geht es einfach zurück zum ersten Feld. Ich habe nur je gesehen, enter oder file das Snippet zu beenden. –

Verwandte Themen