Notable changes since Nvim 0.8
Rustvim :help pages, generated
from source
using the tree-sitter-vimdoc parser.
BREAKING CHANGES
The following changes may require adaptations in user config or plugins.
Cscope support is now removed (see cscope and nvim-removed):
Commands removed:
:cscope
:lcscope
:scscope
:cstag
Options removed:
cscopepathcomp
cscopeprg
cscopequickfix
cscoperelative
cscopetag
cscopetagorder
cscopeverbose
Eval functions removed:
cscope_connection()
Note: support for ctags remains with no plans to remove.
See https://github.com/neovim/neovim/pull/20545 for more information.
Commands removed:
:hardcopy
Options removed:
printdevice
printencoding
printexpr
printfont
printheader
printmbcharset
'paste' option is now deprecated and 'pastetoggle' is removed. paste works
automatically in GUI and terminal (TUI) Nvim. Just Paste It.™
Changes to vim.treesitter.get_node_text():
It now returns
string, as opposed to string|string[]|nil.
The
concat option has been removed as it was not consistently applied.
Invalid ranges now cause an error instead of returning
nil.
help treesitter parser was renamed to vimdoc. The only user-visible
change is that language-specific highlight groups need to be renamed from
@foo.help to @foo.vimdoc.
The default value of 'commentstring' is now empty instead of "/*%s*/".
libiconv and intl are now required build dependencies.
NEW FEATURES
The following new APIs or features were added.
Treesitter syntax highlighting for
help files now supports highlighted
code examples. To enable, create a .config/nvim/ftplugin/help.lua with
the contentsvim.treesitter.start()
Note: Highlighted code examples are only available in the Nvim manual, not
in help files taken from Vim. The treesitter
vimdoc parser is also work
in progress and not guaranteed to correctly highlight every help file in
the wild.
Added support for semantic token highlighting to the LSP client. This
functionality is enabled by default when a client that supports this feature
is attached to a buffer. Opt-out can be performed by deleting the
semanticTokensProvider from the LSP client's {server_capabilities} in the
LspAttach callback. See lsp-semantic-highlight for more information.
vim.inspect_pos(), vim.show_pos() and :Inspect allow a user to get or show items
at a given buffer position. Currently this includes treesitter captures,
LSP semantic tokens, syntax groups and extmarks.
vim.treesitter.inspect_tree() and :InspectTree opens a split window
showing a text representation of the nodes in a language tree for the current
buffer.
'statuscolumn' option to customize the area to the side of a window,
normally containing the fold, sign and number columns. This new option follows
the 'statusline' syntax and can be used to transform the line numbers, create
mouse click callbacks for signs, introduce a custom margin or separator etc.
vim.secure.trust(), :trust allows the user to manage files in trust database.
vim.secure.read() reads a file and prompts the user if it should be
trusted and, if so, returns the file's contents. Used by 'exrc'
EditorConfig support is now builtin. This is enabled by default and happens
automatically. To disable it, add the following to your config:
vim.g.editorconfig = false
A new environment variable named NVIM_APPNAME enables configuring the
directories where Nvim should find its configuration and state files. See
:help $NVIM_APPNAME .
Added support for running Lua scripts from shell using -l.
nvim -l foo.lua --arg1 --arg2Also works with stdin:
echo "print(42)" | nvim -l -
Added an omnifunc implementation for Lua, vim.lua_omnifunc()
Added a new experimental vim.loader that byte-compiles and caches Lua files.
To enable the new loader, add the following at the top of your init.lua:
vim.loader.enable()
Added vim.version for parsing and comparing version strings conforming to
the semver specification.
When using Nvim inside tmux 3.2 or later, the default clipboard provider
will now copy to the system clipboard. provider-clipboard
'showcmdloc' option to display the 'showcmd' information in the status
line or tab line. A new %S statusline item is available to place the
'showcmd' text in a custom 'statusline'. Useful for when 'cmdheight' is set
to 0.
'splitkeep' option to control the scroll behavior of horizontal splits.
'diffopt' now includes a
linematch option to enable a second-stage diff on
individual hunks to provide much more accurate diffs. This option is also
available to vim.text.diff()
--remote-ui option was added to connect to a remote instance and display
in it in a TUI in the local terminal. This can be used run a headless nvim
instance in the background and display its UI on demand, which previously
only was possible using an external UI implementation.
Added a vim.lsp.codelens.clear() function to clear codelenses.
Added support for the
willSave and willSaveWaitUntil capabilities to the
LSP client. willSaveWaitUntil allows a server to modify a document before it
gets saved. Example use-cases by language servers include removing unused
imports, or formatting the file.
Added preliminary support for the
workspace/didChangeWatchedFiles capability
to the LSP client to notify servers of file changes on disk. The feature is
disabled by default and can be enabled by setting the
workspace.didChangeWatchedFiles.dynamicRegistration=true capability.
vim.diagnostic now supports LSP DiagnosticsTag.
See: https://microsoft.github.io/language-server-protocol/specification/#diagnosticTag
vim.diagnostic.is_disabled() checks if diagnostics are disabled in a given
buffer or namespace.
Treesitter captures can now be transformed by directives. This will allow
more complicated dynamic language injections.
vim.treesitter.get_node_text() now accepts a
metadata option for
writing custom directives using vim.treesitter.query.add_directive().
vim.treesitter.language.add() replaces
vim.treesitter.language.require_language.
vim.treesitter.foldexpr() can be used for 'foldexpr' to use treesitter for folding.
Expanded the TSNode API with:
Additionally TSNode:range() now takes an optional
{include_bytes} argument.
Treesitter injection queries now use the format described at
https://tree-sitter.github.io/tree-sitter/3-syntax-highlighting.html#language-injection .
Support for the previous format will be removed in a future release.
Added nvim_get_hl() for getting highlight group definitions in a format
compatible with nvim_set_hl().
vim.filetype.get_option() to get the default option value for a specific
filetype. This is a wrapper around nvim_get_option_value() with caching.
require'bit' is now always available lua-bit
CHANGED FEATURES
The following changes to existing APIs or features add new behavior.
'exrc' now supports
.nvim.lua file.
'exrc' is no longer marked deprecated.
The TUI is changed to run in a separate process (previously, a separate
thread was used). This is not supposed to be a visible change to the user,
but might be the cause of subtle changes of behavior and bugs.
Previously, the TUI could be disabled as a build time feature (+tui/-tui),
resulting in a nvim binary which only could be run headless or embedded
in an external process. As of this version, TUI is always available.
Vim's
has('gui_running') is now supported as a way for plugins to check if
a GUI (not the TUI) is attached to Nvim. has()
msgsep is now always enabled even if 'display' doesn't contain the "msgsep"
flag. It is no longer possible to scroll the whole screen when showing
messages longer than 'cmdheight'.
API calls now show more information about where an exception happened.
The
win_viewport UI event now contains information about virtual lines,
meaning that smooth scrolling can now be implemented more consistently.
The
:= {expr} syntax can be used to evaluate a Lua expression, as
a shorter form of :lua ={expr}. := and :[range]= without argument
are unchanged. However :=# and similar variants using ex-flags
are no longer supported.
Unsaved changes are now preserved rather than discarded when channel-stdio
is closed.
nvim_open_win() now accepts a relative
mouse option to open a floating win
relative to the mouse. Note that the mouse doesn't update frequently without
setting vim.o.mousemoveevent = true
nvim_eval_statusline() supports evaluating the 'statuscolumn' through a
new
opts field: use_statuscol_lnum.
nvim_buf_get_extmarks() now accepts a -1
ns_id to request extmarks from
all namespaces and adds the namespace id to the details array.
Other missing properties have been added to the details array and marks can
be filtered by type.
vim.diagnostic.open_float() (and therefore vim.diagnostic.config()) now
accepts a
suffix option which, by default, renders LSP error codes.
Similarly, the virtual_text configuration in vim.diagnostic.config() now
has a suffix option which does nothing by default.
vim.fs.dir() now has a
opts argument with a depth field to allow
recursively searching a directory tree.
vim.gsplit() supports all features of vim.split().
:highlight now supports an additional attribute "altfont".
:Man manpage viewer supports manpage names containing spaces.
nvim_select_popupmenu_item() now supports cmdline-completion popup menu.
nvim_list_uis() reports all ui-option fields.
nvim_get_option_value() now has a
filetype option so it can return the
default option for a specific filetype.
build: Several improvements were made to make the code generation scripts more
deterministic, and a
LUA_GEN_PRG build parameter has been introduced to
allow for a workaround for some remaining reproducibility problems.
REMOVED FEATURES
The following deprecated functions or APIs were removed.
filetype.vim is removed in favor of vim.filetype
(Note that filetype logic and tests still align with Vim, so additions or
changes need to be contributed there first.)
See https://github.com/neovim/neovim/pull/20674.
LanguageTree:parse() no longer returns changed regions. Please use the
on_changedtree callbacks instead.
require'health' was removed. Use vim.health instead.
DEPRECATIONS
See deprecated-0.9.