VS 2013 SDK: как связать горячую клавишу только для редактора окна кода?

В C# или VB.Net, используя Package Visual Studio, я хотел бы назначить собственное сочетание клавиш для 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

Чтобы определить привязки клавиш в глобальной области, используйте значение идентификатора редактора guidVSStd97.

Мое расширение работает с выделенным текстом окна кода, поэтому странно, что, например, в обозревателе решений или в любом загруженном проекте я могу нажать горячую клавишу.

Затем я хотел бы иметь возможность нажимать эту горячую клавишу (Ctrl+E+R) только в Редакторе окна кода.

Мой вопрос:

Какой идентификатор редактора у редактора окна кода?

Дополнительный реквизит:

Мне нужна ссылка MSDN, чтобы увидеть больше связанных идентификаторов редакторов, я ничего не могу найти об этом.


person ElektroStudios    schedule 10.07.2015    source источник


Ответы (2)


В Visual Studio сочетания клавиш связаны с командами, а не напрямую с CommandBarButtons. Технически они называются привязками клавиатуры и объявляются в файле .vsct, где вы объявляете команды. См. элемент KeyBindings.

Отредактировано: вы должны использовать:

  <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}" />

...

where guidSourceCodeTextEditor can be any name that you define in the <Symbols> section whose value you must get from HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0Exp_Config\Editors. Once you run the package, if you go to Tools >Options window, Environment > Keyboard section, type the name of your command in Show Commands Containing, and you should see the shortcut in the list with the editor between parenthesis, as if you have selected it from the "Use new shortcut in" list. Which yields us to the question if the guids are the same for each Visual Studio version. AFAIK, this is not guaranteed (nothing prevents Microsoft changing guids in a new version) but likely they are the same. I cannot verify right now because the computer that I am using only has VS 2013.

person Carlos Quintero    schedule 10.07.2015
comment
Еще раз спасибо, но снова у меня та же проблема с этим, отсутствие файла .vsct, потому что я использую пустой vspackage, где я добавляю кнопки в контекстное меню редактора кода и ничего больше (я не хочу добавлять никакую команду в меню Инструменты). действительно я должен начать свой проект с нуля, используя шаблон командного меню?. - person ElektroStudios; 10.07.2015
comment
Мы продолжим обсуждение в вашем VS 2013 SDK: Как добавить разделитель строк в меню CommandBarPopup? нить - person Carlos Quintero; 13.07.2015
comment
спасибо за ваш опыт, я обновил этот вопрос, пожалуйста, если вы можете помочь с этим. - person ElektroStudios; 13.07.2015
comment
Идентификатор редактора, несмотря на его название, является Guid. Значение guidVSStd97 определено в vsshlids.h как #define guidVSStd97 CMDSETID_StandardCommandSet97 и, в свою очередь, #define CMDSETID_StandardCommandSet97 { 0x5efc7975, 0x14bc, 0x11cf, { 0x9b, 0x2b, 0x00, 0xaa, 0x370, } . Итак, если вам нужен конкретный редактор, вы должны знать его guid, и MSDN говорит, что значение идентификатора редактора — это GUID, соответствующий CmdUIGUID, который был назначен разработчиком при создании редактора. Это значение GUID идентификатора редактора может совпадать или не совпадать с GUID для EditorFactory для редактора. - person Carlos Quintero; 14.07.2015
comment
Я не думаю, что руководства редактора задокументированы в MSDN, но они зарегистрированы в HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0Exp_Config\Editors. - person Carlos Quintero; 14.07.2015
comment
Я не тестировал, но попробуйте {8B382828-6202-11d1-8870-0000F87579D2} (редактор исходного кода (текста)) или {C7747503-0E24-4FBE-BE4B-94180C3947D7} (редактор исходного кода (текста) с кодировкой) - person Carlos Quintero; 14.07.2015
comment
Хотя msdn.microsoft.com/en-us/library/cc138531.aspx говорит, что вам нужно имя редактора (что-то вроде guid‹EditorName›EditorFactory), а не guid редактора, и его довольно сложно получить без файла .vsct пользовательского редактора. - person Carlos Quintero; 14.07.2015
comment
Удивительно, как много ты знаешь об этом. Я не уверен, какой редактор мне нужен, из-за отсутствия документации, но, увидев ключ реестра, который вы упомянули, я думаю, что этот ключ со значением по умолчанию содержит Source Code (Text) Editor, как у вас, но на моей стороне его значение пакета содержит {e269b994-ef71-4ce0-8bcd-581c217372e8}, если наши гиды разные это означает, что это может быть связано с проблемой совместимости на других ПК? или, может быть, не потому, что вы сказали, что необходимо использовать имя, а не руководство. - person ElektroStudios; 14.07.2015
comment
that's quite difficult to get without the .vsct file of the custom editor. значит я ничего не могу сделать? - person ElektroStudios; 14.07.2015
comment
Попробуйте разместить сообщение на форуме MSDN Visual Studio Integrate (social. msdn.microsoft.com/Forums/vstudio/en-US/home?forum=vsx), инженеры Microsoft из команды VS посещают его и могут дать ответ - person Carlos Quintero; 14.07.2015

Мне не удалось найти соответствующую информацию для редактора C# Visual Studio 2019. Но это относительно легко, хоть и не интуитивно понятно. Чтобы получить руководства для стандартных редакторов, вы можете:

  1. Go to Tools > Options > Environment > Keyboard
  2. Выберите любую команду в списке
  3. Откройте раскрывающийся список Use new shortcut in, выберите нужный редактор
  4. Назначьте ему любой ярлык
  5. Сохраните параметры
  6. Go to Tools > Import and Export Settings... > Export
  7. Снимите выделение со ВСЕХ, а затем выберите 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}"/>

Скопируйте идентификатор, включая фигурные скобки, и установите для него значение <GuidSymbol ... />, как описано в другом ответе в этом разделе. В моем случае это:

 <GuidSymbol name="guidCSharpEditor" value="{A6C744A8-0E4A-4FC6-886A-064283054674}" />
person Pavel Sapehin    schedule 19.11.2020
comment
Пример: руководства редактора для VS2019 Community Edition - person Pavel Sapehin; 20.12.2020