2023-04-07 07:11:02 -07:00
|
|
|
*news-0.9.txt* Nvim
|
|
|
|
|
|
|
|
|
|
|
|
NVIM REFERENCE MANUAL
|
|
|
|
|
|
|
|
|
|
|
|
Notable changes in Nvim 0.9 from 0.8 *news-0.9*
|
|
|
|
|
|
|
|
Type |gO| to see the table of contents.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
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.
|
|
|
|
|
|
|
|
• `:hardcopy` is now removed (see |hardcopy| and |nvim-removed|):
|
|
|
|
- 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 contents >lua
|
|
|
|
vim.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, users should add >lua
|
|
|
|
|
|
|
|
vim.g.editorconfig = false
|
|
|
|
<
|
|
|
|
(or the Vimscript equivalent) to their |config| file.
|
|
|
|
|
|
|
|
• A new environment variable named NVIM_APPNAME enables configuring the
|
2023-06-22 03:44:51 -07:00
|
|
|
directories where Nvim should find its configuration and state files. See
|
2023-04-07 07:11:02 -07:00
|
|
|
`:help $NVIM_APPNAME` .
|
|
|
|
|
|
|
|
• Added support for running Lua scripts from shell using |-l|. >
|
|
|
|
nvim -l foo.lua --arg1 --arg2
|
|
|
|
< Also works with stdin: >
|
|
|
|
echo "print(42)" | nvim -l -
|
|
|
|
|
2023-06-22 03:44:51 -07:00
|
|
|
• Added an omnifunc implementation for Lua, |vim.lua_omnifunc()|
|
2023-04-07 07:11:02 -07:00
|
|
|
|
2023-07-17 08:39:57 -07:00
|
|
|
• Added a new experimental |vim.loader| that byte-compiles and caches Lua files.
|
2023-04-07 07:11:02 -07:00
|
|
|
To enable the new loader, add the following at the top of your |init.lua|: >lua
|
|
|
|
vim.loader.enable()
|
|
|
|
|
2023-07-17 08:39:57 -07:00
|
|
|
• Added |vim.version| for parsing and comparing version strings conforming to
|
2023-04-07 07:11:02 -07:00
|
|
|
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.diff()|
|
|
|
|
|
|
|
|
See https://github.com/neovim/neovim/pull/14537.
|
|
|
|
|
|
|
|
• |--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.
|
2023-10-16 08:13:37 -07:00
|
|
|
See: https://microsoft.github.io/language-server-protocol/specification/#diagnosticTag
|
2023-04-07 07:11:02 -07:00
|
|
|
|
|
|
|
• |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:
|
|
|
|
- |TSNode:tree()|
|
|
|
|
- |TSNode:has_changes()|
|
|
|
|
- |TSNode:extra()|
|
|
|
|
- |TSNode:equal()|
|
|
|
|
|
|
|
|
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/syntax-highlighting#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.
|
|
|
|
|
2023-06-22 03:44:51 -07:00
|
|
|
• The `:= {expr}` syntax can be used to evaluate a Lua expression, as
|
2023-04-07 07:11:02 -07:00
|
|
|
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.
|
|
|
|
|
2023-07-17 08:39:57 -07:00
|
|
|
• `filetype.vim` is removed in favor of |vim.filetype|
|
2023-04-07 07:11:02 -07:00
|
|
|
(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.
|
|
|
|
|
|
|
|
• 'hkmap', 'hkmapp' and 'aleph' options were removed. Use 'keymap' option instead.
|
|
|
|
|
|
|
|
• |LanguageTree:parse()| no longer returns changed regions. Please use the
|
|
|
|
`on_changedtree` callbacks instead.
|
|
|
|
|
|
|
|
• `vim.highlight.create()`, `vim.highlight.link()` were removed, use |nvim_set_hl()| instead.
|
|
|
|
|
|
|
|
• `require'health'` was removed. Use |vim.health| instead.
|
|
|
|
|
|
|
|
==============================================================================
|
|
|
|
DEPRECATIONS
|
|
|
|
|
|
|
|
The following functions are now deprecated and will be removed in the next
|
|
|
|
release.
|
|
|
|
|
|
|
|
• |vim.treesitter.language.add()| replaces `vim.treesitter.language.require_language()`
|
|
|
|
|
|
|
|
• |vim.treesitter.get_node_at_pos()| and |vim.treesitter.get_node_at_cursor()|
|
|
|
|
are both deprecated in favor of |vim.treesitter.get_node()|.
|
|
|
|
|
|
|
|
• `vim.api.nvim_get_hl_by_name()`, `vim.api.nvim_get_hl_by_id()` were deprecated, use |nvim_get_hl()| instead.
|
|
|
|
|
|
|
|
• The following top level Treesitter functions have been moved:
|
|
|
|
`vim.treesitter.inspect_language()` -> `vim.treesitter.language.inspect()`
|
|
|
|
`vim.treesitter.get_query_files()` -> `vim.treesitter.query.get_files()`
|
|
|
|
`vim.treesitter.set_query()` -> `vim.treesitter.query.set()`
|
|
|
|
`vim.treesitter.query.set_query()` -> `vim.treesitter.query.set()`
|
|
|
|
`vim.treesitter.get_query()` -> `vim.treesitter.query.get()`
|
|
|
|
`vim.treesitter.query.get_query()` -> `vim.treesitter.query.get()`
|
|
|
|
`vim.treesitter.parse_query()` -> `vim.treesitter.query.parse()`
|
|
|
|
`vim.treesitter.query.parse_query()` -> `vim.treesitter.query.parse()`
|
|
|
|
`vim.treesitter.add_predicate()` -> `vim.treesitter.query.add_predicate()`
|
|
|
|
`vim.treesitter.add_directive()` -> `vim.treesitter.query.add_directive()`
|
|
|
|
`vim.treesitter.list_predicates()` -> `vim.treesitter.query.list_predicates()`
|
|
|
|
`vim.treesitter.list_directives()` -> `vim.treesitter.query.list_directives()`
|
|
|
|
`vim.treesitter.query.get_range()` -> `vim.treesitter.get_range()`
|
|
|
|
`vim.treesitter.query.get_node_text()` -> `vim.treesitter.get_node_text()`
|
|
|
|
|
|
|
|
• |nvim_exec()| is now deprecated in favor of |nvim_exec2()|.
|
|
|
|
|
|
|
|
• Renamed |vim.pretty_print()| to |vim.print()|.
|
|
|
|
|
|
|
|
vim:tw=78:ts=8:sw=2:et:ft=help:norl:
|