Visual Studio 2010-Erweiterung, die Code-Erweiterung ausführt

8

Ich möchte eine Visual Studio 2010 VSIX-Erweiterung erstellen, die Text basierend auf einem Aufruf einer Methode erweitert (mithilfe der Zen-Selektor-basierte Syntax ). Im Idealfall würde ein Benutzer eine Textfolge eingeben, einen Hotkey drücken und die Textzeichenfolge würde erweitert.

Ich habe mir viele Beispiele angeschaut, aber alle konzentrieren sich entweder auf ausgewachsene Sprachdienstleistungen oder auf einfache Verzierungen. Im Idealfall würde ich gerne ein voll funktionsfähiges Beispiel finden, aber ich würde mit den Schnittstellen / Klassen und etwas Code glücklich sein.

Einige Referenzen, die ich angeschaut habe:

Update: Ich weiß, dass Resharper und CodeRush so etwas tun. Ich würde das gerne als eigenständiges Plugin machen, wenn möglich.

    
Jon Galloway 01.07.2011, 08:12
quelle

3 Antworten

9

Es sieht so aus, als ob Sie nach einem guten Beispiel / Verweis suchen, wie Sie mit der Tastatur die Texteinfügung in den Visual Studio-Puffer steuern können.

Leider ist das keine Frage, die eine direkte Antwort hat. Die Handhabung von Tastaturen in Visual Studio ist im besten Fall komplex und das Ziehen von Haaren manchmal frustrierend. Ich habe versucht, diese Antwort so einfach wie möglich zu halten, aber leider eignet sich das Thema nicht für Einfachheit

Zum Starten gibt es mindestens 5 verschiedene Mechanismen, mit denen Visual Studio Tastatureingaben in Befehle umleitet.

Welche davon Sie brauchen, hängt von einigen Faktoren ab

  • In welchen Versionen von Visual Studio soll das Add-in funktionieren?
  • Welche Art von Add-In werden Sie erstellen: ein tatsächliches Addin, VS-Paket oder VSIX
  • Wie wichtig es Ihnen ist, den Kampf um Tastatureingaben zu gewinnen

Welche davon Sie benötigen, hängt stark davon ab, wie Ihr Add-In funktionieren soll und in welchen Versionen von Visual Studio es funktionieren soll. Obwohl es zwei grundlegende Routen gibt, die du allerdings nehmen kannst,

Als Erstes entwickeln Sie ein Visual Studio Package und registrieren ein DTE.Command für jeden Hotkey in Ihrer Erweiterung. Sie müssten dann IOleCommandTarget zur Filterkette IVsTextView s hinzufügen, um Ihre Befehle zu verarbeiten. Dieser Ansatz ermöglicht es Ihnen, Ihre Hot Keys in den meisten Szenarien zu verarbeiten.

Die zweite besteht darin, einen VSIX zu entwickeln, in die IOleCommandTarget -Kette von IVsTextView einzuhaken und echte Visual Studio-Befehle abzufangen, die Ihren Hotkeys zugeordnet sind.

Beide Ansätze haben ihre Höhen und Tiefen, aber meine Antwort ist schon ein bisschen zu lang wie es ist. Wenn Sie mir weitere Details geben können, kann ich versuchen, Ihnen eine prägnantere und hilfreichere Antwort zu geben.

Wie für Beispiele. VsVim führt eine ziemlich umfangreiche Tastaturverwaltung für Visual Studio durch und hat ein Beispiel für eine der oben genannten Methoden.

Lassen Sie mich wissen, welche Sie interessiert und ich kann Sie auf den richtigen Platz im Quellcode verweisen.

Außerdem versuchte ich, während ich mich an dem Gewirr von Tastatureingaben arbeitete, zu dokumentieren, was ich alles gelernt hatte. Es ist nicht vollständig auf dem neuesten Stand, aber dieses Dokument beschreibt die grundlegenden Aspekte, wie die Eingabe weitergeleitet wird

BEARBEITEN

Jon hat in Kommentaren die VSIX + IOleCommandTarget route

angegeben

Dies ist IMHO der einfachste Ansatz. Beachten Sie jedoch, wie sich die Befehlsbindungen auf die Daten auswirken, die über die Kette IOleCommandTarget weitergegeben werden. Die Visual Studio-Befehlsbindung wird ausgeführt, bevor die Daten an die IOleCommandTarget -Kette übergeben werden. Wenn also eine bestimmte Tasteneingabe an einen Befehl gebunden ist, wird sie als Befehl und nicht als Tastatureingabe übergeben.% Co_de%.

Zum Beispiel wird IOleCommandTarget üblicherweise dem Befehl Visual Studio CTRL-Z zugeordnet. Wenn der Benutzer Undo erreicht, dann wird CTRL-Z den Befehl Rückgängig und nicht die Tastatureingabe IOleCommandTarget sehen.

Hier sind ein paar Beispiele, an denen Sie interessiert sein könnten

  • VsCommandTarget : Beispielimplementierung von CTRL-Z
  • OleCommandUtil : Wird verwendet, um die in IOleCommandTarget übergebenen Daten in tatsächliche Befehle und Tastatureingaben zu konvertieren
  • HostFactory : Zeigt an, wie ein IOleCommandTarget in ein IOleCommandTarget von einem VSIX eingebunden wird Erweiterung.
JaredPar 01.07.2011, 17:27
quelle
1

Vielleicht könnte das helfen: Ссылка

Es verwendet jedoch ReSharper als Plug-in-Host.

    
henriksen 01.07.2011 09:59
quelle
1

Ich würde versuchen, auf ReSharper's LiveTemplates aufzubauen. Sie können viel mit Makros tun, um die Erweiterung intelligenter zu machen als einfache Leerzeichen. Ich bin kein Experte in diesem Bereich, aber ich habe einige ziemlich anspruchsvolle Vorlagen auf diese Weise gesehen.

    
Mel 01.07.2011 11:40
quelle