Skip to content

Feature Request: Keybinding Overloading #39888

@brandonzylstra

Description

@brandonzylstra

I'm not asking for the ability to run multiple commands in sequence, as mentioned in

or as addressed with the macros extension

I'd like to be able to assign a given keybinding to multiple different commands separately, and if multiple commands are applicable in the current context when the keystroke is used, present the user with a menu of the options, rather than considering it a conflict, where only one can "win".

There are many significant benefits to this:

  • You don't have to worry about keybindings from your multiple extensions conflicting with each other.
  • All extension authors can add the keybinding they think makes the most sense, instead of telling you to manually add it in your own personal keybindings.json.
  • You don't have to worry about your personal keybindings clobbering a default keybinding (this sort of conflict does not appear when you use "Show Conflicts"—at least it did not in my tests).
  • You will never accidentally use the wrong command because of a conflict in which you expected another command to be triggered by your keybinding.
  • You can purposefully add multiple related commands to the same keybinding, so that you have fewer bindings to memorize. For example,
    • you could assign all of your Git-related commands to G, or, for more focused groupings,
    • you could assign all variations of Git commands related to adding files to A, and those related to commiting to C, and so forth.
  • You can experiment with changed keybindings without having to change the whole world in order to accommodate the change you think you might prefer.

Since there may be people who have grown accustomed to existing conflicts in their keybindings (and accustomed to the current winner) it would make sense for this behavior to have a setting to turn it on or off, so that they are not presented with a menu containing what used to be considered "conflicts" but under the new behavior are simply alternate options assigned to the same keystroke.

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature-requestRequest for new features or functionalitykeybindingsVS Code keybinding issues

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions