听起来您正在寻找有关如何进行键盘处理以将文本插入到 Visual Studio 缓冲区中的良好示例/参考。
不幸的是,这不是一个有直接答案的问题。Visual Studio 中的键盘处理充其量是复杂的,有时令人沮丧。我试图让这个答案尽可能简单,但不幸的是,这个话题并不适合简单
首先,Visual Studio 至少有 5 种不同的机制将键盘输入路由到命令中。
您需要加入哪些取决于几个因素
- 您希望插件在哪些版本的 Visual Studio 中运行?
- 您将构建什么类型的加载项:实际的加载项、Vs 包或 VSIX
- 您对赢得键盘输入之战的关心程度如何
您需要连接其中哪些在很大程度上取决于您希望插件如何运行以及您希望它在什么版本的 Visual Studio 中工作。尽管您可以选择 2 条基本路线
第一个是开发一个 Visual Studio 包并DTE.Command
为扩展中的每个热键注册一个。然后,您需要添加IOleCommandTarget
到IVsTextView
s 过滤器链中来处理您的命令。这种方法将允许您在大多数情况下处理您的热键。
第二个是开发一个 VSIX,挂接到IOleCommandTarget
链中IVsTextView
并拦截映射到您的热键的真实 Visual Studio 命令。
这两种方法都有其起伏,但我的回答已经有点太长了。如果您可以给我更多详细信息,我可以尝试为您提供更简洁和有用的答案。
至于例子。VsVim 为 Visual Studio 进行了相当广泛的键盘处理,并为我提到的上述任何方法提供了一个示例。
让我知道您对哪一个感兴趣,我可以为您指出源代码中的正确位置。
此外,在自己弄清楚键盘输入的纠结时,我试图记录我所学到的一切。它不是最新的,但本文档描述了输入如何路由的更基本方面
编辑
乔恩在评论中指出 VSIX +IOleCommandTarget
路线
这是恕我直言,最简单的方法。不过要注意的一件事是命令绑定如何影响沿IOleCommandTarget
链传递的数据。Visual Studio 命令绑定发生在数据传递到IOleCommandTarget
链之前。因此,如果给定的键输入绑定到命令,它将IOleCommandTarget
作为命令而不是键盘输入传递。
例如CTRL-Z
通常映射到 Visual StudioUndo
命令。如果用户点击CTRL-Z
然后IOleCommandTarget
将看到 Undo 命令而不是键盘输入CTRL-Z
。
以下是您可能有兴趣查看的一些示例