This release represents ~4000 commits since v0.4.4, the previous non-maintenance release. Highlights include builtin support for LSP, new APIs for extended marks (with byte resolution tracking of changes) and buffer decorations, as well as vast improvements to lua as a plugin and configuration language. Experimental support for tree-sitter as a syntax engine is also included, building on the new core APIs for byte tracking and decorations. FEATURES: New API functions: nvim_exec: execute multiline vim script blocks nvim_get_hl_id_by_name: Gets a highight definition by name nvim_exec_lua: new name for nvim_execute_lua nvim_notify: Notify the user with a message nvim_get_runtime_file: Find files in runtime directories nvim_get_all_options_info: Get option information for all options nvim_get_option_info: Get option information for one option nvim_echo: Echo a message with highlights nvim_open_term: Open a virtual terminal in a buffer nvim_chan_send: send data to a channel. (like chansend() but supports lua strings) nvim_set_decoration_provider: callback driven decoration API for a namespace nvim_buf_set_text: Set/replace a character range in a buffer nvim_buf_delete: Delete the buffer. |:bwipeout| nvim_buf_get_extmark_by_id: Returns position for a given extmark id. nvim_buf_get_extmarks: get extmarks in traversal order. nvim_buf_set_extmark: Creates or updates an extmark. nvim_buf_del_extmark: Removes an extmark. nvim_buf_call: call a function with buffer as temporary current buffer nvim_win_hide: Closes the window and hide the buffer it contains |:hide| nvim_win_call: Calls a function with window as temporary current window. New UI events: redraw.screenshot redraw.win_viewport Lua:767cd8b17
#12235 startup: add init.lua as an alternative user config687eb0b39
#14686 feat(startup): Source runtime/plugin/**/*.lua at startup #14686 runtime: allow lua in various runtime search paths such as syntax/ ftdetect/ indent/ ftplugin/ compiler/ colors/43956dea5
#13479 lua: Add vim.opt and fix scopes of vim.o1407899c3
#12268 lua: Add buffer, window and tab accessorsbe662fe5c
lua: vim.wait implementation2b663c061
#14213 viml: embed Lua syntax highlighting901dd79f6
feat: add completion to ':lua' 82688973 lua: complete methods in metatables342148525
runtime: propagate lua parsing errors while using "require"aaca2c1c4
#13276 feat(lua): improve error message to make it actionablec60c7375f
startup: handle autoload and lua packages during startup3ccdbc570
#12536 lua: add vim.register_keystroke_callback971a191c4
lua: Add ability to pass lua functions directly to vimL91e41c857
#12401 lua: add vim.highlight.rangef2894bffb
#12279 lua: Add highlight.on_yankae5bd0454
#11969 lua: add tbl_deep_extendea4127e9a
lua: metatable for empty dict valuedab40f43b
Add v:lua.func() vimL syntax for calling lua678a51b1d
Lua: vim.validate()474d0bcbf
lua: vim.rpcrequest, vim.rpcnotify, vim.NIL8ee7c94a9
lua: add vim.fn.{func} for direct access to vimL functiond0d38fc36
#11442 Lua: vim.env, vim.{g,v,w,bo,wo} Tree-sitter: Note: tree-sitter is considered experimental for 0.5. There's remaining bugs for buffer parsing, as well as known performance issues for large files and injected (nested) languages.e93342629
#10124 Tree-sitter API for lua440695c29
tree-sitter: implement query functionality and highlighting prototype8bea39f37
feat(treesitter): allow injections to be configured through directives929f19414
feat(treesitter): add offset predicate for language injectioncd75d3289
#14200 feat: treesitter checkhealth1a631026a
feat(treesitter): add language treed3f544002
treesitter: runtime queries3c5141d2c
#13008 treesitter: add string parser9437327d5
treesitter: use new on_bytes interfacee4b5efa51
treesitter: use decoration provider APId6209a7b8
fix: Add a test and it is so pretty836c31032
feat(ts): bump tree-sitter to v0.20.0 LSP client:00dc12c5d
#11336 lua LSP client: initial implementationd5aaad14e
#11430 Followup improvements to LSPee7ac469c
#11578 LSP: Use async completion for omnifunc.070bd3ea2
#11604 LSP: shrink API, improve docs25afa10f9
#11669 Merge 'LSP: differentiate diagnostic underline by severity'e956ea767
#11777 LSP: show diagnostic in qf/loclistdd8b29cfe
#11838 LSP: set InitializeParams.rootPath value0c5d2ffeb
#11837 Merge 'LSP: fixes, improve test visibility'ca8699378
#11638 LSP: implement documentHighlight220a2b05c
LSP/references: Add context to locations returned by serverccb038dc6
LSP/completion: add textEdit supportda6f38ab3
#12313 LSP: Add workspace.applyEdit client capabilitiesf559e5249
#11607 LSP: Add textDocument/codeAction support0d83a1c43
#12638 LSP: Feature/add workspace foldersfd507e278
#13641 LSP: window/showMessageRequeste467d2939
LSP: Move workspace/configuration handler from nvim-lspconfig to core2bdd553c9
feat(lsp): Add codelens support UI:f8134f2fd
screen.c: remove fold_line special casec146eddc8
experimental support for per-window color schemesa1508c9f6
nvim__screenshot (dump TUI state to file)08fe10010
terminal: enable pass through indexed colors to TUI in rgb mode5a8569942
tests/ui: make screen.lua use "linegrid" representation internally8fe19d9d8
screen: make ui_compositor aware of the intended size of a float54ce1010e
extmark: add new flexible "decorations" abstraction4781333a7
decorations: allow virt_text overlay at any columnbdebe8516
decorations: use extmark column adjustments for buffer highlights7b488314d
decorations: Allow highlights beyond end of line hl_eol425bc438a
decorations: add additional styling of virt_text overlaysedb5864a2
floats: z-index243820ebd
floats: add borders (MS-DOS MODE)5b6edc852
feat(float): add rounded borders preset4a36ec6da
#14310 float: add "solid" border style vim patches: around ~1000 vim patches and runtime updates got merged. Hooray! Changes include improvements to quickfix, prompt buffers, incsearch, display of search counts, and much much more. various features and changes:858c05613
#12809 Support for :perl, :perlfile, :perldo and perleval()bc86f76c0
api/buffer: add "on_bytes" callback to nvim_buf_attach19b623708
jobstart now supports env/clear_envef7c6b972
Support specifying "env" option for termopen()7c4f34966
#13287 switch from travis to github actions24db59ca8
feat: implement BufModified autocmdb83d8223f
implement Scroll autocommand8caf84130
Lower "closed by the client" message level to INFO7de276b87
bump libvterm to 0.1.4097ec71bd
#14096 aarch64/linux: fix build by updating LuaJITbd5f0e969
#12531 support autoread using tui focus tracking8a1276005
#12382 Add v:event.visual during `TextYankPost`802f8429d
api(nvim_open_win): add "noautocmd" option FIXES:21444552c
BugFix(clipboard): Fix block paste not working properly01493e799
#14413 api: fix nvim_exec() silencing behaviour9699f3be1
fix(doc): Add '/site' to stdpath('data') example in `:help 'rtp'`581b2bcde
screen: fix problem with p_cheae4b1e5c
luaref: fix leaks for global luarefs409b2711f
fix: segfault when pasting in term with empty buffercf6c23fb0
#14273 fix plenty of errors discovered by clang21035cff9
#14500 fix plenty of errors discovered by coveritybca19138b
#13987 tui: fix possibility of evaluating uninitialized variables9f2335937
fix_cursor: do not change line number when edit will not impact cursor row33f92fe02
fix(pty): Always use $TERM from the job's env dict6249059d4
checkhealth: fix terminfo problems on Windows397be5d38
#12811 UI: fix cursor not displayed after hiding and un-hiding87afc9031
screen.c: fix an issue with wrap and foldsb419e39a2
screen.c: fix last character on foldtext2ea312769
#13688 screen.c: fix display of signcolumn=auto in diffsc2d288e29
Fix screen terminal family issues314b222c2
#14127 Fix click on foldcolumn with vsplite65d0e53b
vim.fn: throw error when trying to use API function
Documentation | Chat | Twitter
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, 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!
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, Gentoo, and more!
Install from source
See the Building Neovim wiki page 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_INSTALL_PREFIX=/full/path/
make install
To inspect the build, these CMake features are useful:
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
├─ ci/ build automation
├─ cmake/ build scripts
├─ runtime/ user plugins/docs
├─ src/nvim/ application source code (see src/nvim/README.md)
│ ├─ api/ API subsystem
│ ├─ eval/ VimL 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
├─ third-party/ CMake subproject to build dependencies
└─ 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:
http://iccf-holland.org/
http://www.vim.org/iccf/
http://www.iccf.nl/
You can also sponsor the development of Vim. Vim sponsors can vote for
features. The money goes to Uganda anyway.