This is a maintenance release. FEATURES -------------------------------------------------------------------------------- -ebc6c38cde
lsp: update LSP healthcheck format (#28988) BUILD -------------------------------------------------------------------------------- -ba90b54301
deps: drop unused bundled bash, python parsers and queries -803cc08c17
deps: bump tree-sitter-c to v0.21.3 -91e337a477
deps: bump tree-sitter-query to v0.4.0 -978b63a9f1
deps: bump tree-sitter-vimdoc to v3.0.0 -b322c3560b
"popcount" name conflict on NetBSD #28983 -b397b5672c
remove -O2 from gen_cflags -f77db12995
reuse code for deps.txt for both deps and main build -46d2906332
macos: disable deduplication in link step FIXES -------------------------------------------------------------------------------- -70f7708cdf
assert failure in VimL expression parser -28f03205be
show swapfile warning as a warning (#28972) -0d293e4315
api: alloc and draw cursor window in nvim__redraw -e1b6187801
colorscheme: underline StatusLineNC with 'notermguicolors' #28810 -aa1321801d
column: clamp line number for legacy signs -df6ce8377f
column: crash with 'signcolumn' set to "number" (#29003) -97be9d8563
column: modifying a sign should update placed signs (#29750) -21b21b94e6
comment: fall back to using trimmed comment markers (#28950) -0827279ff5
defaults: default @/Q broken when 'ignorecase' is set (#29343) -5d9f2d7ecc
drawline: don't draw beyond end of window (#29035) -eadc4e03a2
drawline: don't draw beyond end of window with 'rnu' (#29406) -bec397edda
extmarks: issues with revalidating marks #28961 -1fe1f8556e
filetype: fix typos in filetype detection -ad55ec350c
float: handle error in win_float_create() (#29742) -bf16fe3f01
fs: make vim.fs.root work for relative paths and unnamed buffers (#28973) -5eaae797af
health: broken ruby detect #28804 -24ee2e7c74
health: fix fetching url with python in provider health (#29594) -7582d4a7b5
input: handle vim.on_key() properly with ALT and K_SPECIAL (#29677) -4f0c4c3921
lsp: add textDocument/documentLink to capability map (#28838) -2d7aab623e
lsp: avoid vim.keymap.del error when stopping a client (#29478) -bdd5871dc5
lsp: check if buffer was detached in on_init callback (#28942) -d8ff216040
lsp: clear lsp client diagnostics (#29091) -3a727beafd
lsp: detach all clients on_reload to force buf_state reload (#28898) -e98637e8c0
lsp: do not detach from buffer if there are uninitialized clients (#29043) -0ee3147bc7
lsp: do not reset buf version when detaching client (#29273) -24fa65a500
lsp: don't show codelens for buffers that don't support it (#29690) -4efca7cda5
lsp: handle nil root_dir in health check (#29010) -efe8a0a520
lsp: hide layout in codelenses in virtual text (#28794) (#28895) -2fb69ccaf7
lsp: inlay hints are rendered in the correct order (#29707) -dfff482efe
lsp: remove superfluous on_detach callback from semantic tokens module (#29188) -10a16c1311
lsp: trigger LspDetach on buffer delete -33121f1eae
lua: change some vim.fn.expand() to vim.fs.normalize() (#29583) -ffc457a1dc
marks: revalidate marks whose position did not change -f82d7b8200
mouse: early return when clicking in padded 'statuscolumn' (#29394) -d6756fc0a5
move: half-page scrolling with resized grid at eob (#28821) -0cf7e2570c
path: avoid chdir() when resolving path (#28799) -63ff7338ea
quickfix: make shortmess+=O work with cmdheight=0 (#29609) -46c2962b3a
runtime: add commentstring for glsl ftplugin -b98aa783f3
runtime: source c ftplugin properly for cpp on Windows (#29053) -039121f5a3
snippet: cancel snippet session when leaving the buffer (#29044) -84d7bfcf16
snippet: don't override unnamed register on tabstop select (#29008) -e13f03af85
snippet: modify base indentation when there's actually whitespace (#29670) -9fd6664ba7
tohtml: extmark text may be out of bounds -8c88f402e1
tohtml: ignore lsp inlay hints -5cdf0c22bd
tohtml: properly handle multiple hl groups #29012 -3d319092d5
tohtml: replace ipairs with pairs -4150e5e6fd
tohtml: show how many warnings are hidden -0389472961
tohtml: support ranges again -ab2d243fd0
treesitter: display fields for anonymous nodes in :InspectTree -35f6425207
treesitter: do not modify highlight state for _on_spell_nav -356ddb1305
treesitter: ensure syntaxset augroup exists (#29542) -eb53aba5af
treesitter: recognize aliased parsers in omnifunc, query linter -b6b2272573
tui: move $COLORTERM check to _defaults.lua (#29206) -89f29fcc92
tui: remove duplicate disabling of synchronized output (#28884) -a784b901be
tui: skip TUI in ui_rgb_attached (#29096) -19787d6057
ui: avoid ambiguity about last chunk when flushing halfway (#29718) -89fa1ee822
ui: flush ext_cmdline events before doing cmdpreview (#29062) -7055cd1238
ui: superfluous showmode / excessive grid_cursor_goto #29089 -6802db7aa1
version: fix vim.version().prerelease -728f6c7c83
vim.text: remove assert from vim.text.hexdecode -c3aef56199
win-msi: add bin to PATH per-machine after installation (#29099) VIM PATCHES -------------------------------------------------------------------------------- -fdf769fa86
0b74eec: runtime(stylus): remove remaining css code (vim/vim#14866) -29fd7432fd
74703f1: runtime(doc): remove obsolete Ex insert behavior (#29702) -891cc78179
7a85e34: runtime(doc): fix inconsistencies in :h file-searching (#29652) -704d33634e
8.2.0083: text properties wrong when tabs and spaces are exchanged -571e54e12c
8.2.0109: corrupted text properties when expanding spaces -7c055bd74b
8.2.3388: fnamemodify('path/..', ':p') differs from using 'path/../' (#29667) -9c91233a38
9.1.0414: Unable to leave long line with 'smoothscroll' and 'scrolloff' -34cc49bd72
9.1.0498: getcmdcompltype() interferes with cmdline completion (#29397) -259a620eb8
9.1.0512: Mode message for spell completion doesn't match allowed keys (#29437) -f89d4ee6ce
9.1.0526: Unwanted cursor movement with pagescroll at start of buffer (#29569) -4ce293c2c3
9.1.0565: Stop directory doesn't work properly in 'tags' -c467bfeb93
9.1.0566: Stop dir in findfile() doesn't work properly w/o trailing slash -576363a0fb
9.1.0567: Cannot use relative paths as findfile() stop directories -ceb82a9396
9.1.0569: fnamemodify() treats ".." and "../" differently (#29673) -07de890de6
9.1.0580: :lmap mapping for keypad key not applied when typed in Select mode (#29693) -b01202df15
9.1.0594: Unnecessary redraw when setting 'winfixbuf' (#29775) -804a94d300
9.1.0601: Wrong cursor position with 'breakindent' when wide char doesn't fit (#29793) -a03cc83bfb
df62c62: runtime(doc): grammar fixes in options.txt (#29729) -fde5718e62
partial:9.0.0323: using common name in tests leads to flaky tests REDACTOR -------------------------------------------------------------------------------- -c35e040b7e
replace deprecated vim.loop with vim.uv -3a354bfcaa
lsp: reuse buf_detach_client logic in on_detach (#28939) (#29024) -dffadc392e
path.c: add nonnull attributes (#28829) -db65017e60
tests: more global highlight definitions -3725db69ef
tests: use more global highlight definitions CI -------------------------------------------------------------------------------- -7400f9dfe5
adjust workflows to enable required checks -575136c178
always add `target:release` label when backporting -410f43c0ae
bump backport action to version 3 -9a2760a01f
change label `backport` to `target:release` -b94b341ef2
run workflows on release branches -0e81c62405
skip lintcommit workflow on release branches TESTING -------------------------------------------------------------------------------- -f03348472d
add a test for #29119 -18a36d3d9f
do not set termguicolors in test runner -68513c2a89
fix reporting "no flush received" too early (#29735) -981548b7f7
remove checks for failed tests on Windows -65776124b1
starting and stopping treesitter highlight (#29546) DOCUMENTATION -------------------------------------------------------------------------------- -891b235df0
document 'list' behavior when 'listchars' excludes "tab" (#29360) -8c00651131
fix more treesitter parsing errors -777e15fa61
update LSP quickstart (#28989) -6136326d63
lpeg: merge upstream changes -f7d8650616
lsp: 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 help
lists all build targets.build/CMakeCache.txt
(orcmake -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 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.