This is a maintainance release. FEATURES -------------------------------------------------------------------------------- -a3f9bd7f79
jumplist: allow opting out of removing unloaded buffers (#30419) FIXES -------------------------------------------------------------------------------- -be831a725d
api: error properly with invalid field in nvim_open_win (#30078) -9b4e7c9a0d
api: fix crash/leak with float title/footer on error (#30543) -26b72b0f91
api: nvim_buf_get_text() crashes with large negative column #28740 -e537379641
channel: handle writing to file instead of pipe (#30520) -1fc09b0738
column: set signcolumn width after splitting window (#30556) -5cb3505ab8
completion: don't include <Lua function> in -complete= (#30209) -40671f18f7
decor: don't use separate DecorSignHighlight for url (#30096) -95c3fd4dc0
decor: exclude invalid marks from meta total -21157459fe
diagnostics: don't apply extmarks to invalid lines #29321 -f31e29fce4
diff: use mmfile_t in linematch -3a23149cfc
filetype: handle .in files with no filename (#30487) -045afa9e8a
float: properly find last window of tabpage (#30571) -006fd0304c
health: fix pyenv root and python exepath detect issue -1e1e4066b1
health: return correct name from 'path2name()' -339067ab7e
lsp: avoid reusing diagnostics from different servers in actions (#30002) -5955ef0ba8
lsp: don't send foreign diagnostics to servers in buf.code_action (#29501) -e13564b9f4
lsp: handle encoding bounds in str_utfindex_enc -f3675337f0
lsp: handle nil bytes in strings -b55435f438
lsp: handle out-of-bounds character positions #30288 -d593b20017
lsp: return call hierarchy item, not the index (#30145) -fa4bd6994d
lua: ignore stdout and stderr for xdg-open -7284400a34
man: avoid setting v:errmsg (#30052) -d000c56373
man: check if buffer is valid before restoring 'tagfunc' (#30180) -b18538527e
regexp: fix typo in E888 error message (#30161) -ef05c514aa
runtime: add remaining missing commentstrings (#30252) -7e15526dd2
runtime: sync bundled treesitter queries -ad393c1fc1
runtime: sync bundled treesitter queries -316fa168a1
terminal: interrupt/got_int hangs terminal (#30094) -c9d7ad4a34
treesitter: EditQuery shows swapfile ATTENTION #30536 -a6b2233c3e
treesitter: escape things like `"` in omnifunc results -68a2259804
treesitter: indent size for inspect_tree #28727 -ba47b440fd
treesitter: lint top-level anonymous nodes -ee57bb5a8e
tui: reset active attr ID when OSC 8 sequence is terminated (#29960) -bce2364f60
tui: set id parameter in OSC 8 sequences (#29847) -4ad864dd09
version: return nil with empty string -d63d379eec
vim.ui.open: prefer xdg-open on WSL #30302 -1f58e27600
win-msi: set installer scope to machine #29895 -28fba3bf27
window: making float with title/footer non-float leaks memory (#30551) -2f3c447605
window: respect hide flag of float windows when switching (#30507) -6a44055a71
fix(vim.fs): dirname() returns "." on mingw/msys2 (#30484) VIM PATCHES -------------------------------------------------------------------------------- -797f524337
7c8bbc6: runtime(doc): use mkdir -p to save a command -7550947157
9.0.2149: [security]: use-after-free in exec_instructions() -771b3a52c5
9.0.2158: [security]: use-after-free in check_argument_type -a0a95edb2d
9.1.0638: E1510 may happen when formatting a message for smsg() (#29907) -1fda01fa55
9.1.0647: [security] use-after-free in tagstack_clear_entry -05e72488b9
9.1.0648: [security] double-free in dialog_changed() -2e1f656eb7
9.1.0653: Patch v9.1.0648 not completely right -eec37b6e6b
9.1.0666: assert_equal() doesn't show multibyte string correctly (#30018) -9f8a5cd022
9.1.0667: Some other options reset curswant unnecessarily when set (#30020) -1ed493cc96
9.1.0694: matchparen is slow on a long line (#30134) -974447bfc3
9.1.0707: [security]: invalid cursor position may cause a crash (#30204) -886a8b62c5
9.1.0716: resetting setcellwidth() doesn't update the screen (#30274) -260ac4b3a2
9.1.0728: [security]: heap-use-after-free in garbage collection with location list user data -b4824edac1
9.1.0729: Wrong cursor-screenline when resizing window -4abd480e8f
9.1.0730: Crash with cursor-screenline and narrow window -687c0078c2
9.1.0753: Wrong display when typing in diff mode with 'smoothscroll' (#30614) -8611f4dcf0
b584117: runtime(doc): buffers can be re-used (#30300) -b5a2d52a36
e2c4e07: runtime(doc): Update :help :command-complete list -ca6f8ee267
ecd642a: runtime(doc): clarify, that register 1-9 will always be shifted (#29476) REFACTOR -------------------------------------------------------------------------------- -6aba2f3944
move some functions out of eval.c (#29964) BUILD SYSTEM -------------------------------------------------------------------------------- -8d842a301c
add quotes around `CMAKE_GENERATOR` variable -e63e0a2e06
make makefile work on windows -1db8824fbc
remove nix flakes (#28863) -53e37391e8
silence "po" noise #30469 -983482626d
work around bug in make when PATH includes cmake as dir -50a021e653
"Makefile: use pattern rules for build/.deps (#10366)" CI -------------------------------------------------------------------------------- -b020b66005
add `needs:backport` label on backport PRs with conflict -9d7711a732
don't add reviewers for PRs created by a bot -6f34f07a31
enable automerge by default when backporting -2c95d48083
remove "skip ci" tag -d585f3103d
skip automerge step if backport failed -b65e978a23
update labeler configuration and add reviewers TESTING -------------------------------------------------------------------------------- -d535482ab2
api/buffer_updates_spec: prevent flakiness (#30521) -6a0d1eee46
api/window_spec: remove duplicate test (#30538) -61b0816790
health: "test_plug/health/init.lua" completes as "test_plug" -2a8d80a442
tui_spec: prevent another case of race between paste and input (#30481) DOCUMENTATION -------------------------------------------------------------------------------- -b380a8fe21
remove mention of removed parsers -c7e943a181
eval: fix wrong return type of getcharsearch() (#30176) -c2625b6fad
treesitter: don't quote metadata
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.