123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- *news-0.9.txt* Nvim
- NVIM REFERENCE MANUAL
- Notable changes since Nvim 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
- 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 --arg2
- < Also 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|: >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.
- • 'wildoptions' flag "fuzzy" enables |fuzzy-matching| during |cmdline-completion|.
- • '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.
- 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:
- - |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.
- • 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.
- • '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
- See |deprecated-0.9|.
- vim:tw=78:ts=8:sw=2:et:ft=help:norl:
|