Added
- Global config directory search — new
globalConfigSearchsetting (default off, desktop only) that auto-searches the Obsidian user data folder (~/.config/obsidian/on Linux,~/Library/Application Support/obsidian/on macOS,%APPDATA%\obsidian\on Windows) for config files after exhausting vault-root candidates. Vault-root files always take priority. UsesgetObsidianUserDataDir()(ElectronuserDatapath) for platform-correct resolution. (#150)- Plugin:
src/settings.ts(newglobalConfigSearchsetting, declarative + imperative UI,RELOAD_KEYS) - Plugin:
src/lua/loader.ts(resolveLuaConfigPathglobal search step,LoadInitLuaOptionsupdate) - Plugin:
src/vimrc/loader.ts(resolveVimrcPathglobal search step,loadVimrcsignature update) - Plugin:
src/main.ts(passesglobalConfigSearchto both loaders andsoftReloadVimrc)
- Plugin:
g@{motion}operatorfunc support — new operator that calls a stored callback with the motion type ('line','char', or'block'). Sets'[and']marks to the range covered by the motion. Public API includessetOperatorfunc(fn)andgetOperatorfunc().- Fork:
~/Repos/codemirror-vim/src/vim.js(newoperatorfuncoperator,setOperatorfunc/getOperatorfuncAPI)
- Fork:
:moveand:copyex commands — proper implementation of line-move and line-copy commands.:move(:m) moves a range of lines to a destination address;:copy(:co,:t) copies them. Supports absolute, relative, and boundary addresses (0,$).- Fork:
~/Repos/codemirror-vim/src/vim.js(new:moveand:copyex command implementations) - Plugin:
src/workspace/commands.ts(cursor positioning fix for:move)
- Fork:
- Insert mode undo control — added
<C-G>uto manually insert an undo break and<C-G>Uto suppress the next automatic undo break on cursor movement.- Fork:
~/Repos/codemirror-vim/src/vim.js(new<C-G>uand<C-G>Uactions)
- Fork:
- Insert mode line navigation — added
<C-G>j,<C-G>k,<C-G><C-J>, and<C-G><C-K>to navigate lines while preserving the insert-start column.- Fork:
~/Repos/codemirror-vim/src/vim.js(new insert-mode navigation actions)
- Fork:
- Insert mode indent deletion — added
0<C-D>and^<C-D>to delete all indentation on the current line.- Fork:
~/Repos/codemirror-vim/src/vim.js(new insert-mode indent actions)
- Fork:
- Lua
vim.o.operatorfuncbridge — wiredoperatorfuncthrough the Lua API. Users can assign a Lua function tovim.o.operatorfuncwhich will be called wheng@is used.- Plugin:
src/lua/api.ts(Lua bridge foroperatorfunc) - Plugin:
src/types/vim-api.d.ts(updatedVimApitype definition)
- Plugin:
Changed
@:repeat last ex command — now pushes the command to history before execution and supports count prefixes (e.g.,2@:replays twice).- Fork:
~/Repos/codemirror-vim/src/vim.js(history push inhandleEx, count support)
- Fork:
<C-y>and<C-e>cursor behavior — cursor now advances after copying a character from above or below, matching Neovim.- Fork:
~/Repos/codemirror-vim/src/vim.js(cursor advancement fix)
- Fork:
gRvirtual replace at EOL — fixed boundary check to allow replacing the last character of a line.- Fork:
~/Repos/codemirror-vim/src/cm_adapter.ts(boundary check fix)
- Fork:
<C-a>re-insert previous insert — now correctly saves changes topreviousInsertModeChangesbefore resetting, ensuring the previous insert is always available.- Fork:
~/Repos/codemirror-vim/src/vim.js(recording fix inrecordLastEdit)
- Fork:
- Command index overhaul — expanded coverage tracking from 337 to 427 commands. 90 new entries added, 15 commands reclassified as tested, and 4 deviations removed.
- Test:
test/neovim-command-index.yaml(90 new entries) - Test:
test/neovim/deviations.ts(4 removed, 8 added)
- Test:
Fixed
:movecursor positioning — cursor now correctly lands on the last moved line instead of the first.- Plugin:
src/workspace/commands.ts(positioning fix)
- Plugin:
@:e2e test assertion — strengthened assertion fromtoContaintotoBefor more reliable verification.- Test:
test/specs/vim-builtin/new-commands.e2e.ts(assertion fix)
- Test:
- Documentation: incorrect shared config directory instructions — the "Shared config across vaults" sections in
lua-config.mdandvimrc.mdpresented global paths like~/.config/obsidian/init.luaas if they were auto-searched, but they only work when explicitly set as a custom path. Rewritten to document both the new global search toggle (Option A) and the custom absolute path (Option B). (#150) - Documentation:
tablewidgetdefault wrong in Lua config reference — documented default was"cursor", actual default is"native". Valid values corrected to"native","raw". - Documentation:
oilconfirmdeletethresholddefault wrong — documented as5inlua-config.mdandvimrc.md, actual default is1(fromDEFAULT_SETTINGS). - Documentation: Oil vimrc/Lua option names wrong in settings reference —
oilexplorer→oil,oilshowhiddenfiles→oilhiddenfiles,oildefaultsort→oilsort. Oil confirm delete threshold range corrected from1–20to0–100. - Documentation: yank highlight duration range wrong — documented as
50–3000 msinsettings.md, actual range is0–5000 ms. - Documentation:
foldenablelisted as Settings UI toggle —foldenableis a CM Vim built-in option registered viavim.defineOption, not aVimMotionsSettingsproperty. Moved from Vim features table to "Vimrc / Lua only" section.
Tests
- 68 new Neovim golden test cases — expanded coverage for
gE,go,*,#,(,),]],[[,][,[],dgn,cgn, visual mode operators,<C-r>redo,gR,gp,gP,Y, insert mode<C-r>,<C-c>,<C-G>u,<C-G>j/k,0<C-D>,^<C-D>, andQ.- Test:
test/neovim/test-definitions.ts(68 new cases)
- Test:
- New golden spec file —
test/specs/vim-builtin/new-commands-golden.e2e.tsadds 12 golden tests for@:,&,]<Space>,[<Space>, and insert mode<C-y>,<C-e>,<C-a>.- Test:
test/specs/vim-builtin/new-commands-golden.e2e.ts(new file)
- Test:
Documentation
CHANGELOG.mdAGENTS.md: updated fork API and test infrastructure descriptionsCONTRIBUTING.md: updated file tree for new test fileKNOWN_LIMITATIONS.md: marked:moveand:copyas implemented, updated infra-limitation deviationsREADME.md: addedg@and new ex commands to features listdocs/reference/keybindings.md: added new insert mode and editing commandsdocs/features/ex-commands.md: added:moveand:copydetailsdocs/configuration/lua-config.md: addedvim.o.operatorfuncdocumentation, fixed shared config section,tablewidgetdefault,oilconfirmdeletethresholddefaultdocs/configuration/vimrc.md: fixed shared config section,oilconfirmdeletethresholddefaultdocs/configuration/settings.md: fixed oil vimrc/Lua names, yank highlight duration range, movedfoldenableto vimrc/Lua-only section, addedglobalConfigSearchsettingAGENTS.md: updated Lua configuration page ownership withglobalConfigSearch
Full Changelog: 0.131.0...0.132.0