diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2025-03-26 07:50:46 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-26 07:50:46 -0700 |
commit | c46b7ab9a33097da518edd4f91ebeabd3ecfcee9 (patch) | |
tree | 93bd459d854ba4afb756781ca4c396b54fc391c8 | |
parent | 2e68e9c051dcf1a896b19535513f3fd97e68b415 (diff) | |
download | rneovim-c46b7ab9a33097da518edd4f91ebeabd3ecfcee9.tar.gz rneovim-c46b7ab9a33097da518edd4f91ebeabd3ecfcee9.tar.bz2 rneovim-c46b7ab9a33097da518edd4f91ebeabd3ecfcee9.zip |
docs: news 0.12 #33065
-rw-r--r-- | runtime/doc/deprecated.txt | 27 | ||||
-rw-r--r-- | runtime/doc/news-0.10.txt | 2 | ||||
-rw-r--r-- | runtime/doc/news-0.11.txt | 501 | ||||
-rw-r--r-- | runtime/doc/news.txt | 435 |
4 files changed, 587 insertions, 378 deletions
diff --git a/runtime/doc/deprecated.txt b/runtime/doc/deprecated.txt index db9a0ad4eb..1c4d410995 100644 --- a/runtime/doc/deprecated.txt +++ b/runtime/doc/deprecated.txt @@ -13,6 +13,33 @@ They should not be used in new scripts, and old scripts should be updated. Deprecated features ------------------------------------------------------------------------------ +DEPRECATED IN 0.12 *deprecated-0.12* + +API + +• todo + +DIAGNOSTICS + +• todo + +HIGHLIGHTS + +• todo + +LSP + +• todo + +LUA + +• todo + +VIMSCRIPT + +• todo + +------------------------------------------------------------------------------ DEPRECATED IN 0.11 *deprecated-0.11* API diff --git a/runtime/doc/news-0.10.txt b/runtime/doc/news-0.10.txt index 35af570ec3..1399be0d24 100644 --- a/runtime/doc/news-0.10.txt +++ b/runtime/doc/news-0.10.txt @@ -1,4 +1,4 @@ -*news-10.txt* Nvim +*news-0.10.txt* Nvim NVIM REFERENCE MANUAL diff --git a/runtime/doc/news-0.11.txt b/runtime/doc/news-0.11.txt new file mode 100644 index 0000000000..f934456c3a --- /dev/null +++ b/runtime/doc/news-0.11.txt @@ -0,0 +1,501 @@ +*news-0.11.txt* Nvim + + + NVIM REFERENCE MANUAL + + +Notable changes since Nvim 0.10 *news-0.11* + +For changes in the previous release, see |news-0.10|. + + Type |gO| to see the table of contents. + +============================================================================== +BREAKING CHANGES + +These changes may require adaptations in your config or plugins. + +API + +• `vim.rpcnotify(0)` and `rpcnotify(0)` broadcast to ALL channels. Previously + they would "multicast" only to subscribed channels (controlled by + `nvim_subscribe()`). Plugins and clients that want "multicast" behavior must + now maintain their own list of channels. + • In the future, |vim.rpcnotify()| may accept a list of channels, if there + is demand for this use-case. +• "Dictionary" was renamed to "Dict" internally and in the RPC |api-metadata|. + This is not expected to break clients because there are no known clients + that actually use the `return_type` field or the parameter type names + reported by |--api-info| or |nvim_get_api_info()|. +• Renamed `nvim__id_dictionary` (unsupported/experimental API) to + `nvim__id_dict`. + +BUILD + +• On Windows, only building with the UCRT runtime is supported. +• Translations are turned off by default. Enable by building Nvim with the + CMake flag `ENABLE_TRANSLATIONS=ON`. + +DIAGNOSTICS + +• The "underline" diagnostics handler sorts diagnostics by severity when using + the "severity_sort" option. +• Diagnostics are filtered by severity before being passed to a diagnostic + handler |diagnostic-handlers|. +• The "virtual_text" handler is disabled by default. Enable with >lua + vim.diagnostic.config({ virtual_text = true }) +< +EDITOR + +• The order in which signs are placed was changed. Higher priority signs will + now appear left of lower priority signs. +• |hl-CurSearch| now behaves the same as Vim and no longer updates on every + cursor movement. +• Moving in the buffer list using |:bnext| and similar commands behaves as + documented and skips help buffers if run from a non-help buffer, otherwise + it moves to another help buffer. +• Bells from a |terminal| buffer are now silent by default, unless 'belloff' + option doesn't contain "term" or "all". + +EVENTS + +• |vim.ui_attach()| callbacks for |ui-messages| `msg_show` events are executed in + |api-fast| context. +• New/enhanced arguments in these existing UI events: + • `cmdline_hide`: `abort` argument indicating if the cmdline was aborted. + • `cmdline_show`: + • Prompts that were previously emitted as `msg_show` events, are now routed + through `cmdline_show`. + • `hl_id` argument to highlight the prompt text. + • `msg_show`: + • `history` argument indicating if the message was added to the history. + • new message kinds: "bufwrite", "completion", "list_cmd", "lua_print", + "search_cmd", "shell_out/err/ret", "undo", "verbose", wildlist". +• |TermRequest| and |TermResponse| |event-data| is now a table. The "sequence" + field contains the received sequence. |TermRequest| also contains a "cursor" + field indicating the cursor's position when the sequence was received. + +HIGHLIGHTS + +• |TermCursorNC| is removed and no longer supported. Unfocused terminals no + longer have a cursor. + +LSP + +• |vim.lsp.buf.references()|, |vim.lsp.buf.declaration()|, |vim.lsp.buf.definition()|, + |vim.lsp.buf.type_definition()|, |vim.lsp.buf.implementation()| and + |vim.lsp.buf.hover()| now support merging the results of multiple clients + but no longer trigger the global handlers from `vim.lsp.handlers` +• |vim.lsp.buf.typehierarchy()| now passes the correct params for each + client request. +• |vim.lsp.handlers.signature_help()| is no longer used. +• |vim.lsp.diagnostic.on_publish_diagnostics()| and + |vim.lsp.diagnostic.on_diagnostic()| no longer accept a config parameter and + can no longer be configured with |vim.lsp.with()|. + Instead use: >lua + vim.diagnostic.config(config, vim.lsp.diagnostic.get_namespace(client_id)) +< +• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()| + and |vim.lsp.util.make_given_range_params()| now require the `position_encoding` + parameter. +• |vim.lsp.util.symbols_to_items()| now requires the `position_encoding` parameter. + +LUA + +• API functions now consistently return an empty dictionary as + |vim.empty_dict()|. Earlier, a |lua-special-tbl| was sometimes used. +• |vim.json.encode()| no longer escapes forward slashes "/" by default + +OPTIONS + +• The 'statuscolumn' `%l` item can now be used as a number column segment that + changes according to related options. It takes care of alignment, 'number', + 'relativenumber' and 'signcolumn' set to "number". The now redundant `%r` item + is no longer treated specially for 'statuscolumn'. +• `:set {option}<` removes the local value for all |global-local| options instead + of just string |global-local| options. +• `:setlocal {option}<` copies the global value to the local value for number + and boolean |global-local| options instead of removing the local value. +• Setting |hidden-options| now gives an error. In particular, setting + 'noshellslash' is now only allowed on Windows. + +PLUGINS + +• TODO + +TREESITTER + +• |Query:iter_matches()| correctly returns all matching nodes in a match + instead of only the last node. This means that the returned table maps + capture IDs to a list of nodes that need to be iterated over. For + backwards compatibility, an option `all=false` (only return the last + matching node) is provided that will be removed in a future release. +• |vim.treesitter.language.get_filetypes()| always includes the {language} + argument in addition to explicitly registered filetypes. +• |vim.treesitter.language.get_lang()| falls back to the {filetype} argument + if no languages are explicitly registered. +• |vim.treesitter.language.add()| returns `true` if a parser was loaded + successfully and `nil,errmsg` otherwise instead of throwing an error. +• |vim.treesitter.get_parser()| and |vim.treesitter.start()| no longer parse + the tree before returning. Scripts must call |LanguageTree:parse()| explicitly. >lua + local p = vim.treesitter.get_parser(0, 'c') + p:parse() +• |vim.treesitter.get_parser()| expects its buffer to be loaded. +< + +TUI + +• OSC 52 is used as a fallback clipboard provider when no other + |clipboard-tool| is found, even when not using SSH |clipboard-osc52|. To + disable OSC 52 queries, set the "osc52" key of |g:termfeatures| to false. + +VIMSCRIPT + +• |v:msgpack_types| has the type "binary" removed. |msgpackparse()| no longer + treats BIN, STR and FIXSTR as separate types. Any of these is returned as a + string if possible, or a |blob| if the value contained embedded NUL:s. + +============================================================================== +NEW FEATURES + +The following new features were added. + +API + +• Improved API "meta" docstrings and :help documentation. +• |nvim__ns_set()| can set properties for a namespace +• |nvim_echo()| `err` field to print error messages and `chunks` accepts + highlight group IDs. +• |nvim_open_win()| supports a `mouse` field that allows configuring mouse + interaction with the window separately from `focusable` field. +• |nvim_open_win()| `relative` field can be set to "laststatus" and "tabline". +• Additions to |nvim_buf_set_extmark()|: + • `conceal_lines` field to conceal an entire line. + • `hl_group` field can be an array of layered groups. + • `virt_text_pos` field accepts value `eol_right_align` to allow for right + aligned text that truncates before covering up buffer text. + • `virt_lines_overflow` field accepts value `scroll` to enable horizontal + scrolling for virtual lines with 'nowrap'. +• |vim.hl.range()| now has a optional `timeout` field which allows for a timed highlight + +DEFAULTS + +• Highlighting: + • Improved styling of :checkhealth and :help buffers. + +• Mappings: + • |grn| in Normal mode maps to |vim.lsp.buf.rename()| + • |grr| in Normal mode maps to |vim.lsp.buf.references()| + • |gri| in Normal mode maps to |vim.lsp.buf.implementation()| + • |gO| in Normal mode maps to |vim.lsp.buf.document_symbol()| + • |gra| in Normal and Visual mode maps to |vim.lsp.buf.code_action()| + • CTRL-S in Insert and Select mode maps to |vim.lsp.buf.signature_help()| + • Mouse |popup-menu| includes an "Open in web browser" item when you right-click + on a URL. + • Mouse |popup-menu| includes a "Go to definition" item when LSP is active + in the buffer. + • Mouse |popup-menu| includes "Show Diagnostics", "Show All Diagnostics" and + "Configure Diagnostics" items when there are diagnostics in the buffer. + • |]d-default| and |[d-default| accept a count. + • |[D-default| and |]D-default| jump to the first and last diagnostic in the + current buffer, respectively. + • Mappings inspired by Tim Pope's vim-unimpaired: + • |[q|, |]q|, |[Q|, |]Q|, |[CTRL-Q|, |]CTRL-Q| navigate through the |quickfix| list + • |[l|, |]l|, |[L|, |]L|, |[CTRL-L|, |]CTRL-L| navigate through the |location-list| + • |[t|, |]t|, |[T|, |]T|, |[CTRL-T|, |]CTRL-T| navigate through the |tag-matchlist| + • |[a|, |]a|, |[A|, |]A| navigate through the |argument-list| + • |[b|, |]b|, |[B|, |]B| navigate through the |buffer-list| + • |[<Space>|, |]<Space>| add an empty line above and below the cursor + • |[[| and |]]| in Normal mode jump between shell prompts for shells which emit + OSC 133 sequences ("shell integration" or "semantic prompts"). + +• Options: + • 'diffopt' default includes "linematch:40". + • 'number', 'relativenumber', 'signcolumn', and 'foldcolumn' are disabled in + |terminal| buffers. |terminal-config| shows how to change these defaults. + • Lua |ftplugin| sets 'omnifunc' to "v:lua.vim.lua_omnifunc". + • Lua |ftplugin| sets 'foldexpr' to "v:lua.vim.treesitter.foldexpr()". + +• Snippet: + • `<Tab>` in Insert and Select mode maps to `vim.snippet.jump({ direction = 1 })` + when a snippet is active and jumpable forwards. + • `<S-Tab>` in Insert and Select mode maps to `vim.snippet.jump({ direction = -1 })` + when a snippet is active and jumpable backwards. + +DIAGNOSTICS + +• |vim.diagnostic.config()| accepts a "jump" table to specify defaults for + |vim.diagnostic.jump()|. +• A "virtual_lines" diagnostic handler was added to render diagnostics using + virtual lines below the respective code. +• The "virtual_text" diagnostic handler accepts a `current_line` option to + only show virtual text at the cursor's line. + +EDITOR + +• Improved |paste| handling for redo (dot-repeat) and macros (|recording|): + • Redoing a large paste is significantly faster and ignores 'autoindent'. + • Replaying a macro with |@| also replays pasted text. +• On Windows, filename arguments on the command-line prefixed with "~\" or + "~/" are now expanded to the user's profile directory, not a relative path + to a literal "~" directory. +• |hl-ComplMatchIns| shows matched text of the currently inserted completion. +• |hl-PmenuMatch| and |hl-PmenuMatchSel| show matched text in completion popup. +• |gO| now works in `help`, `checkhealth`, and `markdown` buffers. +• Jump between sections in `help` and `checkhealth` buffers with `[[` and + `]]`. + +EVENTS + +• |CompleteDone| now sets the `reason` key in `v:event` which specifies the reason + for completion being done. +• |vim.on_key()| callbacks can consume the key by returning an empty string. + +LSP + +• Improved rendering of LSP hover docs. |K-lsp-default| +• |vim.lsp.completion.enable()| gained the `convert` callback which enables + customizing the transformation of an LSP CompletionItem to |complete-items|. +• |vim.lsp.diagnostic.from()| can be used to convert a list of + |vim.Diagnostic| objects into their LSP diagnostic representation. +• `:checkhealth vim.lsp` displays the server version (if available). +• Completion side effects (including snippet expansion, execution of commands + and application of additional text edits) is now built-in. +• |vim.lsp.util.locations_to_items()| and |vim.lsp.util.symbols_to_items()| now + sets `end_col` and `end_lnum` fields. +• |vim.lsp.buf.format()| now supports passing a list of ranges + via the `range` parameter (this requires support for the + `textDocument/rangesFormatting` request). +• |vim.lsp.buf.code_action()| actions show client name when there are multiple + clients. +• |vim.lsp.buf.signature_help()| can now cycle through different signatures + using `<C-s>` and also support multiple clients. +• The client now supports `'utf-8'` and `'utf-32'` position encodings. +• |vim.lsp.buf.hover()| now highlights hover ranges using the + |hl-LspReferenceTarget| highlight group. +• Functions in |vim.lsp.Client| can now be called as methods. +• Implemented LSP folding: |vim.lsp.foldexpr()| + https://microsoft.github.io/language-server-protocol/specification/#textDocument_foldingRange +• |vim.lsp.config()| has been added to define default configurations for + servers. In addition, configurations can be specified in `lsp/<name>.lua`. +• |vim.lsp.enable()| has been added to enable servers. +• |vim.lsp.buf.code_action()| resolves the `command` property during the + `codeAction/resolve` request. +• The `textDocument/completion` request now includes the completion context in + its parameters. + +LUA + +• Command-line completions for: `vim.g`, `vim.t`, `vim.w`, `vim.b`, `vim.v`, + `vim.o`, `vim.wo`, `vim.bo`, `vim.opt`, `vim.opt_local`, `vim.opt_global`, + and `vim.fn`. +• Documentation for |lua-bit|. +• |gf| in Lua buffers can go to module in same repo, |runtime-search-path| and + |package.path|. +• |vim.fs.rm()| can delete files and directories. +• |vim.validate()| now has a new signature which uses less tables, + is more performant and easier to read. +• |vim.str_byteindex()| and |vim.str_utfindex()| gained overload signatures + supporting two new parameters, `encoding` and `strict_indexing`. +• |vim.json.encode()| has an option to enable forward slash escaping +• |vim.fs.abspath()| converts paths to absolute paths. +• |vim.fs.relpath()| gets relative path compared to base path. +• |vim.fs.dir()| and |vim.fs.find()| can now follow symbolic links, + the behavior can be turn on using the new `follow` option. +• |vim.text.indent()| indents/dedents text. + +OPTIONS + +• 'completeopt' flag "fuzzy" enables |fuzzy-matching| during |ins-completion|. +• 'completeopt' flag "preinsert" highlights text to be inserted. +• 'wildmode' flag "noselect" shows 'wildmenu' without selecting an entry. +• 'messagesopt' configures |:messages| and |hit-enter| prompt. +• 'tabclose' controls which tab page to focus when closing a tab page. +• 'eventignorewin' to persistently ignore events in a window. +• 'winborder' sets the default border for |floating-windows| + +PERFORMANCE + +• Significantly reduced redraw time for long lines with treesitter + highlighting. +• LSP diagnostics and inlay hints are de-duplicated (new requests cancel + inflight requests). This greatly improves performance with slow LSP servers. +• 10x speedup for |vim.treesitter.foldexpr()| (when no parser exists for the + buffer). +• Strong |treesitter-query| caching makes repeat |vim.treesitter.query.get()| + and |vim.treesitter.query.parse()| calls significantly faster for large + queries. +• Treesitter highlighting is now asynchronous. To force synchronous parsing, + use `vim.g._ts_force_sync_parsing = true`. +• Treesitter folding is now calculated asynchronously. +• |LanguageTree:parse()| now only runs the injection query on the provided + range (as long as the language does not have a combined injection), + significantly improving |treesitter-highlight| performance. +• Treesitter injection query iteration is now asynchronous, making edits in + large buffers with combined injections much quicker. +• 10x reduction in blocking time when attaching an LSP to a large buffer. + +PLUGINS + +• EditorConfig + • spelling_language property is now supported. +• 'inccommand' incremental preview can run on 'nomodifiable' buffers and + restores their 'modifiable' state +• Commenting + • 'commentstring' values can now be specified in a Treesitter capture's + `bo.commentstring` metadata field, providing finer grained support for + languages like `JSX`. + +STARTUP + +• |-es| ("script mode") disables shada by default. +• Nvim will fail if the |--listen| or |$NVIM_LISTEN_ADDRESS| address is + invalid, instead of silently skipping an invalid address. + +TERMINAL + +• The |terminal| now understands the OSC 52 escape sequence to write to the + system clipboard (copy). Querying with OSC 52 (paste) is not supported. +• |hl-StatusLineTerm| and |hl-StatusLineTermNC| define highlights for the + status line in |terminal| windows. +• The terminal buffer now supports reflow (wrapped lines adapt when the buffer + is resized horizontally). Note: Lines that are not visible and kept in + 'scrollback' are not reflown. +• The |terminal| now supports OSC 8 escape sequences and will display + hyperlinks in supporting host terminals. +• The |terminal| now uses the actual cursor, rather than a "virtual" cursor. + This means that escape codes sent by applications running in a terminal + buffer can change the cursor shape and visibility. However, it also + means that the |TermCursorNC| highlight group is no longer supported: an + unfocused terminal window will have no cursor at all (so there is nothing to + highlight). +• |jobstart()| gained the "term" flag. +• The |terminal| will send theme update notifications when 'background' is + changed and DEC mode 2031 is enabled. +• The |terminal| has experimental support for the Kitty keyboard protocol + (sometimes called "CSI u" key encoding). Only the "Disambiguate escape + codes" mode is currently supported. +• The |terminal| emits a |TermRequest| autocommand event when the child process + emits an APC control sequence. +• |TermRequest| has a "cursor" field in its |event-data| indicating the + cursor position when the sequence was received. + +TREESITTER + +• |LanguageTree:node_for_range()| gets anonymous and named nodes for a range +• |vim.treesitter.get_node()| now takes an option `include_anonymous`, default + false, which allows it to return anonymous nodes as well as named nodes. +• |treesitter-directive-trim!| can trim all whitespace (not just empty lines) + from both sides of a node. +• |vim.treesitter.get_captures_at_pos()| now returns the `id` of each capture +• New |TSNode:child_with_descendant()|, which efficiently gets the node's + child that contains a given node as descendant. +• |LanguageTree:parse()| optionally supports asynchronous invocation, which is + activated by passing the `on_parse` callback parameter. +• |vim.treesitter.query.set()| can now inherit and/or extend runtime file + queries in addition to overriding. +• |LanguageTree:is_valid()| now accepts a range parameter to narrow the scope + of the validity check. +• |:InspectTree| now shows which nodes are missing. +• Bundled markdown highlight queries use `conceal_lines` metadata to conceal + code block fence lines vertically. +• |vim.treesitter.language.inspect()| shows additional information, including + parser version for ABI 15 parsers. +• |TSQuery:disable_pattern()| and |TSQuery:disable_capture()| to turn off + a specific pattern or capture in a query. +• |vim.treesitter.get_captures_at_pos()| returns the `pattern_id` of the + pattern used to match each capture. +• |Query:iter_captures()| now accepts an `opts` parameter, similar to + |Query:iter_matches()|. + +TUI + +• The builtin UI declares info |nvim_set_client_info()| on its channel. See + |startup-tui|. To see the current UI info, try this: > + :lua =vim.api.nvim_get_chan_info(vim.api.nvim_list_uis()[1].chan) +• |log| messages written by the builtin UI client (TUI, |--remote-ui|) are + now prefixed with "ui" instead of "?". +• The TUI will re-query the terminal's background color when a theme update + notification is received and Nvim will update 'background' accordingly. + +UI + +• |:detach| the current UI, let the Nvim server continue running as a background + process. Works with the builtin TUI, and all GUIs. +• |vim.ui.open()| (by default bound to |gx|) accepts an `opt.cmd` parameter + which controls the tool used to open the given path or URL. If you want to + globally set this, you can override vim.ui.open using the same approach + described at |vim.paste()|. +• `vim.ui.open()` now supports + [lemonade](https://github.com/lemonade-command/lemonade) as an option for + opening urls/files. This is handy if you are in an ssh connection and use + `lemonade`. +• The |ins-completion-menu| now supports cascading highlight styles. + |hl-PmenuSel| and |hl-PmenuMatch| both inherit from |hl-Pmenu|, and + |hl-PmenuMatchSel| inherits highlights from both |hl-PmenuSel| and + |hl-PmenuMatch|. +• |vim.diagnostic.setqflist()| updates an existing quickfix list with the + given title if found +• |ui-messages| content chunks now also contain the highlight group ID. +• |:checkhealth| can display in a floating window, controlled by the + |g:health| variable. + +VIMSCRIPT + +• |getchar()| and |getcharstr()| have optional {opts} |Dict| argument to control: + cursor behavior, return type, and whether to simplify the returned key. + +============================================================================== +CHANGED FEATURES + +These existing features changed their behavior. + +• 'scrollbind' now works properly with buffers that contain virtual lines. + + Scrollbind works by aligning to a target top line of each window in a tab + page. Previously this was done by calculating the difference between the old + top line and the target top line, and scrolling by that amount. Now the + top lines are calculated using screen line numbers which take virtual lines + into account. + +• The implementation of grapheme clusters (or combining chars |mbyte-combining|) + was upgraded to closely follow extended grapheme clusters as defined by UAX#29 + in the unicode standard. Noteworthily, this enables proper display of many + more emoji characters than before, including those encoded with multiple + emoji codepoints combined with ZWJ (zero width joiner) codepoints. + + This also applies to :terminal output, where width of cells will be calculated + using the upgraded implementation. + +• Custom highlights in 'rulerformat', 'statuscolumn', 'statusline', 'tabline', + 'winbar', and the sign/number column are stacked with their respective + highlight groups, as opposed to |hl-Normal|. + This is also reflected in the `highlights` from |nvim_eval_statusline()|, + with a new `groups` field containing an array of stacked highlight groups. + +• |vim.on_key()| callbacks won't be invoked recursively when a callback itself + consumes input. + +• "q" in man pages now uses |CTRL-W_q| instead of |CTRL-W_c| to close the + current window, and it no longer throws |E444| when there is only one window + on the screen. Global variable `vim.g.pager` is removed. + +• Default 'titlestring' is now implemented with 'statusline' "%" format items. + This means the default, empty value is essentially an alias to: + `%t%(\ %M%)%(\ \(%{expand(\"%:~:h\")}\)%)%a\ -\ Nvim`. This is only an + implementation simplification, not a behavior change. + +============================================================================== +REMOVED FEATURES + +These deprecated features were removed. + +• option `severity_limit` for `vim.lsp.diagnostic` (use `min=severity` + instead |vim.diagnostic.severity|). + +============================================================================== +DEPRECATIONS + +See |deprecated-0.11|. + + vim:tw=78:ts=8:sw=2:et:ft=help:norl: diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index f32e963103..24af07a34b 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -4,156 +4,92 @@ NVIM REFERENCE MANUAL -Notable changes since Nvim 0.10 *news* +Notable changes since Nvim 0.11 *news* -For changes in the previous release, see |news-0.10|. +For changes in the previous release, see |news-0.11|. Type |gO| to see the table of contents. ============================================================================== +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). + +EXPERIMENTS + +• todo + +LSP + +• todo + +OPTIONS + +• todo + +TREESITTER + +• todo + +============================================================================== BREAKING CHANGES *news-breaking* These changes may require adaptations in your config or plugins. API -• `vim.rpcnotify(0)` and `rpcnotify(0)` broadcast to ALL channels. Previously - they would "multicast" only to subscribed channels (controlled by - `nvim_subscribe()`). Plugins and clients that want "multicast" behavior must - now maintain their own list of channels. - • In the future, |vim.rpcnotify()| may accept a list of channels, if there - is demand for this use-case. -• "Dictionary" was renamed to "Dict" internally and in the RPC |api-metadata|. - This is not expected to break clients because there are no known clients - that actually use the `return_type` field or the parameter type names - reported by |--api-info| or |nvim_get_api_info()|. -• Renamed `nvim__id_dictionary` (unsupported/experimental API) to - `nvim__id_dict`. +• todo BUILD -• On Windows, only building with the UCRT runtime is supported. -• Translations are turned off by default. Enable by building Nvim with the - CMake flag `ENABLE_TRANSLATIONS=ON`. +• todo DIAGNOSTICS -• The "underline" diagnostics handler sorts diagnostics by severity when using - the "severity_sort" option. -• Diagnostics are filtered by severity before being passed to a diagnostic - handler |diagnostic-handlers|. -• The "virtual_text" handler is disabled by default. Enable with >lua - vim.diagnostic.config({ virtual_text = true }) -< +• todo + EDITOR -• The order in which signs are placed was changed. Higher priority signs will - now appear left of lower priority signs. -• |hl-CurSearch| now behaves the same as Vim and no longer updates on every - cursor movement. -• Moving in the buffer list using |:bnext| and similar commands behaves as - documented and skips help buffers if run from a non-help buffer, otherwise - it moves to another help buffer. -• Bells from a |terminal| buffer are now silent by default, unless 'belloff' - option doesn't contain "term" or "all". +• todo EVENTS -• |vim.ui_attach()| callbacks for |ui-messages| `msg_show` events are executed in - |api-fast| context. -• New/enhanced arguments in these existing UI events: - • `cmdline_hide`: `abort` argument indicating if the cmdline was aborted. - • `cmdline_show`: - • Prompts that were previously emitted as `msg_show` events, are now routed - through `cmdline_show`. - • `hl_id` argument to highlight the prompt text. - • `msg_show`: - • `history` argument indicating if the message was added to the history. - • new message kinds: "bufwrite", "completion", "list_cmd", "lua_print", - "search_cmd", "shell_out/err/ret", "undo", "verbose", wildlist". -• |TermRequest| and |TermResponse| |event-data| is now a table. The "sequence" - field contains the received sequence. |TermRequest| also contains a "cursor" - field indicating the cursor's position when the sequence was received. +• todo HIGHLIGHTS -• |TermCursorNC| is removed and no longer supported. Unfocused terminals no - longer have a cursor. +• todo LSP -• |vim.lsp.buf.references()|, |vim.lsp.buf.declaration()|, |vim.lsp.buf.definition()|, - |vim.lsp.buf.type_definition()|, |vim.lsp.buf.implementation()| and - |vim.lsp.buf.hover()| now support merging the results of multiple clients - but no longer trigger the global handlers from `vim.lsp.handlers` -• |vim.lsp.buf.typehierarchy()| now passes the correct params for each - client request. -• |vim.lsp.handlers.signature_help()| is no longer used. -• |vim.lsp.diagnostic.on_publish_diagnostics()| and - |vim.lsp.diagnostic.on_diagnostic()| no longer accept a config parameter and - can no longer be configured with |vim.lsp.with()|. - Instead use: >lua - vim.diagnostic.config(config, vim.lsp.diagnostic.get_namespace(client_id)) -< -• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()| - and |vim.lsp.util.make_given_range_params()| now require the `position_encoding` - parameter. -• |vim.lsp.util.symbols_to_items()| now requires the `position_encoding` parameter. +• todo LUA -• API functions now consistently return an empty dictionary as - |vim.empty_dict()|. Earlier, a |lua-special-tbl| was sometimes used. -• |vim.json.encode()| no longer escapes forward slashes "/" by default +• todo OPTIONS -• The 'statuscolumn' `%l` item can now be used as a number column segment that - changes according to related options. It takes care of alignment, 'number', - 'relativenumber' and 'signcolumn' set to "number". The now redundant `%r` item - is no longer treated specially for 'statuscolumn'. -• `:set {option}<` removes the local value for all |global-local| options instead - of just string |global-local| options. -• `:setlocal {option}<` copies the global value to the local value for number - and boolean |global-local| options instead of removing the local value. -• Setting |hidden-options| now gives an error. In particular, setting - 'noshellslash' is now only allowed on Windows. +• todo PLUGINS -• TODO +• todo TREESITTER -• |Query:iter_matches()| correctly returns all matching nodes in a match - instead of only the last node. This means that the returned table maps - capture IDs to a list of nodes that need to be iterated over. For - backwards compatibility, an option `all=false` (only return the last - matching node) is provided that will be removed in a future release. -• |vim.treesitter.language.get_filetypes()| always includes the {language} - argument in addition to explicitly registered filetypes. -• |vim.treesitter.language.get_lang()| falls back to the {filetype} argument - if no languages are explicitly registered. -• |vim.treesitter.language.add()| returns `true` if a parser was loaded - successfully and `nil,errmsg` otherwise instead of throwing an error. -• |vim.treesitter.get_parser()| and |vim.treesitter.start()| no longer parse - the tree before returning. Scripts must call |LanguageTree:parse()| explicitly. >lua - local p = vim.treesitter.get_parser(0, 'c') - p:parse() -• |vim.treesitter.get_parser()| expects its buffer to be loaded. -< +• todo TUI -• OSC 52 is used as a fallback clipboard provider when no other - |clipboard-tool| is found, even when not using SSH |clipboard-osc52|. To - disable OSC 52 queries, set the "osc52" key of |g:termfeatures| to false. +• todo VIMSCRIPT -• |v:msgpack_types| has the type "binary" removed. |msgpackparse()| no longer - treats BIN, STR and FIXSTR as separate types. Any of these is returned as a - string if possible, or a |blob| if the value contained embedded NUL:s. +• todo ============================================================================== NEW FEATURES *news-features* @@ -162,336 +98,81 @@ The following new features were added. API -• Improved API "meta" docstrings and :help documentation. -• |nvim__ns_set()| can set properties for a namespace -• |nvim_echo()| `err` field to print error messages and `chunks` accepts - highlight group IDs. -• |nvim_open_win()| supports a `mouse` field that allows configuring mouse - interaction with the window separately from `focusable` field. -• |nvim_open_win()| `relative` field can be set to "laststatus" and "tabline". -• Additions to |nvim_buf_set_extmark()|: - • `conceal_lines` field to conceal an entire line. - • `hl_group` field can be an array of layered groups. - • `virt_text_pos` field accepts value `eol_right_align` to allow for right - aligned text that truncates before covering up buffer text. - • `virt_lines_overflow` field accepts value `scroll` to enable horizontal - scrolling for virtual lines with 'nowrap'. -• |vim.hl.range()| now has a optional `timeout` field which allows for a timed highlight +• todo DEFAULTS -• Highlighting: - • Improved styling of :checkhealth and :help buffers. - -• Mappings: - • |grn| in Normal mode maps to |vim.lsp.buf.rename()| - • |grr| in Normal mode maps to |vim.lsp.buf.references()| - • |gri| in Normal mode maps to |vim.lsp.buf.implementation()| - • |gO| in Normal mode maps to |vim.lsp.buf.document_symbol()| - • |gra| in Normal and Visual mode maps to |vim.lsp.buf.code_action()| - • CTRL-S in Insert and Select mode maps to |vim.lsp.buf.signature_help()| - • Mouse |popup-menu| includes an "Open in web browser" item when you right-click - on a URL. - • Mouse |popup-menu| includes a "Go to definition" item when LSP is active - in the buffer. - • Mouse |popup-menu| includes "Show Diagnostics", "Show All Diagnostics" and - "Configure Diagnostics" items when there are diagnostics in the buffer. - • |]d-default| and |[d-default| accept a count. - • |[D-default| and |]D-default| jump to the first and last diagnostic in the - current buffer, respectively. - • Mappings inspired by Tim Pope's vim-unimpaired: - • |[q|, |]q|, |[Q|, |]Q|, |[CTRL-Q|, |]CTRL-Q| navigate through the |quickfix| list - • |[l|, |]l|, |[L|, |]L|, |[CTRL-L|, |]CTRL-L| navigate through the |location-list| - • |[t|, |]t|, |[T|, |]T|, |[CTRL-T|, |]CTRL-T| navigate through the |tag-matchlist| - • |[a|, |]a|, |[A|, |]A| navigate through the |argument-list| - • |[b|, |]b|, |[B|, |]B| navigate through the |buffer-list| - • |[<Space>|, |]<Space>| add an empty line above and below the cursor - • |[[| and |]]| in Normal mode jump between shell prompts for shells which emit - OSC 133 sequences ("shell integration" or "semantic prompts"). - -• Options: - • 'diffopt' default includes "linematch:40". - • 'number', 'relativenumber', 'signcolumn', and 'foldcolumn' are disabled in - |terminal| buffers. |terminal-config| shows how to change these defaults. - • Lua |ftplugin| sets 'omnifunc' to "v:lua.vim.lua_omnifunc". - • Lua |ftplugin| sets 'foldexpr' to "v:lua.vim.treesitter.foldexpr()". - -• Snippet: - • `<Tab>` in Insert and Select mode maps to `vim.snippet.jump({ direction = 1 })` - when a snippet is active and jumpable forwards. - • `<S-Tab>` in Insert and Select mode maps to `vim.snippet.jump({ direction = -1 })` - when a snippet is active and jumpable backwards. +• todo DIAGNOSTICS -• |vim.diagnostic.config()| accepts a "jump" table to specify defaults for - |vim.diagnostic.jump()|. -• A "virtual_lines" diagnostic handler was added to render diagnostics using - virtual lines below the respective code. -• The "virtual_text" diagnostic handler accepts a `current_line` option to - only show virtual text at the cursor's line. +• todo EDITOR -• Improved |paste| handling for redo (dot-repeat) and macros (|recording|): - • Redoing a large paste is significantly faster and ignores 'autoindent'. - • Replaying a macro with |@| also replays pasted text. -• On Windows, filename arguments on the command-line prefixed with "~\" or - "~/" are now expanded to the user's profile directory, not a relative path - to a literal "~" directory. -• |hl-ComplMatchIns| shows matched text of the currently inserted completion. -• |hl-PmenuMatch| and |hl-PmenuMatchSel| show matched text in completion popup. -• |gO| now works in `help`, `checkhealth`, and `markdown` buffers. -• Jump between sections in `help` and `checkhealth` buffers with `[[` and - `]]`. +• todo EVENTS -• |CompleteDone| now sets the `reason` key in `v:event` which specifies the reason - for completion being done. -• |vim.on_key()| callbacks can consume the key by returning an empty string. +• todo LSP -• Improved rendering of LSP hover docs. |K-lsp-default| -• |vim.lsp.completion.enable()| gained the `convert` callback which enables - customizing the transformation of an LSP CompletionItem to |complete-items|. -• |vim.lsp.diagnostic.from()| can be used to convert a list of - |vim.Diagnostic| objects into their LSP diagnostic representation. -• `:checkhealth vim.lsp` displays the server version (if available). -• Completion side effects (including snippet expansion, execution of commands - and application of additional text edits) is now built-in. -• |vim.lsp.util.locations_to_items()| and |vim.lsp.util.symbols_to_items()| now - sets `end_col` and `end_lnum` fields. -• |vim.lsp.buf.format()| now supports passing a list of ranges - via the `range` parameter (this requires support for the - `textDocument/rangesFormatting` request). -• |vim.lsp.buf.code_action()| actions show client name when there are multiple - clients. -• |vim.lsp.buf.signature_help()| can now cycle through different signatures - using `<C-s>` and also support multiple clients. -• The client now supports `'utf-8'` and `'utf-32'` position encodings. -• |vim.lsp.buf.hover()| now highlights hover ranges using the - |hl-LspReferenceTarget| highlight group. -• Functions in |vim.lsp.Client| can now be called as methods. -• Implemented LSP folding: |vim.lsp.foldexpr()| - https://microsoft.github.io/language-server-protocol/specification/#textDocument_foldingRange -• |vim.lsp.config()| has been added to define default configurations for - servers. In addition, configurations can be specified in `lsp/<name>.lua`. -• |vim.lsp.enable()| has been added to enable servers. -• |vim.lsp.buf.code_action()| resolves the `command` property during the - `codeAction/resolve` request. -• The `textDocument/completion` request now includes the completion context in - its parameters. +• todo LUA -• Command-line completions for: `vim.g`, `vim.t`, `vim.w`, `vim.b`, `vim.v`, - `vim.o`, `vim.wo`, `vim.bo`, `vim.opt`, `vim.opt_local`, `vim.opt_global`, - and `vim.fn`. -• Documentation for |lua-bit|. -• |gf| in Lua buffers can go to module in same repo, |runtime-search-path| and - |package.path|. -• |vim.fs.rm()| can delete files and directories. -• |vim.validate()| now has a new signature which uses less tables, - is more performant and easier to read. -• |vim.str_byteindex()| and |vim.str_utfindex()| gained overload signatures - supporting two new parameters, `encoding` and `strict_indexing`. -• |vim.json.encode()| has an option to enable forward slash escaping -• |vim.fs.abspath()| converts paths to absolute paths. -• |vim.fs.relpath()| gets relative path compared to base path. -• |vim.fs.dir()| and |vim.fs.find()| can now follow symbolic links, - the behavior can be turn on using the new `follow` option. -• |vim.text.indent()| indents/dedents text. +• todo OPTIONS -• 'completeopt' flag "fuzzy" enables |fuzzy-matching| during |ins-completion|. -• 'completeopt' flag "preinsert" highlights text to be inserted. -• 'wildmode' flag "noselect" shows 'wildmenu' without selecting an entry. -• 'messagesopt' configures |:messages| and |hit-enter| prompt. -• 'tabclose' controls which tab page to focus when closing a tab page. -• 'eventignorewin' to persistently ignore events in a window. -• 'winborder' sets the default border for |floating-windows| +• todo PERFORMANCE -• Significantly reduced redraw time for long lines with treesitter - highlighting. -• LSP diagnostics and inlay hints are de-duplicated (new requests cancel - inflight requests). This greatly improves performance with slow LSP servers. -• 10x speedup for |vim.treesitter.foldexpr()| (when no parser exists for the - buffer). -• Strong |treesitter-query| caching makes repeat |vim.treesitter.query.get()| - and |vim.treesitter.query.parse()| calls significantly faster for large - queries. -• Treesitter highlighting is now asynchronous. To force synchronous parsing, - use `vim.g._ts_force_sync_parsing = true`. -• Treesitter folding is now calculated asynchronously. -• |LanguageTree:parse()| now only runs the injection query on the provided - range (as long as the language does not have a combined injection), - significantly improving |treesitter-highlight| performance. -• Treesitter injection query iteration is now asynchronous, making edits in - large buffers with combined injections much quicker. -• 10x reduction in blocking time when attaching an LSP to a large buffer. +• todo PLUGINS -• EditorConfig - • spelling_language property is now supported. -• 'inccommand' incremental preview can run on 'nomodifiable' buffers and - restores their 'modifiable' state -• Commenting - • 'commentstring' values can now be specified in a Treesitter capture's - `bo.commentstring` metadata field, providing finer grained support for - languages like `JSX`. +• todo STARTUP -• |-es| ("script mode") disables shada by default. -• Nvim will fail if the |--listen| or |$NVIM_LISTEN_ADDRESS| address is - invalid, instead of silently skipping an invalid address. +• todo TERMINAL -• The |terminal| now understands the OSC 52 escape sequence to write to the - system clipboard (copy). Querying with OSC 52 (paste) is not supported. -• |hl-StatusLineTerm| and |hl-StatusLineTermNC| define highlights for the - status line in |terminal| windows. -• The terminal buffer now supports reflow (wrapped lines adapt when the buffer - is resized horizontally). Note: Lines that are not visible and kept in - 'scrollback' are not reflown. -• The |terminal| now supports OSC 8 escape sequences and will display - hyperlinks in supporting host terminals. -• The |terminal| now uses the actual cursor, rather than a "virtual" cursor. - This means that escape codes sent by applications running in a terminal - buffer can change the cursor shape and visibility. However, it also - means that the |TermCursorNC| highlight group is no longer supported: an - unfocused terminal window will have no cursor at all (so there is nothing to - highlight). -• |jobstart()| gained the "term" flag. -• The |terminal| will send theme update notifications when 'background' is - changed and DEC mode 2031 is enabled. -• The |terminal| has experimental support for the Kitty keyboard protocol - (sometimes called "CSI u" key encoding). Only the "Disambiguate escape - codes" mode is currently supported. -• The |terminal| emits a |TermRequest| autocommand event when the child process - emits an APC control sequence. -• |TermRequest| has a "cursor" field in its |event-data| indicating the - cursor position when the sequence was received. +• todo TREESITTER -• |LanguageTree:node_for_range()| gets anonymous and named nodes for a range -• |vim.treesitter.get_node()| now takes an option `include_anonymous`, default - false, which allows it to return anonymous nodes as well as named nodes. -• |treesitter-directive-trim!| can trim all whitespace (not just empty lines) - from both sides of a node. -• |vim.treesitter.get_captures_at_pos()| now returns the `id` of each capture -• New |TSNode:child_with_descendant()|, which efficiently gets the node's - child that contains a given node as descendant. -• |LanguageTree:parse()| optionally supports asynchronous invocation, which is - activated by passing the `on_parse` callback parameter. -• |vim.treesitter.query.set()| can now inherit and/or extend runtime file - queries in addition to overriding. -• |LanguageTree:is_valid()| now accepts a range parameter to narrow the scope - of the validity check. -• |:InspectTree| now shows which nodes are missing. -• Bundled markdown highlight queries use `conceal_lines` metadata to conceal - code block fence lines vertically. -• |vim.treesitter.language.inspect()| shows additional information, including - parser version for ABI 15 parsers. -• |TSQuery:disable_pattern()| and |TSQuery:disable_capture()| to turn off - a specific pattern or capture in a query. -• |vim.treesitter.get_captures_at_pos()| returns the `pattern_id` of the - pattern used to match each capture. -• |Query:iter_captures()| now accepts an `opts` parameter, similar to - |Query:iter_matches()|. +• todo TUI -• The builtin UI declares info |nvim_set_client_info()| on its channel. See - |startup-tui|. To see the current UI info, try this: > - :lua =vim.api.nvim_get_chan_info(vim.api.nvim_list_uis()[1].chan) -• |log| messages written by the builtin UI client (TUI, |--remote-ui|) are - now prefixed with "ui" instead of "?". -• The TUI will re-query the terminal's background color when a theme update - notification is received and Nvim will update 'background' accordingly. +• todo UI -• |:detach| the current UI, let the Nvim server continue running as a background - process. Works with the builtin TUI, and all GUIs. -• |vim.ui.open()| (by default bound to |gx|) accepts an `opt.cmd` parameter - which controls the tool used to open the given path or URL. If you want to - globally set this, you can override vim.ui.open using the same approach - described at |vim.paste()|. -• `vim.ui.open()` now supports - [lemonade](https://github.com/lemonade-command/lemonade) as an option for - opening urls/files. This is handy if you are in an ssh connection and use - `lemonade`. -• The |ins-completion-menu| now supports cascading highlight styles. - |hl-PmenuSel| and |hl-PmenuMatch| both inherit from |hl-Pmenu|, and - |hl-PmenuMatchSel| inherits highlights from both |hl-PmenuSel| and - |hl-PmenuMatch|. -• |vim.diagnostic.setqflist()| updates an existing quickfix list with the - given title if found -• |ui-messages| content chunks now also contain the highlight group ID. -• |:checkhealth| can display in a floating window, controlled by the - |g:health| variable. +• todo VIMSCRIPT -• |getchar()| and |getcharstr()| have optional {opts} |Dict| argument to control: - cursor behavior, return type, and whether to simplify the returned key. +• todo ============================================================================== CHANGED FEATURES *news-changed* These existing features changed their behavior. -• 'scrollbind' now works properly with buffers that contain virtual lines. - - Scrollbind works by aligning to a target top line of each window in a tab - page. Previously this was done by calculating the difference between the old - top line and the target top line, and scrolling by that amount. Now the - top lines are calculated using screen line numbers which take virtual lines - into account. - -• The implementation of grapheme clusters (or combining chars |mbyte-combining|) - was upgraded to closely follow extended grapheme clusters as defined by UAX#29 - in the unicode standard. Noteworthily, this enables proper display of many - more emoji characters than before, including those encoded with multiple - emoji codepoints combined with ZWJ (zero width joiner) codepoints. - - This also applies to :terminal output, where width of cells will be calculated - using the upgraded implementation. - -• Custom highlights in 'rulerformat', 'statuscolumn', 'statusline', 'tabline', - 'winbar', and the sign/number column are stacked with their respective - highlight groups, as opposed to |hl-Normal|. - This is also reflected in the `highlights` from |nvim_eval_statusline()|, - with a new `groups` field containing an array of stacked highlight groups. - -• |vim.on_key()| callbacks won't be invoked recursively when a callback itself - consumes input. - -• "q" in man pages now uses |CTRL-W_q| instead of |CTRL-W_c| to close the - current window, and it no longer throws |E444| when there is only one window - on the screen. Global variable `vim.g.pager` is removed. - -• Default 'titlestring' is now implemented with 'statusline' "%" format items. - This means the default, empty value is essentially an alias to: - `%t%(\ %M%)%(\ \(%{expand(\"%:~:h\")}\)%)%a\ -\ Nvim`. This is only an - implementation simplification, not a behavior change. +• todo ============================================================================== REMOVED FEATURES *news-removed* These deprecated features were removed. -• option `severity_limit` for `vim.lsp.diagnostic` (use `min=severity` - instead |vim.diagnostic.severity|). +• todo ============================================================================== DEPRECATIONS *news-deprecations* |