Fixed
- Disabling workspace navigation disables editor ex commands and core vim actions — turning off Settings → Vim Motions → Navigation → Workspace navigation also disabled all editor-level ex commands (
:w,:q,:buffers,:sp,:vs,:grep, etc.) and all core vim actions registered byregisterWorkspaceNavigation()— including fold commands (zc/zo/za/zM/zR/zj/zk/[z/]z/zf/zd/zE), paste (P/gp/gP), goto-definition (gd/gD/<C-]>), document outline (gO), URL open (gx), character info (ga/g8/K), file info (<C-g>), blank lines (]<Space>/[<Space>), horizontal scroll (zs/ze/zH/zL), and more. Root cause:registerExCommands()andregisterWorkspaceNavigation()were both inside theif (enableWorkspaceNav)gate. Fixed by (1) movingregisterExCommands()outside the gate, (2) splittingregisterWorkspaceNavigation()intoregisterCoreVimActions()(always called — editor commands unrelated to pane/tab management) andregisterWorkspaceNavigation()(gated — pane focus, tab switching, splits, close). (#165)- Plugin:
src/main.ts(registerExCommandsandregisterCoreVimActionscalled unconditionally;registerWorkspaceNavigationremains gated) - Plugin:
src/workspace/navigation.ts(split intoregisterCoreVimActions+registerWorkspaceNavigation)
- Plugin:
- Disabling hard-wrap disables fold commands — turning off Settings → Vim Motions → Vim features → Hard-wrap formatting also disabled all fold commands (
zf/zF/zd/zD/zE/zv/zj/zk/[z/]z/zn/zN/zi+:fold/:foldopen/:foldclose/:folddoopen/:folddoclosed). Root cause:registerFoldCommands()andregisterFoldEnableCommands()were called insideregisterOperators(), which is gated byenableHardWrap. Fixed by moving both fold registration calls out ofregisterOperators()and calling them unconditionally inmain.ts.- Plugin:
src/operators/register.ts(removed fold registration calls) - Plugin:
src/main.ts(registerFoldEnableCommandsandregisterFoldCommandscalled unconditionally)
- Plugin:
keyToKeymappings silently fail when prefix-deferred —vim.keymap.set("n", "<leader><leader>", ":buffers<CR>")withvim.g.mapleader = " "silently did nothing because<Space><Space>h(hint mode) created a partial match, triggering the fork's prefix-ambiguity deferral. After theoperatorshadowtimeout(1000ms), the deferred command timer calledcommandDispatcher.processCommand()which has no handler forkeyToKeytype mappings — they fell through todefault: break. Fixed by adding akeyToKeytype check in the deferred command timer that routes todoKeyToKey()instead, matching the dispatch logic in the mainfindKeypath. The 1-second delay before the deferred command fires is correct Neovimtimeoutlenbehavior — users who want a shorter delay can useset timeoutlen=300(now a supported alias foroperatorshadowtimeout). (#166)- Fork:
~/Repos/codemirror-vim/src/vim.js(_deferredCommandTimercallback:keyToKey→doKeyToKey;timeoutlen/tmregistered as aliases foroperatorshadowtimeout;timeoutlen=0executes immediately instead of blocking) - Plugin:
src/vim/neovim-options.ts(removedtimeoutlen/tmfrom noop list — now handled by the fork) - Plugin:
src/vimrc/loader.ts(addedtimeoutlen/tmtoKNOWN_SET_OPTIONSas aliases foroperatorshadowtimeout) - Plugin:
src/lua/api.ts(vim.opt.__newindexnow syncs non-sideEffectKNOWN_SET_OPTIONSto the fork viacallbacks.setOption) - Plugin:
src/ui/which-key.ts(suppressvim-keypressaftervim-command-doneto prevent which-key popup re-showing after synchronous command execution)
- Fork:
Tests
- 3 regression tests in
test/specs/settings-reload.e2e.tsfor #165 (:buffersex command works with workspace nav disabled;gOoutline works with workspace nav disabled;zjfold motion works with hard-wrap disabled) - 2 regression tests in
test/specs/settings-reload.e2e.tsfor #166 (<Space><Space>keyToKey mapping executes after operatorshadowtimeout when<Space><Space>hpartial exists;timeoutlen=0executes deferred mapping immediately)
Documentation
CHANGELOG.mdKNOWN_LIMITATIONS.md: marked workspace navigation paste dependency as fixed; updated operator-prefix key dispatch section withtimeoutlen/tmaliases,keyToKeydispatch fix, andtimeoutlen=0immediate executionCONTRIBUTING.md: updatednavigation.tsandoperators/register.tsdescriptions to reflect splitAGENTS.md: updated fork description withkeyToKeydeferred command fix andtimeoutlen/tmaliasesdocs/configuration/settings.md: updatedoperatorshadowtimeoutdescription withtimeoutlen/tmaliasesdocs/configuration/vimrc.md: updatedoperatorshadowtimeoutshort names withtimeoutlen/tmaliasesdocs/configuration/lua-config.md: updatedoperatorshadowtimeoutentry withtimeoutlen/tmaliases
Full Changelog: 0.142.0...0.143.0