Visual Studio バッファーにテキストを挿入するためにキーボード処理を行う方法の良い例/参照を探しているようです。
残念ながら、これは簡単に答えられる質問ではありません。Visual Studio でのキーボードの処理は複雑で、ときどきイライラすることがあります。私はこの答えをできる限りシンプルにしようとしましたが、残念ながらこのトピックはシンプルにはなりません
まず、Visual Studio がキーボード入力をコマンドにルーティングするメカニズムが少なくとも 5 つあります。
これらのどれに接続する必要があるかは、いくつかの要因によって異なります
- アドインを機能させたい Visual Studio のバージョンは何ですか?
- 作成するアドインの種類: 実際のアドイン、Vs パッケージ、または VSIX
- キーボード入力の戦いに勝つことをどれだけ気にかけているか
これらのどれにフックする必要があるかは、アドインをどのように機能させたいか、およびどのバージョンの Visual Studio で機能させたいかによって大きく異なります。2つの基本的なルートがありますが、
1 つ目は、Visual Studio パッケージを開発DTE.Command
し、拡張機能のすべてのホットキーを登録することです。IOleCommandTarget
次に、コマンドを処理するためにIVsTextView
s フィルター チェーンに追加する必要があります。このアプローチにより、ほとんどのシナリオでホット キーを処理できます。
2 つ目は、VSIX を開発し、のIOleCommandTarget
チェーンにフックしIVsTextView
て、ホット キーにマップされる実際の Visual Studio コマンドをインターセプトすることです。
これらのアプローチにはどちらも浮き沈みがありますが、私の答えはすでに少し長すぎます。詳細を教えていただければ、より簡潔で役立つ回答を提供できるように努めます。
例として。VsVim は、Visual Studio 用にかなり広範なキーボード処理を行い、上記の方法のいずれかの例を示しています。
興味のあるものをお知らせください。ソース コードの適切な場所をご案内します。
さらに、キーボード入力の複雑さを理解しようと取り組んでいる間、学んだことをすべて記録しようとしました。完全に最新ではありませんが、このドキュメントでは、入力がルーティングされる方法のより基本的な側面について説明します
編集
Jon はコメントで VSIX +IOleCommandTarget
ルートを示しました
これは私見の最も簡単なアプローチです。IOleCommandTarget
ただし、注意すべきことの 1 つは、コマンド バインディングがチェーンを下って渡されるデータにどのように影響するかということです。IOleCommandTarget
Visual Studio のコマンド バインディングは、データがチェーンに渡される前に発生します。そのため、特定のキー入力がコマンドにバインドされているIOleCommandTarget
場合、キーボード入力ではなくコマンドとして渡されます。
たとえば、CTRL-Z
一般的に Visual StudioUndo
コマンドにマップされます。ユーザーがヒットすると、キーボード入力ではなく元CTRL-Z
にIOleCommandTarget
戻すコマンドが表示されますCTRL-Z
。
興味のあるサンプルをいくつかご紹介します。