Change:
Currently, to find conflicts caused by a chord, you need to search for the first sequence, without any quotes. This works, but since the search is global across all four columns of information for each keyboard rule, it brings up a variety of commands that you're not interested in. Additionally, it's probably not an obvious way to find conflicts for most VSCode users. I wonder if "Show Same Keybindings" should not only show the exact same keybindings, but also any keybindings where the first sequence of a chord matches. Alternatively, there could be a second option to the context menu that does this.
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.466 --<!-- potentialduplicatescomment --
I like the idea of having separate entry/mechanism to look for keybindings containing keys.
Similarly, when editing a keybinding through the keybinding edit widget, when it warns you with "x existing commands have this keybinding", it should probably also warn you if that keybinding is not a chord, but it appears in an existing chord sequence, which again, has the potential for conflicts. With the two options being that those chord conflicts are either to the existing warning count, or an additional warning is with its own count.
Definitely. Some sort of mode (or at least an obvious switch) to search for first strokes in a chord would be amazing.
great
To verify: Enable Record Keys option in the Keyboard Shortcuts editor available in the search box Type Make sure all commands with cmd+k chord are shown. If you have a command with exact cmd+k keybinding, that shall also be shown.

Discussion:
import { getAllUnboundCommands } from 'vs/workbench/services/keybinding/browser/unboundCommands'; import { IKeybindingItemEntry, KeybindingMatches, KeybindingMatch, IKeybindingItem } from 'vs/workbench/services/preferences/common/preferences'; import { ICommandAction, ILocalizedString } from 'vs/platform/action/common/action'; <ins> import { isEmptyObject } from 'vs/base/common/types'; </ins> export const KEYBINDING_ENTRY_TEMPLATE_ID = 'keybinding.entry.template';

if (matchedWords.length !== words.length) { return null; } <del> if (completeMatch && (!this.isCompleteMatch(firstPart, firstPartMatch) || !this.isCompleteMatch(chordPart, chordPartMatch))) { return null; </del> <ins> if (completeMatch) { if (!this.isCompleteMatch(firstPart, firstPartMatch)) { return null; } if (!isEmptyObject(chordPartMatch) && !this.isCompleteMatch(chordPart, chordPartMatch)) { return null; } </ins> } return this.hasAnyMatch(firstPartMatch) || this.hasAnyMatch(chordPartMatch) ? { firstPart: firstPartMatch, chordPart: chordPartMatch } : null; }

assert.deepStrictEqual(actual[0].keybindingMatches!.firstPart, { keyCode: true }); }); <ins> test('filter exact matches also return chords', async () => { const command = 'a' + uuid.generateUuid(); const expected = aResolvedKeybindingItem({ command, firstChord: { keyCode: KeyCode.KeyK, modifiers: { ctrlKey: true } }, secondChord: { keyCode: KeyCode.KeyC, modifiers: { ctrlKey: true } }, when: 'whenContext1 && whenContext2', isDefault: false }); prepareKeybindingService(expected, aResolvedKeybindingItem({ command, firstChord: { keyCode: KeyCode.Escape, modifiers: { shiftKey: true, metaKey: true } }, secondChord: { keyCode: KeyCode.KeyC, modifiers: { ctrlKey: true } }, when: 'whenContext1 && whenContext2', isDefault: false })); await testObject.resolve(new Map<string, string>()); const actual = testObject.fetch('"control+k"').filter(element => element.keybindingItem.command === command); assert.strictEqual(1, actual.length); assert.deepStrictEqual(actual[0].keybindingMatches!.firstPart, { ctrlKey: true, keyCode: true }); assert.deepStrictEqual(actual[0].keybindingMatches!.chordPart, {}); }); </ins> test('filter modifiers are not matched when not completely matched (prefix)', async () => { testObject = instantiationService.createInstance(KeybindingsEditorModel, OperatingSystem.Macintosh); const term = `alt.${uuid.generateUuid()}`;