VS 2013 SDK:如何只为代码窗口编辑器绑定热键?

Ele*_*ios 3 .net c# vb.net visual-studio visual-studio-sdk

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

我怎么能做到?。


更新

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

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

<KeyBindings>

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

</KeyBindings>
Run Code Online (Sandbox Code Playgroud)

MSDN解释说这guidVSStd97是全局的,它似乎影响到 IDE 的所有部分:

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

要在全局范围内定义键绑定,请使用 guidVSStd97 的编辑器 ID 值。

我的扩展程序适用于代码窗口的选定文本,因此很奇怪,例如在解决方案资源管理器中,或者在加载任何项目时,我都可以按下热键。

然后,我希望只能在Code Window Editor 中按该热键 (Ctrl+E+R) 。

我的问题是:

代码窗口编辑器的编辑器 ID 是哪个?

额外要求:

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

Car*_*ero 5

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

编辑:您必须使用:

  <KeyBinding guid="guidVSMyPackageCmdSet" id="cmdidMyCommand" editor="guidSourceCodeTextEditor" mod1="Control" key1="X" mod2="Control" key2="X"/>
Run Code Online (Sandbox Code Playgroud)

  <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}" />
Run Code Online (Sandbox Code Playgroud)

...

其中 guidSourceCodeTextEditor 可以是您在 <Symbols> 部分定义的任何名称,您必须从 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0Exp_Config\Editors 获取其值。运行包后,如果您转到“工具”>“选项”窗口,“环境”>“键盘”部分,在“显示命令包含”中键入命令的名称,您应该会在列表中看到带有括号之间的编辑器的快捷方式,就好像您有从“使用新快捷方式”列表中选择它。这让我们产生了一个问题,如果每个 Visual Studio 版本的 guid 都相同。AFAIK,这不能保证(没有什么可以阻止 Microsoft 在新版本中更改 guid),但它们可能是相同的。我现在无法验证,因为我使用的计算机只有 VS 2013。