gpt4 book ai didi

visual-studio-2010 - 进行代码扩展的 Visual Studio 2010 扩展

转载 作者:行者123 更新时间:2023-12-04 06:44:19 25 4
gpt4 key购买 nike

我想构建一个 Visual Studio 2010 VSIX 扩展,它基于对方法的调用(使用 Zen Coding selector-based syntax)扩展一些文本。理想情况下,用户键入一串文本,点击热键,文本串就会被展开。

我查看了很多示例,但它们都专注于成熟的语言服务或简单的装饰。理想情况下,我想找到一个完整的工作示例,但我会对接口(interface)/类和一些代码感到满意。

我看过的一些引用资料:

  • http://msdn.microsoft.com/en-us/library/bb165336.aspx
  • http://msdn.microsoft.com/en-US/vstudio/ff718165.aspx
  • http://msdn.microsoft.com/en-us/library/ee372314.aspx

  • 更新:我知道 Resharper 和 CodeRush 会做这种事情。如果可能的话,我想把它作为一个独立的插件来做。

    最佳答案

    听起来您正在寻找有关如何进行键盘处理以将文本插入到 Visual Studio 缓冲区中的良好示例/引用。

    不幸的是,这不是一个有直接答案的问题。 Visual Studio 中的键盘处理充其量是复杂的,有时令人沮丧。我试图让这个答案尽可能简单,但不幸的是,这个话题并不适合简单

    首先,Visual Studio 至少有 5 种不同的机制将键盘输入路由到命令中。

  • 绑定(bind)到已知的 Visual Studio 命令
  • 通过KeyProcessor (仅限 2010 年及以上)
  • 通过IVsFilterKeys.TranslateAccelerator (2005 年及以上 IIRC)
  • 通过IOleCommandTarget
  • Alt 键映射(我实际上根本不太了解)

  • 您需要加入哪些取决于几个因素
  • 您希望插件在哪些版本的 Visual Studio 中运行?
  • 您将构建什么类型的插件:实际插件、Vs 包或 VSIX
  • 您对赢得键盘输入之战的关心程度如何

  • 您需要连接其中哪一个在很大程度上取决于您希望插件如何运行以及您希望它在什么版本的 Visual Studio 中工作。尽管您可以选择 2 条基本路线

    首先是开发一个Visual Studio Package并注册一个 DTE.Command对于您的扩展程序中的每个热键。然后您需要添加 IOleCommandTarget进入 IVsTextView s 过滤器链来处理您的命令。这种方法将允许您在大多数情况下处理您的热键。

    二是开发一个VSIX,钩入 IOleCommandTarget IVsTextView 的链并拦截映射到热键的真实 Visual Studio 命令。

    这两种方法都有其起伏,但我的回答已经有点太长了。如果您可以给我更多详细信息,我可以尝试为您提供更简洁和有用的答案。

    至于例子。 VsVim 为 Visual Studio 进行了相当广泛的键盘处理,并为我提到的上述任何方法提供了一个示例。
  • https://github.com/jaredpar/VsVim

  • 让我知道您对哪一个感兴趣,我可以为您指出源代码中的正确位置。

    此外,在自己弄清楚键盘输入的纠结时,我试图记录我所学到的一切。它不是最新的,但本文档描述了输入如何路由的更基本方面
  • https://github.com/jaredpar/VsVim/blob/master/Src/VsVim/KeyboardInputRouting.txt

  • 编辑

    Jon 在评论中指出 VSIX + IOleCommandTarget路线

    这是恕我直言,最简单的方法。不过要注意的一件事是命令绑定(bind)如何影响通过 IOleCommandTarget 传递的数据。链。 Visual Studio 命令绑定(bind)发生在数据传递到 IOleCommandTarget 之前。链。因此,如果给定的键输入绑定(bind)到命令,它将被传递 IOleCommandTarget作为命令而不是键盘输入。

    例如 CTRL-Z通常映射到 Visual Studio Undo命令。如果用户点击 CTRL-Z然后 IOleCommandTarget将看到撤消命令而不是键盘输入 CTRL-Z .

    以下是您可能有兴趣查看的一些示例
  • VsCommandTarget : IOleCommandTarget 的示例实现
  • OleCommandUtil :用于将传入的数据转换成IOleCommandTarget实际命令和键盘输入
  • HostFactory : 详细说明如何实际连接 IOleCommandTarget进入 IVsTextView来自 VSIX 扩展。
  • 关于visual-studio-2010 - 进行代码扩展的 Visual Studio 2010 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545311/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com