diff --git a/src/configuration/configuration.ts b/src/configuration/configuration.ts index 9e881786333..b777e1719c8 100644 --- a/src/configuration/configuration.ts +++ b/src/configuration/configuration.ts @@ -101,7 +101,7 @@ class Configuration implements IConfiguration { const modeKeyBindingsMap = new Map(); for (let i = keybindings.length - 1; i >= 0; i--) { - let remapping = keybindings[i]; + let remapping = keybindings[i] as IKeyRemapping; // validate let remappingErrors = await configurationValidator.isRemappingValid(remapping); diff --git a/src/configuration/configurationValidator.ts b/src/configuration/configurationValidator.ts index dd0bee081ae..bc348c7c4f6 100644 --- a/src/configuration/configurationValidator.ts +++ b/src/configuration/configurationValidator.ts @@ -42,6 +42,18 @@ class ConfigurationValidator { return [{ level: 'error', message: `${remapping.before} missing 'after' key or 'command'.` }]; } + if (!(remapping.before instanceof Array)) { + return [ + { level: 'error', message: `Remapping of '${remapping.before}' should be a string array.` }, + ]; + } + + if (remapping.after && !(remapping.after instanceof Array)) { + return [ + { level: 'error', message: `Remapping of '${remapping.after}' should be a string array.` }, + ]; + } + if (remapping.commands) { for (const command of remapping.commands) { let cmd: string; diff --git a/src/configuration/remapper.ts b/src/configuration/remapper.ts index 96507cb2b44..f26d805a148 100644 --- a/src/configuration/remapper.ts +++ b/src/configuration/remapper.ts @@ -197,7 +197,7 @@ export class Remapper implements IRemapper { for (let sliceLength = startingSliceLength; sliceLength >= range[0]; sliceLength--) { const keySlice = inputtedKeys.slice(-sliceLength).join(''); - this._logger.verbose(`trying to find matching remap for keySlice=${keySlice}.`); + this._logger.verbose(`key=${inputtedKeys}. keySlice=${keySlice}.`); if (userDefinedRemappings.has(keySlice)) { // In Insert mode, we allow users to precede remapped commands // with extraneous keystrokes (eg. "hello world jj") @@ -208,6 +208,7 @@ export class Remapper implements IRemapper { .slice(0, inputtedKeys.length - keySlice.length) .join(''); if (precedingKeys.length > 0 && !/^[0-9]+$/.test(precedingKeys)) { + this._logger.verbose(`key sequences need to match precisely. precedingKeys=${precedingKeys}.`); break; } }