What neovim/neovim shipped
Written by FoxPlug from public releases; not affiliated with Neovim. An automatic summary of the public release, pull request and commit data of github.com/neovim/neovim. Neovim did not write it and does not use or endorse FoxPlug. Every line links to the public change it describes.
Get a weekly update like this for your product, free
Week of September 21, 2026
What shipped
- Multicursor now has a 'follow' buffer-local option to check and control follow-mode state, addressing an issue where gQ did not restore follow-mode. Pull request #42095
- Fixed a bug where operators on targets creating Visual selections would clobber the user's previous mark and visualmode() state. Pull request #42119
- Fixed an out of bounds read in the 'complete' option F{func} callbacks that could cause heap-buffer-overflow. Pull request #42080
- Fixed vim.str_byteindex() returning a byte index larger than the string length for incomplete multi-byte sequences. Pull request #41766
- Changed .h files to default to C filetype instead of C++, with existing g:c_syntax_for_h and g:ch_syntax_for_h overrides still available. Pull request #42028
- Optimized vim-patch.sh list_missing_vimpatches() to complete within minutes instead of hours by using grep filtering instead of associative array lookups. Pull request #42121
- gQ now restores the primary-cursor position in multicursor sessions, stored at extmark-id 1. Pull request #42071
- Improved LSP completion performance by reading 'completeopt', 'ignorecase' and 'smartcase' once per response instead of per item, reducing 5000-item conversion time from 19.6ms to 5.2ms. Pull request #42106
- Optimized multi-byte character decoding to decode clusters only once in the hot loop instead of multiple times. Pull request #42067
- Fixed Visual selection not being highlighted at the cursor position in terminals by removing suppression of cursor character highlight. Pull request #42105
Why it matters
This week focused on multicursor reliability and performance, with several fixes ensuring cursors behave correctly during edits and mappings. Additional improvements span LSP completion speed, terminal key handling, and .h file detection, plus numerous bug fixes for edge cases in Visual selections and string indexing.
Changelog entry
- feat(multicursor): 'follow' option to check and restore follow-mode state Pull request #42095
- fix(editor): operator target/cgn no longer clobbers Visual marks Pull request #42119
- fix(lua): vim.str_byteindex() can return index past end for incomplete sequences Pull request #42080
- fix(filetype): .h files now default to C instead of C++ Pull request #42028
- perf(vim-patch.sh): fast list_missing_vimpatches() using grep filtering Pull request #42121
- perf(lsp): read completion options once per response instead of per item Pull request #42106
- feat(multicursor): gQ restores primary-cursor position Pull request #42071
- fix(terminal): Visual selection now highlighted at cursor position Pull request #42105
- fix(lua): out of bounds read in 'complete' F{func} callbacks Pull request #42080
- perf(mbyte): single decoder loop for cluster byte length and cell width Pull request #42067
This week: multicursor follow-mode option, faster LSP completion (5.2ms vs 19.6ms for 5000 items), vim-patch.sh optimized to minutes, Visual selection highlight fixes, and .h file defaults to C.
Neovim development focused on multicursor stability and performance this week. New 'follow' buffer-local option enables checking/controlling follow-mode state. LSP completion improved 4x for large item sets. vim-patch.sh script optimized from hours to minutes. Terminal key handling fixed for S-Del and others. Visual selection highlighting corrected at cursor position. Multiple edge case fixes for operators, string indexing, and .h file detection. Development build v0.13.0-dev now available.
Week of September 14, 2026
What shipped
- Fixed multicursor replay of Lua mappings whose id ends in '0', which was incorrectly escaping the id and replaying the wrong mapping. Pull request #42011
- Fixed multicursor to properly capture Visual selections produced by Lua mappings instead of treating them as fed keys. Pull request #41999
- Added support for coloring extra cursors via Kitty protocol shapes 30/40 when terminal supports it, displaying MCursor colors distinctly from the primary cursor. Pull request #41935
- Fixed diff-mode 'do'/'dp' commands to capture atoms properly and support dot-repeat, resolving issues where the operator was cleared before capture. Pull request #41982
- Fixed multicursor visual 'gv' reselection and change-marks to have per-cursor behavior instead of using only primary cursor's region. Pull request #41988
- Fixed multicursor empty insert-session adding unnecessary no-op undo-state entries that required extra undo operations. Pull request #41979
- Fixed display width calculation for spacing marks like Thai SARA AM, which need their own cell instead of stacking on preceding characters. Pull request #41821
- Optimized highlight performance by computing only bounds for characterwise and linewise highlights instead of segments for every line. Pull request #41927
- Fixed ':helptags' to follow link files, resolving E151 errors when help tags include symlinks. Pull request #42008
- Fixed empty 'filetype' being set after ':restart', which prevented ':setfiletype' from working correctly. Pull request #41958
Why it matters
Multicursor functionality received substantial fixes for mapping replay, visual selection, and undo behavior that improve correctness. Display improvements handle spacing marks and terminal cursor colors better. Several vim-patch syncs bring upstream improvements to regex performance, folding efficiency, and syntax highlighting.
Changelog entry
- fix(multicursor): replay of Lua mapping-id ending in "0" Pull request #42011
- fix(multicursor): selection by API/Lua from mapping Pull request #41999
- feat(multicursor): color extra cursors via Kitty protocol shapes 30/40 Pull request #41935
- fix(cmdatom)!: diff-mode "do"/"dp" not captured properly Pull request #41982
- fix(multicursor): visual
gv, change-marks'[,']Pull request #41988 - fix(multicursor): empty insert-session adds a no-op undo-state Pull request #41979
- fix(mbyte): spacing marks need their own display cell Pull request #41821
- perf(highlight): compute only bounds for non-blockwise highlights Pull request #41927
- fix: follow link files in :helptags Pull request #42008
- fix(filetype): empty 'filetype' skips
:setfiletypePull request #41958
Week 40: multicursor fixes for mapping replay and visual selection, improved cursor colors via Kitty protocol, spacing mark display fixes, and upstream vim-patch syncs for regex and folding performance.
This week's updates focus on multicursor reliability and display quality. Fixed critical issues where Lua mappings in multicursor mode replayed incorrectly when IDs ended in '0', and where Visual selections weren't properly captured across cursors. Added Kitty protocol support for distinctive MCursor colors. Also fixed spacing mark display width (e.g., Thai characters) and optimized highlight computation for large selections. Multiple upstream vim-patches improve regex performance and folding efficiency.