This is a maintenance release. FEATURES -------------------------------------------------------------------------------- -ebc6c38cdelsp: update LSP healthcheck format (#28988) BUILD -------------------------------------------------------------------------------- -ba90b54301deps: drop unused bundled bash, python parsers and queries -803cc08c17deps: bump tree-sitter-c to v0.21.3 -91e337a477deps: bump tree-sitter-query to v0.4.0 -978b63a9f1deps: bump tree-sitter-vimdoc to v3.0.0 -b322c3560b"popcount" name conflict on NetBSD #28983 -b397b5672cremove -O2 from gen_cflags -f77db12995reuse code for deps.txt for both deps and main build -46d2906332macos: disable deduplication in link step FIXES -------------------------------------------------------------------------------- -70f7708cdfassert failure in VimL expression parser -28f03205beshow swapfile warning as a warning (#28972) -0d293e4315api: alloc and draw cursor window in nvim__redraw -e1b6187801colorscheme: underline StatusLineNC with 'notermguicolors' #28810 -aa1321801dcolumn: clamp line number for legacy signs -df6ce8377fcolumn: crash with 'signcolumn' set to "number" (#29003) -97be9d8563column: modifying a sign should update placed signs (#29750) -21b21b94e6comment: fall back to using trimmed comment markers (#28950) -0827279ff5defaults: default @/Q broken when 'ignorecase' is set (#29343) -5d9f2d7eccdrawline: don't draw beyond end of window (#29035) -eadc4e03a2drawline: don't draw beyond end of window with 'rnu' (#29406) -bec397eddaextmarks: issues with revalidating marks #28961 -1fe1f8556efiletype: fix typos in filetype detection -ad55ec350cfloat: handle error in win_float_create() (#29742) -bf16fe3f01fs: make vim.fs.root work for relative paths and unnamed buffers (#28973) -5eaae797afhealth: broken ruby detect #28804 -24ee2e7c74health: fix fetching url with python in provider health (#29594) -7582d4a7b5input: handle vim.on_key() properly with ALT and K_SPECIAL (#29677) -4f0c4c3921lsp: add textDocument/documentLink to capability map (#28838) -2d7aab623elsp: avoid vim.keymap.del error when stopping a client (#29478) -bdd5871dc5lsp: check if buffer was detached in on_init callback (#28942) -d8ff216040lsp: clear lsp client diagnostics (#29091) -3a727beafdlsp: detach all clients on_reload to force buf_state reload (#28898) -e98637e8c0lsp: do not detach from buffer if there are uninitialized clients (#29043) -0ee3147bc7lsp: do not reset buf version when detaching client (#29273) -24fa65a500lsp: don't show codelens for buffers that don't support it (#29690) -4efca7cda5lsp: handle nil root_dir in health check (#29010) -efe8a0a520lsp: hide layout in codelenses in virtual text (#28794) (#28895) -2fb69ccaf7lsp: inlay hints are rendered in the correct order (#29707) -dfff482efelsp: remove superfluous on_detach callback from semantic tokens module (#29188) -10a16c1311lsp: trigger LspDetach on buffer delete -33121f1eaelua: change some vim.fn.expand() to vim.fs.normalize() (#29583) -ffc457a1dcmarks: revalidate marks whose position did not change -f82d7b8200mouse: early return when clicking in padded 'statuscolumn' (#29394) -d6756fc0a5move: half-page scrolling with resized grid at eob (#28821) -0cf7e2570cpath: avoid chdir() when resolving path (#28799) -63ff7338eaquickfix: make shortmess+=O work with cmdheight=0 (#29609) -46c2962b3aruntime: add commentstring for glsl ftplugin -b98aa783f3runtime: source c ftplugin properly for cpp on Windows (#29053) -039121f5a3snippet: cancel snippet session when leaving the buffer (#29044) -84d7bfcf16snippet: don't override unnamed register on tabstop select (#29008) -e13f03af85snippet: modify base indentation when there's actually whitespace (#29670) -9fd6664ba7tohtml: extmark text may be out of bounds -8c88f402e1tohtml: ignore lsp inlay hints -5cdf0c22bdtohtml: properly handle multiple hl groups #29012 -3d319092d5tohtml: replace ipairs with pairs -4150e5e6fdtohtml: show how many warnings are hidden -0389472961tohtml: support ranges again -ab2d243fd0treesitter: display fields for anonymous nodes in :InspectTree -35f6425207treesitter: do not modify highlight state for _on_spell_nav -356ddb1305treesitter: ensure syntaxset augroup exists (#29542) -eb53aba5aftreesitter: recognize aliased parsers in omnifunc, query linter -b6b2272573tui: move $COLORTERM check to _defaults.lua (#29206) -89f29fcc92tui: remove duplicate disabling of synchronized output (#28884) -a784b901betui: skip TUI in ui_rgb_attached (#29096) -19787d6057ui: avoid ambiguity about last chunk when flushing halfway (#29718) -89fa1ee822ui: flush ext_cmdline events before doing cmdpreview (#29062) -7055cd1238ui: superfluous showmode / excessive grid_cursor_goto #29089 -6802db7aa1version: fix vim.version().prerelease -728f6c7c83vim.text: remove assert from vim.text.hexdecode -c3aef56199win-msi: add bin to PATH per-machine after installation (#29099) VIM PATCHES -------------------------------------------------------------------------------- -fdf769fa860b74eec: runtime(stylus): remove remaining css code (vim/vim#14866) -29fd7432fd74703f1: runtime(doc): remove obsolete Ex insert behavior (#29702) -891cc781797a85e34: runtime(doc): fix inconsistencies in :h file-searching (#29652) -704d33634e8.2.0083: text properties wrong when tabs and spaces are exchanged -571e54e12c8.2.0109: corrupted text properties when expanding spaces -7c055bd74b8.2.3388: fnamemodify('path/..', ':p') differs from using 'path/../' (#29667) -9c91233a389.1.0414: Unable to leave long line with 'smoothscroll' and 'scrolloff' -34cc49bd729.1.0498: getcmdcompltype() interferes with cmdline completion (#29397) -259a620eb89.1.0512: Mode message for spell completion doesn't match allowed keys (#29437) -f89d4ee6ce9.1.0526: Unwanted cursor movement with pagescroll at start of buffer (#29569) -4ce293c2c39.1.0565: Stop directory doesn't work properly in 'tags' -c467bfeb939.1.0566: Stop dir in findfile() doesn't work properly w/o trailing slash -576363a0fb9.1.0567: Cannot use relative paths as findfile() stop directories -ceb82a93969.1.0569: fnamemodify() treats ".." and "../" differently (#29673) -07de890de69.1.0580: :lmap mapping for keypad key not applied when typed in Select mode (#29693) -b01202df159.1.0594: Unnecessary redraw when setting 'winfixbuf' (#29775) -804a94d3009.1.0601: Wrong cursor position with 'breakindent' when wide char doesn't fit (#29793) -a03cc83bfbdf62c62: runtime(doc): grammar fixes in options.txt (#29729) -fde5718e62partial:9.0.0323: using common name in tests leads to flaky tests REDACTOR -------------------------------------------------------------------------------- -c35e040b7ereplace deprecated vim.loop with vim.uv -3a354bfcaalsp: reuse buf_detach_client logic in on_detach (#28939) (#29024) -dffadc392epath.c: add nonnull attributes (#28829) -db65017e60tests: more global highlight definitions -3725db69eftests: use more global highlight definitions CI -------------------------------------------------------------------------------- -7400f9dfe5adjust workflows to enable required checks -575136c178always add `target:release` label when backporting -410f43c0aebump backport action to version 3 -9a2760a01fchange label `backport` to `target:release` -b94b341ef2run workflows on release branches -0e81c62405skip lintcommit workflow on release branches TESTING -------------------------------------------------------------------------------- -f03348472dadd a test for #29119 -18a36d3d9fdo not set termguicolors in test runner -68513c2a89fix reporting "no flush received" too early (#29735) -981548b7f7remove checks for failed tests on Windows -65776124b1starting and stopping treesitter highlight (#29546) DOCUMENTATION -------------------------------------------------------------------------------- -891b235df0document 'list' behavior when 'listchars' excludes "tab" (#29360) -8c00651131fix more treesitter parsing errors -777e15fa61update LSP quickstart (#28989) -6136326d63lpeg: merge upstream changes -f7d8650616lsp: format the handwritten part #29295
Neovim is a project that seeks to aggressively refactor Vim in order to:
- Simplify maintenance and encourage contributions
- Split the work between multiple developers
- Enable advanced UIs without modifications to the core
- Maximize extensibility
See the Introduction wiki page and Roadmap for more information.
Features
- Modern GUIs
- API access from any language including C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java/Kotlin, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust
- Embedded, scriptable terminal emulator
- Asynchronous job control
- Shared data (shada) among multiple editor instances
- XDG base directories support
- Compatible with most Vim plugins, including Ruby and Python plugins
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 helplists all build targets.build/CMakeCache.txt(orcmake -LAH build/) contains the resolved values of all CMake variables.build/compile_commands.jsonshows 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 for details.
Vim is Charityware. You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda. Please see the
kcc section of the vim docs or visit the ICCF web site, available at these URLs:
https://iccf-holland.org/
https://www.vim.org/iccf/
https://www.iccf.nl/
You can also sponsor the development of Vim. Vim sponsors can vote for
features. The money goes to Uganda anyway.
