Fixed
- EasyMotion (
<leader><leader>w/j/f) and hint mode (<leader><leader>h) now work with any leader key, including space (let mapleader = " ") and comma. Previously, leader keys with default Vim bindings (space → forward char, comma → reverse repeat find) were consumed immediately by codemirror-vim before the multi-key sequence could accumulate. Fixed by unmapping the leader key's conflicting default binding before registering EasyMotionmapCommandentries. (#6) - Vimrc
let mapleader = " "(space) now correctly sets the leader key. The parser previously split the line by whitespace, losing the space inside quotes. Added regex-first parsing forletto preserve quoted values containing whitespace. - Vimrc loading no longer falsely reports "loaded but contained no commands" when the editor isn't ready.
loadVimrcnow distinguishes "editor not available" (ready: false, retries on next event) from "file parsed with 0 commands" (ready: true). Includes a retry loop (up to 10 attempts, 100ms apart) to handle the race betweenactive-leaf-changeand editor initialization. - Leader-dependent features (EasyMotion, hint mode) are re-registered after vimrc loading resolves the leader key, ensuring they use the user's configured leader instead of the default backslash.
- Visual mode selection on markdown text objects (
vi*,va*,vi$,va$,vi~,va~,vi=,va=,vi_,va_,vi`,va`,vil,val,viC,vaC,viB,vaB,vio,vao,vit,vat) now selects the correct range — previously selected one character too far to the right. Operators (d,y,c) were unaffected. Root cause: codemirror-vim'smakeCmSelectionadds +1 to the head position in visual mode, and built-in text objects compensate via an internalexpandSelectionhelper, but customdefineMotiontext objects bypassed that path. (#4) ]bwith a single buffer no longer opens a stale file from a previous session's recent-files list.vgq(visual modegq) no longer triggers macro recording. Thevim-keypresshandler for macro recording previously intercepted theqkeystroke ingqas a macro-record toggle. Fixed by restricting macro recording to normal mode only (matching Vim behavior), tracking previous keypress to detectg-prefixed operator sequences, and cancelling pending record state on mode changes. (#5)
Added
VimRegistration.unmapDefaultBinding(key)— removes a key's default codemirror-vim binding (e.g.<Space>→l) somapCommandmulti-key sequences starting with that key can accumulate in the input buffer.VimrcLoadResult.readyfield — distinguishes "editor not available" from "file parsed successfully", enabling reliable retry logic for vimrc loading.- E2E tests for EasyMotion with space and comma as leader keys, verifying the
unmap+mapCommandapproach works for keys with default Vim bindings. - E2E test for EasyMotion surviving settings hot-reload (disable → re-enable cycle).
getSelection()test helper for asserting exact visual mode selections.loadSingleFileWorkspace()test helper usingobsidianPage.loadWorkspaceLayout()to set up deterministic single-file workspace state with an empty recent-files list.- 14 new E2E tests verifying exact visual mode selection for all delimiter-based text objects (
*,$,~,=,_,`), plus regression guards for operator mode. - E2E tests for
gqin visual mode (wrap + no macro recording),gqqmacro non-interference, and standaloneqmacro recording start/stop. - 3 Neovim golden comparison cases for
gqoperators (gqq,Vgq,gqj) added to theg-commandssuite with content deviation registered (Markdown-aware wrapping differs from Neovim's plain-textgq).
Changed
registerEasyMotion()now callsreg.unmapDefaultBinding(leader)before registeringmapCommandentries, allowing any single-character leader key to work.registerWorkspaceNavigation()hint mode binding uses the resolved leader key fromLeaderRegistry(same approach as EasyMotion).createHintModeAction()return type narrowed fromActionFnto() => void(the function ignores all parameters).VimrcLoadResultgainsready: booleanfield;loadVimrc()returnsready: falsewhen the editor adapter is unavailable.- Vimrc
active-leaf-changecallback retriesloadVimrcup to 10 times when the editor isn't ready, then re-registers leader-dependent features after successful load. KNOWN_LIMITATIONS.md: "EasyMotion leader key conflict withmapCommand" marked as fixed; added vimrc parser space-handling context.KNOWN_LIMITATIONS.md: added "Visual mode on single-character text objects" section documenting a codemirror-vim edge case wherevi*on*x*(1-char inner content) does not select correctly.
Full Changelog: 0.6.0...0.7.0