VS 2013 SDK:如何仅为代码 Window 编辑器绑定热键?

VS 2013 SDK: How to keybind hotkey only for Code Window Editor?

C#VB.Net 中,使用 Visual Studio Package,我想为 CommandBarButton 分配一个自定义键盘快捷键,例如 Ctrl + E + R,然后,当按下时,关联的 CommandBarButton 应该调用它的 Execute 方法(我想)。

我该怎么做?


更新

(请避免上述问题,该问题已得到解答。)

实际上我使用的是 vsct 文件,那么我的键绑定是这样的:

<KeyBindings>

  <KeyBinding guid="guidMainCmdSet" id="cmdidMyCommand" editor="guidVSStd97" 
              mod1="Control" key1="E" 
              mod2="Control" key2="R"/>

</KeyBindings>

MSDN 解释说 guidVSStd97 是全局的,它似乎影响到 IDE:

的所有部分

https://msdn.microsoft.com/en-us/library/bb165973%28v=vs.90%29.aspx

To define key bindings at the global scope, use an Editor ID value of guidVSStd97.

我的扩展程序与代码 Window 的选定文本一起工作,所以这很奇怪,例如在解决方案资源管理器中,或者在加载任何项目时我都可以按下热键。

然后,我希望只能在 代码 Window 编辑器.

中按下该热键 (Ctrl+ E + R)

我的问题是:

代码 Window 编辑器 的编辑器 ID 是什么?

附加要求:

我需要一个 MSDN 参考来查看更多相关的编辑器 ID,我找不到任何相关信息。

在 Visual Studio 中,键盘快捷键与命令相关联,而不是直接与 CommandBarButtons 相关联。从技术上讲,它们称为键盘绑定,并在您声明命令的 .vsct 文件中声明。参见 KeyBindings element

已编辑:您必须使用:

  <KeyBinding guid="guidVSMyPackageCmdSet" id="cmdidMyCommand" editor="guidSourceCodeTextEditor" mod1="Control" key1="X" mod2="Control" key2="X"/>

  <GuidSymbol name ="guidVisualBasicEditor" value="{2c015c70-c72c-11d0-88c3-00a0c9110049}" />

  <GuidSymbol name ="guidSourceCodeTextWithEncodingEditor" value="{c7747503-0e24-4fbe-be4b-94180c3947d7}" />

  <GuidSymbol name ="guidSourceCodeTextEditor" value="{8b382828-6202-11d1-8870-0000f87579d2}" />

...

其中 guidSourceCodeTextEditor 可以是您在 部分中定义的任何名称,您必须从 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio.0Exp_Config\Editors 中获取其值。一旦你 运行 包,如果你去工具 > 选项 window,环境 > 键盘部分,在 Show Commands Containing 中输入你的命令的名称,你应该在列表中看到快捷方式括号之间的编辑器,就像您从 "Use new shortcut in" 列表中选择它一样。如果每个 Visual Studio 版本的 guid 都相同,这会让我们产生疑问。 AFAIK,这不能保证(没有什么可以阻止 Microsoft 在新版本中更改 guid)但它们可能是相同的。我现在无法验证,因为我使用的计算机只有 VS 2013。

找不到Visual Studio2019“C#编辑器”的相关信息。但它相对容易,虽然不直观。要获取标准编辑器的指南,您可以:

  1. 转到Tools > Options > Environment > Keyboard
  2. Select 列表中的任何命令
  3. 打开 Use new shortcut in 下拉菜单,select 需要编辑器
  4. 为其分配任何快捷方式
  5. 保存选项
  6. 转到Tools > Import and Export Settings... > Export
  7. Unselect ALL 然后选择Environment > Keyboard
  8. 按导出并选择将其保存为 .vssettings 文件的位置
  9. 使用任何文本编辑器打开 .vssettings 文件
  10. 搜索 UserShortcuts。你会在那里找到你修改过的命令
  11. Shortcut 节点中,您会找到您的范围(在我的例子中 Scope="C# Editor"
  12. 搜索该范围值(例如 C# Editor

您会找到一个 Scope XML 节点。在我的例子中是:

<Scope Name="C# Editor" ID="{A6C744A8-0E4A-4FC6-886A-064283054674}"/>

复制包含大括号的 id,并将其设置为本主题中另一个 中所述的 <GuidSymbol ... /> 的值。在我的例子中是:

 <GuidSymbol name="guidCSharpEditor" value="{A6C744A8-0E4A-4FC6-886A-064283054674}" />