This is a maintenance release, focusing on bug fixes. Some enhancements related to vim.lsp.enable are also included. FEATURES -------------------------------------------------------------------------------- -4e43264cd3
lsp: vim.lsp.is_enabled() #33703 -c4b9bdbdf4
lsp: start/stop LSPs as necessary during vim.lsp.enable() #33702 -216c56b7e0
lsp: detach LSP clients when 'filetype' changes #33707 -533ec6d492
lsp: `root_markers` can control priority -ad7211ac8f
checkhealth: trigger FileType event after showing report -f25f6c8d13
health: summary in section heading #33388 FIXES -------------------------------------------------------------------------------- -710d561f88
lsp: don't eagerly enable LSP configs during startup #33762 -0ed06d7271
lsp: check if client is stopping before reuse #33796 -f184c562c5
lsp: detect if Client:request resolved synchronously #33624 -b868257ef9
lsp: fix error with InsertReplaceEdit events #33973 -6b69b3217b
lsp: improper diagnostic end_col computation -e512c9589e
lsp: improve error completion message #33812 -47686a1454
lsp: only auto-detach lsp.config clients #33834 -901eeeb2e6
lsp: use `bufnr` when getting clients in `symbols_to_items` (#33760) -a242902430
:print: don't use schar_from_ascii() for illegal byte (#34046) -4b6caa913c
cmdline: do not move UI cursor when entering cmdline #33729 -fd8e0ae62d
decor: extmark highlight not applied (#33858) -81233a41d7
display: adjust setting winline info for concealed lines (#33717) -4cb2b19197
folds: adjust filler text drawing for transparent folds -bdd8498ed7
folds: avoid unnecessary loop with horizontal scrolling (#33932) -32842b0ee3
health: checkhealth float opens extra empty buffer #33648 -dc87a0d80a
lua: vim.validate `message` param #33675 -334d8f506f
move: consume skipcol before revealing filler lines (#34143) -6a87b57c06
runtime: 'includeexpr' with non-Nvim-style Lua modules #33867 -2b2a3449f7
runtime: conceal paths in help, man ToC loclist #33764 -3db39ed21f
runtime: cpoptions is reset in Lua file #33671 -cefc91a82e
system: don't treat NUL at start as no input (#34167) -8daffd0cbb
terminal: check size when switching buffers -0db89468d7
termkey: out-of-bounds write in array #33868 -6563c6bde7
treesitter: close `:InspectTree` with `q` -5c6ee251a6
treesitter: eliminate flicker for single windows #33842 -3b3cf1d7ef
treesitter: invalidate conceal_lines marks (#33832) -58460e2d52
treesitter: parser metadata annotations -034d3c8f6c
treesitter: proper tree `contains()` logic with combined injections -560c6ca947
trust: support for trusting directories #33735 -12ae7aa846
tui: clear primary device callback before invoking it (#34032) -4296511087
tui: don't process UI events when suspending or stopping (#33710) -cf73f21c07
tui: don't try to add unsupported modifiers (#33799) -465c181581
tui: forward C0 control codes literally (#33759) -0c2bf55e90
tutor: l:lang is undefined -3a0d37681f
vim.system: improve error message when cwd does not exist -9b3426691c
window: skip unfocusable and hidden floats with "{count}<C-W>w" #33810 VIM PATCHES -------------------------------------------------------------------------------- -9965cfb84c
9.1.1361: [security]: possible use-after-free when closing a buffer (#33820) -3c102303f5
9.1.1375: [security]: possible heap UAF with quickfix dummy buffer -1921dda92e
3704b5b: runtime(tutor): improve tutor.vim plugin and filetype plugin -4e5af2f5a6
5a8f995: runtime(doc): remove outdated Contribution section in pi_tutor (#34094) -3273c595c0
829eda7: runtime(new-tutor): update tutor and correct comandline completion -3e83a33108
9.1.1297: Ctrl-D scrolling can get stuck #33453 -6417ba0c2f
9.1.1376: quickfix dummy buffer may remain as dummy buffer -30fa1c5f8c
9.1.1380: 'eventignorewin' only checked for current buffer -6b140ae899
9.1.1384: still some problem with the new tutors filetype plugin -f623fad9c4
9.1.1385: inefficient loop for 'nosmoothscroll' scrolling (#33992) -d50f71d2f1
9.1.1387: memory leak when buflist_new() fails to reuse curbuf -27abf5c81b
9.1.1388: Scrolling one line too far with 'nosmoothscroll' page scrolling (#34023) -917f496f75
9.1.1395: search_stat not reset when pattern differs in case (#34058) -b07bffdc47
9.1.1402: multi-byte mappings not properly stored in session file (#34131) -ff83c712cf
9.1.1405: tests: no test for mapping with special keys in session file (#34146) -d1ca551983
9.1.1407: Can't use getpos('v') in OptionSet when using setbufvar() (#34177) DOCUMENTATION -------------------------------------------------------------------------------- -e5e69f758d
add missing change to getcharstr() signature (#33797) -95ee908c40
backport #33549 and #33524 to 0.11 (#33678) -472d41b5b6
default mappings #33706 -3a4d3934c4
fixups (#33815) -fa292e6f61
lsp, emoji, startup #33683 -714622fb45
lsp, lua #33682 -d68d212ad4
provide example_init.lua #33524 -968947b3c3
lua: typing for vim.fn.winlayout #33817 -e304677993
tutor: move lesson 7.2 below lesson 7.3 #33662
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.