News

Nvim :help pages, generated from source using the tree-sitter-vimdoc parser.


Notable changes since Nvim 0.12
For changes in the previous release, see news-0.12.

BREAKING CHANGES IN HEAD OR EXPERIMENTAL news-breaking-dev

====== Remove this section before release. ======
The following changes to UNRELEASED features were made during the development cycle (Nvim HEAD, the "master" branch).

EVENTS

todo

EXPERIMENTS

todo

LSP

todo

LUA

vim.pos, vim.range always require the buf parameter.

DIAGNOSTICS

todo

OPTIONS

todo

TREESITTER

todo

UI

todo

VIMSCRIPT

todo

BREAKING CHANGES news-breaking

These changes may require adaptations in your config or plugins.

API

nvim_create_autocmd(), nvim_exec_autocmds() and nvim_clear_autocmds() no longer treat an empty non-nil pattern as nil.
nvim_clear_autocmds() no longer treats an empty array event as nil.
ui-messages msg_show.bufwrite and msg_show.completion messages are now msg_show.progress events.

DIAGNOSTICS

vim.diagnostic.Opts.Status.format no longer accepts the table mapping from severity to text. Use vim.diagnostic.Opts.Signs.text instead.

EDITOR

On Windows, the trust db now stores paths with "/" slashes. This means the trust store will be reset.
stdpath("log") moved to stdpath("state")/logs.

EVENTS

BufModifiedSet has been removed. Use the OptionSet event with pattern "modified" instead.

LSP

client.attached_buffers[buf] now stores languageId string (was boolean).

LUA

todo

OPTIONS

todo

PLUGINS

todo

TREESITTER

todo

NEW FEATURES news-features

The following new features were added.

API

nvim_buf_call() and nvim_win_call() now preserve multiple return values.
nvim_set_hl() supports "font" key.
nvim_open_win() zindex controls whether the UI will use a dimmed cursor shape when an unfocused float is on top of the cursor.
nvim_echo() distinguishes zero percent from omitted percent for Progress events.
nvim_create_user_command() accepts desc for Vimscript commands.
Support for tabpage-local options ('cmdheight'):

BUILD

Building using "zig build" requires zig 0.16.x.

DEFAULTS

todo

DIAGNOSTICS

vim.diagnostic.status() uses the severity names defined by the signs field of vim.diagnostic.config(), if any.

EDITOR

:command-completion-customlist can return a list of dictionaries with kind/menu/info/abbr for the popup menu.
gf and <cfile> support file://… URIs.
:log opens log files.
ZR restarts Nvim (:restart).
:uptime displays uptime.
:packupdate and :packdel for managing vim.pack.
'scrollback' is now also valid in prompt-buffer buffers to limit the number of history lines kept above the prompt.

EVENTS

:delmarks now triggers the MarkSet autocommand with line==col==0, same as nvim_buf_del_mark()
TextPutPre and TextPutPost are triggered before/after putting text.
TabMoved is triggered when tabs are reordered.

HIGHLIGHTS

Dimmed for text that should be de-emphasized.
vim.hl.hl_op() highlights text regions for TextYankPost and TextPutPost events. It replaces the now deprecated vim.hl.on_yank().

LSP

LUA

vim.ui.img can display images. Use :checkhealth img to confirm your terminal supports it.
vim.net.request() can specify custom headers by passing opts.headers.
vim.net.request() can now accept method param overload for multiple HTTP methods.
writefile() treats Lua strings as "blob", so it can be used to write binary data.
vim.filetype.inspect() returns a copy of the internal tables used for filetype detection.
Added __eq metamethod to vim.VersionRange. 2 distinct but representing the same range instances now compare equal.
Documentation for vim.fn now points to preferred Lua alternatives when available.
vim.list.unique() and vim.list.bisect() now support passing a string as a shorthand of a key
vim.isnil() tests if a value is nil or vim.NIL.
vim.nonnil() returns the first argument which is not nil.
vim.npcall() calls the function fn in protected-mode like pcall(), but returns nil on error.
vim.pos can now convert between positions and buffer offsets.
vim.ui.input() now allows setting input scope.
vim.log for easily creating loggers.
vim.pack.get() output includes revision of a pending update.
vim.pack.get() can fetch new updates before computing the output.
vim.pos and vim.range can now convert between mark positions.

OPTIONS

'ttyfast' can be disabled during startup by setting $NVIM_NOTTYFAST.
'scrolloffpad' allows vertically centering cursor at the end of file.
'shortmess' flag shm-u silences undo/redo messages.
'winpinned' prevents window from closing unless specifically targeted.

PERFORMANCE

treesitter-highlight performance on large injection-heavy files improves by 50% to 100% by reusing edited child-tree ranges.
Nvim architecture allows pure-Lua implementations of some vim.fn functions, which skips the Vimscript <=> Lua "bridge" (no data conversion/marshalling) entirely, if the vim.fn function is called from Lua.
The table holding LSP data is now cleared using table.clear, thus reducing GC and memory reallocation during each data reset.
When parsing the received Content-Length messages, the RPC client will no longer allocate extra strings.

PLUGINS

provider: add bun support for Node.js plugins

STARTUP

todo

TERMINAL

todo

TREESITTER

v_]N v_[N expand selection to sibling treesitter node.
treesitter-highlight-conceal can be removed by adding a @noconceal capture.
vim.treesitter.select() starts or adjusts a visual selection at cursor, based on tree nodes.

TUI

The TUI will re-query the terminal's background color when resuming from a suspended state, and Nvim will update 'background' accordingly.
User can override the builtin "terminfo" via $NVIM_TERMDEFS. This is similar to Vim's t_xx options.

UI

These builtin "picker" menus delegate to vim.ui.select():
:browse oldfiles
z= (spell suggest)

VIMSCRIPT

v:exitreason is set before QuitPre.
v:starttime is the process start time (nanoseconds since UNIX epoch).
v:useractive indicates user activity.
serverlist() with info=true returns details for each server (own + peers).

CHANGED FEATURES news-changed

These existing features changed their behavior.
OptionSet is no longer triggered during startup by automatic 'background' detection.
:Open with no arguments uses the current file.
The "buffer" key was renamed to "buf" in these functions (but the old name "buffer" is still accepted, for backwards compatibility):

REMOVED FEATURES news-removed

These deprecated features were removed.

DEPRECATIONS news-deprecations

Main
Commands index
Quick reference