Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.78.0 OS Version: Windows 10 Steps to Reproduce: in order to remove any system binding (used to work in v1.77.) See the screencap: in particular, I wanted to access the menu bar via a "mnemonic" as opposed to toggling regex search by . : in v1.78, it now errors out with instead of invoking the menu as it used to in v1.77. Please let me know if there is now another workaround to unbind all system bindings at once... Unbinding each system shortcut individually is not workable, since new ones are constantly ... is just one example, another one that I found in my config is which is useful in the Web version in order to always pass to Chrome. ! !
Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.78.0. Please try upgrading to the latest version and checking whether this issue remains. Happy Coding!
I've got so that auto-complete doesn't insert random stuff as I'm typing, but since updating to 1.78 gives the same error in the original poster's screenshot, and does NOT type a into the editor
hello everyone! Thank you for filing this issue, . I think you should be able to achieve what you want using the command (a command that doesn't do anything), eg Please, let me know if this doesn't solve the problem. Usually, having an empty command name is an oversight rather than an intentional decision, so we're trying to warn the user when they have such a keybinding. You can also remove a specific keybinding if you like -
No, does not achieve what I want. I does not do what wants, either — please read our comments. We do not want a shortcut to do nothing ( captures the keyboard event and does nothing,) we want it to be passed to "environment", so to speak: as mnenomic as character as control code keyboard shortcut So, we have a bunch of use-cases where the long-standing behaviour is broken. Empty commands do not just appear in someone's config by accident... The stronger justification would be to notice that the shortcuts that were "unbound" this way do not appear in the "Keyboard Shortcuts" UI, which is a UI issue, which by the way is in no way resolved by the new behaviour. Alternative: return the original behaviour and show empty commands in the "Keyboard Shortcuts" UI. Please re-open this issue. Maybe it can be re-opened with an alternative solution, like providing explicit , but, as it stands now, the new behaviour breaks existing long-standing use-cases with no alternatives.
This was also addressed in the original submission: new keybindings are constantly , and then there are Extension keybindings in addition to System, so a blanket solution is needed.
as said, this is a breaking change of behavior that's been in VSCode wince long before v1.0, and there is no work around that gets back to the original behavior
Oh, now I understand the problem. Thank you very much! Sorry for the confusion and the regression. We'll work on fixing this ASAP.
Does putting as the command ID achieve what you want? I tried it on Mac & Windows, to my understanding, this does what you want. This is a workaround; we'll likely revert the old behavior soon. Just FYI (I think an undocumented feature): Prefixing a command ID with a caret () runs the command but also doesn't prevent the propagation of the event to the system. Could you also try the workaround with putting the command ID and report back if that does what you expect? I'm not exactly sure why auto-complete would "insert random stuff" in the first place. You usually need to accept a completion item with "enter" or "tab". There's also a way to tweak if a completion item is pre-selected on auto-complete, if you feel like it hinders your typing experience: <img width="1010" alt="image" src=""
to both of your questions... yes works like an empty string used to... and by setting and commenting out the keybinding, I also get the typing experience I want... because yes, by "random" I meant whatever happened to show up in the intellisense popup
a possible "fix": update the docs to cover this breaking change (the docs still say to use ) & update the keyboard shortcuts to change to ... and leave the new behavior as is
The old behavior will be restored in this week's release - 1.78.2. Thank you everyone for help and sorry for the inconvenience!
a keybinding with set to and to an empty string. search input ( within an open editor/file) sure that pressing opens the system menu rather than toggling the regex search. Also, you shouldn't see an error notification "command '' not found" 1) Create a keybinding in your (invoke command ) with matching a system keybinding (e.g., if you're on Mac, works) and set to some command, e.g., "". Trigger the new keybinding and notice that the command is indeed is invoked. 2) Create a keybinding below the one you created above, with the same but with set to an empty string. 3) Trigger your keybinding. It should trigger the system keybinding rather than the command bound with the first keybinding. Also, no error notification "command '' not found" is shown.
I've created a pull request to update the docs with the new behaviour ().

Discussion:
this._logService.trace('KeybindingService#dispatch', keypressLabel, `[ Will dispatch command ${resolveResult.commandId} ]`); <del> if (resolveResult.commandId === null) { </del> <ins> if (resolveResult.commandId === null || resolveResult.commandId === '') { </ins> if (this.inChordMode) { const currentChordsLabel = this._currentChords.map(({ label }) => label).join(', '); this._log(`+ Leaving chord mode: Nothing bound to "${currentChordsLabel}, ${keypressLabel}".`); this._notificationService.status(nls.localize('missing.chord', "The key combination ({0}, {1}) is not a command.", currentChordsLabel, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ }); this._leaveChordMode(); <ins> shouldPreventDefault = true; </ins> } <del> shouldPreventDefault = true; </del> } else { if (this.inChordMode) { this._leaveChordMode();