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.
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
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
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
CTRL-Z
IOleCommandTarget
übergebenen Daten in tatsächliche Befehle und Tastatureingaben zu konvertieren IOleCommandTarget
in ein IOleCommandTarget
von einem VSIX eingebunden wird Erweiterung. 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.
Tags und Links visual-studio-2010 visual-studio-extensions