Justin M. Keyes 4b35336f6f NVIM v0.12.2
Following is a list of commits (fixes/features only) in this release.
See `:help news` in Nvim for release notes.

BREAKING
--------------------------------------------------------------------------------
- c76bbd0a54 diagnostics: restore `is_pull` namespace argument #38698
- 0a3add979a vim.pos: require `buf` param on vim.pos, vim.range #38665

REVERTED CHANGES
--------------------------------------------------------------------------------
- 5920a1d07f "fix(lsp): only resolve LSP configs once" #38990

BUILD
--------------------------------------------------------------------------------
- 26bcffda6c gen_char_blob.lua: "bad argument to format" if path contains "%" #39274

FEATURES
--------------------------------------------------------------------------------
- e767b4843b editor: ZR performs :restart #38967
- 6b86f5520d connect: filepath completion #38959
- ceaa8b648a filetype: `vim.filetype.inspect()` returns copy of registry
- 78234f2d54 vim.version: add __eq to vim.VersionRange #38881

FIXES
--------------------------------------------------------------------------------
- a7214c0719 don't make path empty when truncating trailing slashes (#38844)
- b3b5674ac7 :restart: --listen reusage on windows #39281
- 3e0ece4cde :restart: avoid ERR/WRN logging on Windows with --listen (#39287)
- eaa8cff0bd api: expose fg_indexed/bg_indexed in nvim_get_hl (#39240)
- 8669e34bba api: nvim_clear_autocmds() "event" type check
- 4053141cb3 api: nvim_get_hl drops groups defined with link_global #38492
- 319c031820 channel: fix Ctrl-C handling regression in terminal
- ba3de79ccb cmd: ++p, ++edit should match "word" boundary #39146
- c6c348471d cmdline: 'inccommand' preview after setcmdline() #38795
- 9e1c542b55 cmdline: avoid 'incsearch' recursion after redraw #39303
- 4a18c05f87 cmdline: avoid Ex-mode NULL cmdline_block event #39043
- e4dc08da1a completion: update CursorColumn during completion (#39159)
- 25170ca02d diagnostic: virtual_lines should anchor at end_lnum, not lnum #38701
- 6cb5012e36 difftool: ensure standardized locale for diff output parsing #38853
- 9966afbc9d drawline: hang while redrawing diff filler above fold #39219
- 1ebb9b16d2 eval: crash on some NULL ptr deref #39182
- 6ae6cf5d61 float: don't unload 'hidden' float buffer with :close! (#39304)
- d86d9759e5 gf: handle local `file:` URI paths #38915
- 11a4a0077c health: recognize Zig build optimization levels #38804
- 36bade7efb highlight: preserve inherited colors when update=true breaks links #38750
- 7ffee0dfbf lsp: apply_text_edits causes unwanted BufDelete events #38778
- df726644b8 lsp: check filetype registry in health (#38885)
- 18b1ff81a3 lsp: check stale context in hover/signature callback #38724
- fe09c71c34 lsp: send didOpen on save to all clients+groups #37454
- 34cbfeca9c lsp: show CompletionItem.detail in info popup #38904
- 6250019537 lsp: show_document can't position cursor past EOL in insert-mode #38566
- 5907307662 lsp: skip codelens refresh redraw for deleted buffer #39193
- 9aadbed770 lua: make `vim._with()` work with `buf=0` and `win=0` context #39151
- 0039785724 lua: make vim.deep_equal cycle-safe
- 53038d2c38 lua: not obvious which _meta/ files are generated #39035
- f2a5c90cbc marks: adjust marks when unloading "nofile" buffer #39118
- a358b9be64 message: flush messages before "empty" msg_show #38854
- 1b36b75832 messages: truncate warning messages only in display (#38901)
- f7e3cf127c move: avoid integer overflow with large 'scrolloff' (#39251)
- 452a9b895c normal: pass count to 'keywordprg' as arg1 #38965
- 4d4e196447 options: default 'titlestring' shows CWD #39233
- 6583833ee2 pack: GIT_DIR/GIT_WORK_TREE env vars may interfere #39279
- df3d7e36d0 pack: make 'stash' call compatible with older Git #38679
- 1a5d41a48f pack: more advice for out-of-sync lockfile #38931
- ca0e3818c0 pum: crash with 'pumborder' and wide item (#38852)
- 38be4475c6 pum: info float width grows on reselect with 'linebreak' #38680
- eee2d10fd2 rpc: trigger UILeave earlier on channel close (#38846)
- 898ccbc68a smoothscroll: crash when resizing to textoff with showbreak
- 5ac95da8ea statusline: no window-local highlights for last line 'ruler' #38879
- ffb0ebb752 substitute: don't crash with very large count (#39272)
- abcc5342ee terminal: do not reflow altscreen on resize #39024
- d3ef77639a terminal: forward streamed bracketed paste properly (#39152)
- 111c7f434e treesitter: TSNode:id() with NUL byte causes unreliable select()  #39134
- 2ea9ed32e4 treesitter: restore highlighting on 32 bit systems #39091
- c294bc397b tui: check background color on resume
- b08c289a45 ui2: dialog paging is inconsistent #39128
- c6b5eb30de ui2: don't dismiss expanded messages for non-typed key #39247
- c6578ea28b vim.filetype: match() fails if g:ft_ignore_pat is not defined #39158
- a15e27fbcf vim.pos: Range:intersect() drops `buf` #38898

VIM PATCHES
--------------------------------------------------------------------------------
- 27214645f6 450895d: runtime(make): fix wrong highlighting with $ inside double quotes (#39177)
- 891c6c9150 8.2.2440: documentation based on patches is outdated (#39144)
- e203257fff 9.2.0331: spellfile: stack buffer overflows in spell file generation (#38948)
- 8ba79b4601 9.2.0345: Wrong autoformatting with 'autocomplete' (#39060)
- 9c11229832 9.2.0357: [security]: command injection via backticks in tag files (#39102)
- 5153006747 9.2.0364: tests: test_smoothscroll_textoff_showbreak() fails
- 187a34d59b 9.2.0380: completion: a few issues in completion code (#39264)
- 15d824e5d6 9.2.0385: Integer overflow with "ze" and large 'sidescrolloff' (#39289)
- 19a54ad964 e666597: runtime(doc): make window option description a bit less vague (#39173)
- d672f0f494 partial:9.2.0348: potential buffer underrun when setting statusline like option (#39063)

OTHER
--------------------------------------------------------------------------------
- ed47b27ad4 feat(api): rename buffer to buf (#38899)
- 570d8fd128 feat(api): rename buffer to buf in retval #39015
- 15991abaa7 feat(events): trigger MarkSet autocmd in :delmarks (#39218)
- b6a3ad3979 fix(ui2): ensure msg window is visible after closing tab (#39245)
- 099489b985 refactor: update usages of deprecated "buffer" param #39090
- 55d3d1bbeb test(lsp): extract buf/util parts from lsp_spec.lua (#39170)
2026-04-22 16:05:55 +02:00
2026-04-20 11:46:26 +00:00
2026-04-22 16:05:55 +02:00
2026-03-20 23:30:09 +01:00
2025-12-30 01:44:52 -05:00
2026-01-05 16:34:51 -08:00
2026-03-13 12:29:44 +00:00
2026-04-22 16:05:55 +02:00
2025-01-11 10:34:12 +01:00
2026-03-16 14:52:03 +01:00
2026-04-19 12:36:19 +00:00
2026-03-11 18:00:18 +01:00
2026-03-11 18:00:18 +01:00
2026-04-17 00:58:50 +00:00

Neovim

Documentation | Chat

Coverity Scan analysis Packages Debian CI Downloads

Neovim is a project that seeks to aggressively refactor Vim in order to:

See the Introduction wiki page and Roadmap for more information.

Features

See :help nvim-features for the full list, and :help news for noteworthy changes in the latest version!

Install from package

Pre-built packages for Windows, macOS, and Linux are found on the Releases page.

Managed packages are in Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux, Gentoo, and more!

Install from source

See BUILD.md and supported platforms for details.

The build is CMake-based, but a Makefile is provided as a convenience. After installing the dependencies, run the following command.

make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

To install to a non-default location:

make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/full/path/
make install

CMake hints for inspecting the build:

  • cmake --build build --target help lists all build targets.
  • build/CMakeCache.txt (or cmake -LAH build/) contains the resolved values of all CMake variables.
  • build/compile_commands.json shows the full compiler invocations for each translation unit.

Transitioning from Vim

See :help nvim-from-vim for instructions.

Project layout

├─ cmake/           CMake utils
├─ cmake.config/    CMake defines
├─ cmake.deps/      subproject to fetch and build dependencies (optional)
├─ runtime/         plugins and docs
├─ src/nvim/        application source code (see src/nvim/README.md)
│  ├─ api/          API subsystem
│  ├─ eval/         Vimscript subsystem
│  ├─ event/        event-loop subsystem
│  ├─ generators/   code generation (pre-compilation)
│  ├─ lib/          generic data structures
│  ├─ lua/          Lua subsystem
│  ├─ msgpack_rpc/  RPC subsystem
│  ├─ os/           low-level platform code
│  └─ tui/          built-in UI
└─ test/            tests (see test/README.md)

License

Neovim contributions since b17d96 are licensed under the Apache 2.0 license, except for contributions copied from Vim (identified by the vim-patch token). See LICENSE.txt for details.

S
Description
Vim-fork focused on extensibility and usability
Readme 443 MiB
Languages
Vim Script 40.3%
Lua 31.8%
C 27%
CMake 0.4%
Zig 0.2%
Other 0.1%