aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-05-16 06:28:27 -0700
committerGitHub <noreply@github.com>2024-05-16 06:28:27 -0700
commit31dc6279693886a628119cd6c779e580faab32fd (patch)
tree9708e5d5609c4aa4ee63af801f6ab039c58c9736
parentecee8ef8a9fd737b08e2840f6a0af501de46ce76 (diff)
downloadrneovim-31dc6279693886a628119cd6c779e580faab32fd.tar.gz
rneovim-31dc6279693886a628119cd6c779e580faab32fd.tar.bz2
rneovim-31dc6279693886a628119cd6c779e580faab32fd.zip
docs: news #28773
-rw-r--r--runtime/doc/deprecated.txt4
-rw-r--r--runtime/doc/news-0.10.txt473
-rw-r--r--runtime/doc/news.txt540
-rw-r--r--scripts/gen_help_html.lua1
4 files changed, 585 insertions, 433 deletions
diff --git a/runtime/doc/deprecated.txt b/runtime/doc/deprecated.txt
index 06f8319453..3fc2d872f6 100644
--- a/runtime/doc/deprecated.txt
+++ b/runtime/doc/deprecated.txt
@@ -12,6 +12,10 @@ They should not be used in new scripts, and old scripts should be updated.
==============================================================================
Deprecated features
+DEPRECATED IN 0.11 *deprecated-0.11*
+
+• N/A
+
DEPRECATED IN 0.10 *deprecated-0.10*
• Configuring |diagnostic-signs| using |:sign-define| or |sign_define()|. Use
diff --git a/runtime/doc/news-0.10.txt b/runtime/doc/news-0.10.txt
new file mode 100644
index 0000000000..8a0e7e92e7
--- /dev/null
+++ b/runtime/doc/news-0.10.txt
@@ -0,0 +1,473 @@
+*news-10.txt* Nvim
+
+
+ NVIM REFERENCE MANUAL
+
+
+Notable changes since Nvim 0.9 *news-0.10*
+
+For changes in the previous release, see |news-0.9|.
+
+ Type |gO| to see the table of contents.
+
+==============================================================================
+BREAKING CHANGES
+
+These changes may require adaptations in your config or plugins.
+
+• API:
+ • |nvim_open_win()| now blocks all autocommands when `noautocmd` is set,
+ rather than just those from setting the `buffer` to display in the window.
+
+• Defaults:
+ • Default color scheme has been updated to be "Nvim branded" and accessible.
+ Use `:colorscheme vim` to revert to the old legacy color scheme.
+ • These Nvim specific highlight groups are now defined in a meaningfully
+ different way and might need an update:
+ • |hl-FloatBorder| is linked to |hl-NormalFloat| instead of |hl-WinSeparator|.
+ • |hl-NormalFloat| is not linked to |hl-Pmenu|.
+ • |hl-WinBar| has different background.
+ • |hl-WinBarNC| is similar to |hl-WinBar| but not bold.
+ • |hl-WinSeparator| is linked to |hl-Normal| instead of |hl-VertSplit|.
+ • This also might result into some color schemes looking differently due
+ to them relying on implicit assumptions about how highlight groups are
+ defined by default. To account for this, define all attributes of
+ highlight groups explicitly. Alternatively, use `:colorscheme vim` or
+ `:source $VIMRUNTIME/colors/vim.lua` to restore previous definitions.
+ • 'termguicolors' is enabled by default when Nvim is able to determine that
+ the host terminal emulator supports 24-bit color.
+
+• Editor:
+ • When switching windows, |CursorMoved| autocommands trigger when Nvim is
+ back on the main loop rather than immediately. This is more compatible
+ with Vim.
+ • "#" followed by a digit no longer stands for a function key at the start
+ of the lhs of a mapping.
+ • |shm-q| now fully hides macro recording message instead of only shortening it.
+ • Signs placed through the legacy |sign-commands| are now stored and
+ displayed as |extmarks| internally. Along with the following changes:
+ • A sign placed twice in the same group with the same identifier will be
+ moved.
+ • Legacy signs are always deleted along with the line it is placed on.
+ • Legacy and extmark signs will show up in both |:sign-place-list| and
+ |nvim_buf_get_extmarks()|.
+ • Legacy and extmark signs are displayed and listed with the same priority:
+ line number -> priority -> sign id -> recently placed
+ • `:behave` was removed.
+ • If you used `:behave xterm`, the following is equivalent: >vim
+
+ set mousemodel=extend
+<
+ • If you used `:behave mswin`, the following is equivalent: >vim
+
+ set selection=exclusive
+ set selectmode=mouse,key
+ set mousemodel=popup
+ set keymodel=startsel,stopsel
+<
+• Events:
+ • Returning any truthy value from a callback passed to
+ |nvim_create_autocmd()| (rather than just `true`) will delete the
+ autocommand.
+
+• LSP:
+ • |LanguageTree:parse()| will no longer parse injections by default and now
+ requires an explicit range argument to be passed. If injections are
+ required, provide an explicit range via `parser:parse({ start_row, end_row })`.
+ • |vim.lsp.util.parse_snippet()| will now strictly follow the snippet
+ grammar defined by LSP, and hence previously parsed snippets might now be
+ considered invalid input.
+ • |vim.lsp.codelens.refresh()| now takes an `opts` argument. With this
+ change, the default behavior of just refreshing the current buffer has
+ been replaced by refreshing all buffers.
+ • |vim.lsp.util.extract_completion_items()| will no longer return reliable
+ results, since it does not apply `itemDefaults` when its input is
+ a `CompletionList`. Moreover, since support for LSP
+ `completionList.itemDefaults` was added, some third party plugins might be
+ negatively impacted in case the language servers support the feature but
+ the plugin does not. If necessary, the respective capability can be
+ removed when calling |vim.lsp.protocol.make_client_capabilities()|.
+ • |LspRequest| and LspProgressUpdate (renamed to |LspProgress|) autocmds
+ were promoted from |User| autocmds to first class citizens.
+
+• Lua:
+ • |-l| ensures output ends with a newline if the script prints messages and
+ doesn't cause Nvim to exit.
+ • Removed functions from the |vim.json| module:
+ • Unnecessary, undocumented functions which caused global side-effects.
+ • `vim.json.null` is redundant with `vim.NIL`.
+ • `vim.json.array_mt` (and related) is redundant with `vim.empty_dict()`.
+ • |vim.islist()| now checks whether a table is actually list-like (i.e., has
+ integer keys without gaps and starting from 1). For the previous behavior
+ (only check for integer keys, allow gaps or not starting with 1), use
+ |vim.isarray()|.
+ • Renamed `vim.treesitter.playground` to `vim.treesitter.dev`.
+
+• Options:
+ • Removed some Vim 5.0<= option compatibilities:
+ • 'backspace' no longer supports number values. Instead:
+ • for `backspace=0` set `backspace=` (empty)
+ • for `backspace=1` set `backspace=indent,eol`
+ • for `backspace=2` set `backspace=indent,eol,start` (default behavior in Nvim)
+ • for `backspace=3` set `backspace=indent,eol,nostop`
+ • 'backupdir' and 'directory' will no longer remove a `>` at the start of
+ the option.
+ • |OptionSet| autocommand args |v:option_new|, |v:option_old|,
+ |v:option_oldlocal|, |v:option_oldglobal| now have the type of the option
+ instead of always being strings. |v:option_old| is now the old global
+ value for all global-local options, instead of just string global-local
+ options.
+ • Local value for a global-local number/boolean option is now unset when the
+ option is set (e.g. using |:set| or |nvim_set_option_value()|) without
+ a scope, which means they now behave the same way as string options.
+
+• Plugins:
+ • |:TOhtml| has been rewritten in Lua to support Nvim-specific decorations,
+ and many options have been removed.
+
+• Treesitter:
+ • Treesitter highlight groups have been renamed to be more in line with
+ upstream tree-sitter and Helix to make it easier to share queries. The
+ full list is documented in |treesitter-highlight-groups|.
+
+• TUI:
+ • In some cases, the cursor in the Nvim |TUI| used to blink even without
+ configuring 'guicursor' as mentioned in |cursor-blinking|. This was a bug
+ that has now been fixed. If your cursor has stopped blinking, add the
+ following (or similar, adapted to user preference) to your |config| file: >vim
+ set guicursor+=n-v-c:blinkon500-blinkoff500
+<
+
+==============================================================================
+NEW FEATURES
+
+The following new features were added.
+
+• API:
+ • Passing 0 to |nvim_get_chan_info()| gets info about the current channel.
+ • |nvim_buf_set_extmark()| supports inline virtual text.
+ • |nvim_win_text_height()| computes the number of screen lines occupied
+ by a range of text in a given window.
+ • New RPC client type `msgpack-rpc` is added for |nvim_set_client_info()| to
+ support fully MessagePack-RPC compliant clients.
+ • Floating windows can now be hidden by setting `hide` in |nvim_open_win()| or
+ |nvim_win_set_config()|.
+ • |nvim_input_mouse()| supports mouse buttons "x1" and "x2".
+ • Added "force_crlf" option field in |nvim_open_term()|.
+ • Added |nvim_tabpage_set_win()| to set the current window of a tabpage.
+ • |nvim__win_add_ns()| can bind a |namespace| to a window-local scope(s).
+ • Extmarks opt-in to this scoping via the `scoped` flag of |nvim_buf_set_extmark()|.
+ • Mapping APIs now support abbreviations when mode short-name has suffix "a".
+ • Floating windows can now show footer with new `footer` and `footer_pos`
+ config fields. Uses |hl-FloatFooter| by default.
+ • |extmarks| can set a "url" highlight attribute, so the text region can
+ become a clickable hyperlink (assuming UI support). The TUI renders URLs
+ using the OSC 8 control sequence, enabling clickable text in supporting
+ terminals.
+ • |nvim_open_win()| and |nvim_win_set_config()| now support opening normal
+ (split) windows, moving floating windows into split windows, and opening
+ windows in non-current tabpages.
+ • Flags added to |nvim_buf_set_extmark()|:
+ • "undo_restore": opt-out extmarks of precise undo tracking.
+ • "invalidate": automatically hide or delete extmarks.
+ • "virt_text_repeat_linebreak": repeat virtual text on wrapped lines.
+ • Extmarks now fully support multi-line ranges, and a single extmark can be
+ used to highlight a range of arbitrary length. The |nvim_buf_set_extmark()|
+ API function already allowed you to define such ranges, but highlight
+ regions were not rendered consistently for a range that covers more than
+ one line break. This has now been fixed. Signs defined as part of
+ a multi-line extmark also apply to every line in the range, not just the
+ first. In addition, |nvim_buf_get_extmarks()| has gained an "overlap"
+ option to return such ranges even if they started before the specified
+ position.
+
+• Defaults:
+ • The `workspace/didChangeWatchedFiles` LSP client capability is now enabled
+ by default on Mac and Windows. Disabled on Linux since there currently
+ isn't a viable backend for watching files that scales well for large
+ directories.
+ • On Windows 'isfname' does not include ":". Drive letters are handled
+ correctly without it. (Use |gF| for filepaths suffixed with ":line:col").
+ • 'comments' includes "fb:•".
+ • 'shortmess' includes the "C" flag.
+ • 'grepprg' uses the -H and -I flags for grep by default,
+ and defaults to using ripgrep if available.
+ • "]d" and "[d" in Normal mode map to |vim.diagnostic.goto_next()| and
+ |vim.diagnostic.goto_prev()|, respectively. |]d-default| |[d-default|
+ • <C-W>d (and <C-W><C-D>) map to |vim.diagnostic.open_float()|
+ |CTRL-W_d-default|
+ • |vim.lsp.start()| sets the following default keymaps (assuming server
+ support):
+ • |K| in Normal mode maps to |vim.lsp.buf.hover()|, unless 'keywordprg'
+ was customized before calling |vim.lsp.start()|.
+ • Automatic linting of treesitter query files (see |ft-query-plugin|).
+ Can be disabled via: >lua
+ vim.g.query_lint_on = {}
+<
+ • Enabled treesitter highlighting for:
+ • Treesitter query files
+ • Vim help files
+ • Lua files
+
+• Editor:
+ • Better cmdline completion for string option value. |complete-set-option|
+ • Try it with `:set listchars=<Tab>`
+ • By default, the swapfile "ATTENTION" |E325| dialog is skipped if the
+ swapfile is owned by a running Nvim process, instead of prompting. If you
+ always want the swapfile dialog, delete the default SwapExists handler:
+ `autocmd! nvim_swapfile`. |default-autocmds|
+ • Navigating the |jumplist| with CTRL+O, CTRL+I behaves more intuitively
+ when deleting buffers, and avoids "invalid buffer" cases. #25461
+ • |:fclose| command.
+ • |v_Q-default| and |v_@-default| repeat a register for each line of a linewise
+ visual selection.
+ • Clicking on a tabpage in the tabline with the middle mouse button closes it.
+ • |:checkhealth| buffer can be opened in a split window using modifiers like
+ |:vertical|, |:horizontal| and |:botright|.
+
+• Events:
+ • |vim.on_key()| callbacks receive a second argument for keys typed before
+ mappings are applied.
+
+• LSP:
+ • LSP method names are available in |vim.lsp.protocol.Methods|.
+ • Implemented LSP inlay hints: |lsp-inlay_hint|
+ https://microsoft.github.io/language-server-protocol/specification/#textDocument_inlayHint
+ • Implemented pull diagnostic textDocument/diagnostic: |vim.lsp.diagnostic.on_diagnostic()|
+ https://microsoft.github.io/language-server-protocol/specification/#textDocument_diagnostic
+ • Implemented LSP type hierarchy: |vim.lsp.buf.typehierarchy()|
+ https://microsoft.github.io/language-server-protocol/specification/#textDocument_prepareTypeHierarchy
+ • |vim.lsp.status()| consumes the last progress messages as a string.
+ • LSP client now always saves and restores named buffer marks when applying
+ text edits.
+ • LSP client now supports the `positionEncoding` server capability. If a server
+ responds with the `positionEncoding` capability in its initialization
+ response, Nvim automatically sets the client's `offset_encoding` field.
+ • Dynamic registration of LSP capabilities. An implication of this change is
+ that checking a client's `server_capabilities` is no longer a sufficient
+ indicator to see if a server supports a feature. Instead use
+ `client.supports_method(<method>)`. It considers both the dynamic
+ capabilities and static `server_capabilities`.
+ • `anchor_bias` option to |lsp-handlers| aids in positioning of floating
+ windows.
+ • |vim.lsp.util.locations_to_items()| sets the `user_data` of each item to
+ the original LSP `Location` or `LocationLink`.
+ • Added support for connecting to servers using named pipes (Windows) or
+ Unix domain sockets (Unix) via |vim.lsp.rpc.connect()|.
+ • Added support for `completionList.itemDefaults`, reducing overhead when
+ computing completion items where properties often share the same value
+ (e.g. `commitCharacters`). Note that this might affect plugins and
+ language servers that don't support the feature, and in such cases the
+ respective capability can be unset.
+ • |vim.lsp.start()| accepts a "silent" option for suppressing messages
+ if an LSP server failed to start.
+ • |vim.lsp.buf.definition()|, |vim.lsp.buf.declaration()|,
+ |vim.lsp.buf.type_definition()|, and |vim.lsp.buf.implementation()| now
+ support the `loclist` field of |vim.lsp.ListOpts|.
+
+• Lua:
+ • |:lua| with a |[range]| executes that range as Lua code, in any buffer.
+ • |:source| without arguments treats a buffer with 'filetype' of "lua" as
+ Lua code regardless of its extension.
+ • Vimscript function |exists()| supports checking |v:lua| functions.
+ • |vim.iter()| is a generic interface for all |iterable| objects (tables,
+ |iterator|s).
+ • |vim.snippet| provides a mode for expanding and navigating snippets.
+ • |vim.ringbuf()| is a generic ring buffer (data structure).
+ • |vim.deepcopy()| gained a `noref` argument to avoid hashing table values.
+ • |vim.keycode()| translates keycodes in a string.
+ • |vim.system()| runs commands / starts processes.
+ • |vim.lpeg| and |vim.re| expose the bundled Lpeg expression grammar parser
+ and its regex interface.
+ • |vim.base64.encode()| and |vim.base64.decode()| encode and decode strings
+ using Base64 encoding.
+ • |vim.text.hexencode()| and |vim.text.hexdecode()| convert strings to and
+ from byte representations.
+ • |vim.ui.open()| opens URIs using the system default handler (macOS `open`,
+ Windows `explorer`, Linux `xdg-open`, etc.)
+ • |vim.wo| can now be double indexed for |:setlocal| behaviour. Currently
+ only `0` for the buffer index is supported.
+ • Improved messages for type errors in `vim.api.*` calls (including `opts` params).
+ • Lua type annotations for:
+ • `vim.*`
+ • `vim.fn.*`
+ • `vim.api.*`
+ • `vim.v.*`
+ • Functions that take a severity as an optional parameter (e.g.
+ |vim.diagnostic.get()|) now also accept a list of severities |vim.diagnostic.severity|
+ • |vim.diagnostic.count()| returns the number of diagnostics for a given
+ buffer and/or namespace, by severity. This is a faster alternative to
+ |vim.diagnostic.get()| when only the number of diagnostics is needed, but
+ not the diagnostics themselves.
+ • |vim.diagnostic.is_enabled()|
+ • |vim.version.le()|, |vim.version.ge()|
+ • |vim.fs.root()| finds project root directories from a list of "root
+ markers".
+ • |vim.tbl_contains()| now works for general tables and allows specifying
+ a predicate function that is checked for each value. (Use
+ |vim.list_contains()| for checking list-like tables (integer keys without
+ gaps) for literal values.)
+ • |vim.region()| can use a string accepted by |getpos()| as position.
+
+• Options:
+ • 'winfixbuf' keeps a window focused onto a specific buffer
+ • 'smoothscroll' option to scroll by screen line rather than by text line
+ when 'wrap' is set.
+ • 'foldtext' now supports virtual text format. |fold-foldtext|
+ • 'foldtext' can be set to an empty string to disable and render the line:
+ as normal with regular highlighting and no line wrapping.
+ • 'complete' option supports "f" flag for completing buffer names.
+ • 'completeopt' option supports "popup" flag to show extra information in
+ a floating window.
+ • 'errorfile' (|-q|) accepts `-` as an alias for stdin.
+
+• Performance:
+ • 'diffopt' "linematch" scoring algorithm now favours larger and less groups
+ https://github.com/neovim/neovim/pull/23611
+ • Treesitter highlighting now parses injections incrementally during
+ screen redraws only for the line range being rendered. This significantly
+ improves performance in large files with many injections.
+ • 'breakindent' performance is significantly improved for wrapped lines.
+ • Cursor movement, insertion with [count] and |screenpos()| are now faster.
+
+• Plugins:
+ • Nvim now includes |commenting| support.
+ • |:Man| supports the `:hide` modifier to open page in the current window.
+ • |:Man| respects 'wrapmargin'
+
+• Startup:
+ • |$NVIM_APPNAME| can be set to a relative path instead of only a name.
+ • |--startuptime| reports startup times for both processes (TUI + server) as
+ separate sections.
+
+• Terminal:
+ • |:terminal| accepts some |:command-modifiers| (specifically |:horizontal|
+ and those that affect splitting a window).
+ • Terminal buffers emit a |TermRequest| autocommand event when the child
+ process emits an OSC or DCS control sequence.
+ • Terminal buffers respond to OSC background and foreground requests.
+ |default-autocmds|
+
+• Treesitter:
+ • Bundled parsers and queries (highlight, folds) for Markdown, Python, and
+ Bash.
+ • |:InspectTree| shows root nodes.
+ • |:InspectTree| now supports |folding|.
+ • |:InspectTree| shows node ranges in 0-based instead of 1-based indexing.
+ • |vim.treesitter.foldexpr()| now recognizes folds captured using a
+ quantified query pattern.
+ • |vim.treesitter.query.omnifunc()| provides completion in treesitter query
+ files (set by default).
+ • |vim.treesitter.query.edit()| provides live editing of treesitter queries.
+ • |Query:iter_matches()| now has the ability to set the maximum start depth
+ for matches.
+ • `@injection.language` now has smarter resolution and will fall back to
+ language aliases (e.g., filetype or custom shorthands) registered via
+ |vim.treesitter.language.register()| and/or attempt lower case variants of
+ the text.
+ • `@injection.filename` will try to match the node text via
+ |vim.filetype.match()| and treat the result as a language name in the same
+ way as `@injection.language`.
+ • The `#set!` directive supports `injection.self` and `injection.parent` for
+ injecting either the current node's language or the parent
+ |LanguageTree|'s language, respectively.
+ • The `#set!` directive can set the "url" property of a node to have the
+ node emit a hyperlink. Hyperlinks are UI specific: in the TUI, the OSC 8
+ control sequence is used.
+ • Improved error messages for query parsing.
+
+• TUI:
+ • Builtin TUI can now recognize "super" (|<D-|) and "meta" (|<T-|) modifiers
+ in a terminal emulator that supports |tui-csiu|.
+ • The |TermResponse| event can be used with |v:termresponse| to read escape
+ sequence responses from the host terminal.
+ • A clipboard provider which uses OSC 52 to copy the selection to the system
+ clipboard is now bundled by default and will be automatically enabled under
+ certain conditions. |clipboard-osc52|
+ • 'termsync' option asks the host terminal to buffer screen updates until
+ the redraw cycle is complete. Requires support from the host terminal.
+
+• UI:
+ • Enhanced support for rendering multibyte characters using composing
+ characters: the maximum limit was increased from 1+6 codepoints to
+ 31 bytes, which is guaranteed to fit all chars from before but often more.
+ • NOTE: the regexp engine still has a hard-coded limit of considering
+ 6 composing chars only.
+
+
+==============================================================================
+CHANGED FEATURES
+
+These existing features changed their behavior.
+
+• API:
+ • |nvim_buf_call()| and |nvim_win_call()| now preserve any return value (NB:
+ not multiple return values)
+
+• Editor:
+ • |gx| now uses |vim.ui.open()| and not netrw. To customize, you can redefine
+ `vim.ui.open` or remap `gx`. To continue using netrw (deprecated): >vim
+ :call netrw#BrowseX(expand(exists("g:netrw_gx") ? g:netrw_gx : '<cfile>'), netrw#CheckIfRemote())<CR>
+
+• LSP:
+ • LSP hover and signature help now use Treesitter for highlighting of
+ Markdown content. Note that highlighting of code examples requires
+ a matching parser and may be affected by custom queries.
+ • |LspRequest| autocmd callbacks contain more information about the LSP
+ request status update that occurred.
+
+• Lua:
+ • |vim.wait()| cannot be called in |api-fast|.
+ • |vim.diagnostic.config()| now accepts virtual text relevant options to
+ |nvim_buf_set_extmark()| (e.g. "virt_text_pos" and "hl_mode") in its
+ "virtual_text" table, which gives users more control over how diagnostic
+ virtual text is displayed.
+ • |vim.diagnostic.get()| and |vim.diagnostic.count()| accept multiple
+ namespaces rather than just a single namespace.
+ • |vim.diagnostic.enable()| gained new parameters, and the old signature is
+ deprecated.
+ • |vim.diagnostic.config()| now accepts a function for the virtual_text.prefix
+ option, which allows for rendering e.g., diagnostic severities differently.
+
+• Options:
+ • Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no
+ longer gives an error.
+
+• Terminal:
+ • Terminal buffers started with no arguments (and use 'shell') close
+ automatically if the job exited without error, eliminating the (often
+ unwanted) "[Process exited 0]" message. |default-autocmds|
+
+• Treesitter:
+ • |Query:iter_matches()|, |vim.treesitter.query.add_predicate()|, and
+ |vim.treesitter.query.add_directive()| accept a new `all` option which
+ ensures that all matching nodes are returned as a table. The default option
+ `all=false` returns only a single node, breaking captures with quantifiers
+ like `(comment)+ @comment`; it is only provided for backward compatibility
+ and will be removed after Nvim 0.10.
+ • |vim.treesitter.query.add_predicate()| and
+ |vim.treesitter.query.add_directive()| now accept an options table rather
+ than a boolean "force" argument. To force a predicate or directive to
+ override an existing predicate or directive, use `{ force = true }`.
+
+==============================================================================
+REMOVED FEATURES
+
+These deprecated features were removed.
+
+• Vimball support, including `:Vimuntar` command
+
+• Support for legacy treesitter injection queries
+
+• 'shortmess' flags:
+ • |shm-f|. Always use "(3 of 5)", never "(file 3 of 5)".
+ • |shm-i|. Always use "[noeol]".
+ • |shm-x|. Always use "[dos]", "[unix]" and "[mac]".
+ • |shm-n|. Always use "[New]".
+
+==============================================================================
+DEPRECATIONS
+
+See |deprecated-0.10|.
+
+ vim:tw=78:ts=8:sw=2:et:ft=help:norl:
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 6889ce32fd..a1859d19cf 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -4,395 +4,125 @@
NVIM REFERENCE MANUAL
-Notable changes since Nvim 0.9 *news*
+Notable changes since Nvim 0.10 *news*
-For changes in the previous release, see |news-0.9|.
+For changes in the previous release, see |news-0.10|.
Type |gO| to see the table of contents.
==============================================================================
+BREAKING CHANGES IN HEAD *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).
+
+==============================================================================
BREAKING CHANGES *news-breaking*
These changes may require adaptations in your config or plugins.
-• API:
- • |nvim_open_win()| now blocks all autocommands when `noautocmd` is set,
- rather than just those from setting the `buffer` to display in the window.
-
-• Defaults:
- • Default color scheme has been updated to be "Nvim branded" and accessible.
- Use `:colorscheme vim` to revert to the old legacy color scheme.
- • These Nvim specific highlight groups are now defined in a meaningfully
- different way and might need an update:
- • |hl-FloatBorder| is linked to |hl-NormalFloat| instead of |hl-WinSeparator|.
- • |hl-NormalFloat| is not linked to |hl-Pmenu|.
- • |hl-WinBar| has different background.
- • |hl-WinBarNC| is similar to |hl-WinBar| but not bold.
- • |hl-WinSeparator| is linked to |hl-Normal| instead of |hl-VertSplit|.
- • This also might result into some color schemes looking differently due
- to them relying on implicit assumptions about how highlight groups are
- defined by default. To account for this, define all attributes of
- highlight groups explicitly. Alternatively, use `:colorscheme vim` or
- `:source $VIMRUNTIME/colors/vim.lua` to restore previous definitions.
- • 'termguicolors' is enabled by default when Nvim is able to determine that
- the host terminal emulator supports 24-bit color.
-
-• Editor:
- • When switching windows, |CursorMoved| autocommands trigger when Nvim is
- back on the main loop rather than immediately. This is more compatible
- with Vim.
- • "#" followed by a digit no longer stands for a function key at the start
- of the lhs of a mapping.
- • |shm-q| now fully hides macro recording message instead of only shortening it.
- • Signs placed through the legacy |sign-commands| are now stored and
- displayed as |extmarks| internally. Along with the following changes:
- • A sign placed twice in the same group with the same identifier will be
- moved.
- • Legacy signs are always deleted along with the line it is placed on.
- • Legacy and extmark signs will show up in both |:sign-place-list| and
- |nvim_buf_get_extmarks()|.
- • Legacy and extmark signs are displayed and listed with the same priority:
- line number -> priority -> sign id -> recently placed
- • `:behave` was removed.
- • If you used `:behave xterm`, the following is equivalent: >vim
-
- set mousemodel=extend
-<
- • If you used `:behave mswin`, the following is equivalent: >vim
-
- set selection=exclusive
- set selectmode=mouse,key
- set mousemodel=popup
- set keymodel=startsel,stopsel
-<
-• Events:
- • Returning any truthy value from a callback passed to
- |nvim_create_autocmd()| (rather than just `true`) will delete the
- autocommand.
-
-• LSP:
- • |LanguageTree:parse()| will no longer parse injections by default and now
- requires an explicit range argument to be passed. If injections are
- required, provide an explicit range via `parser:parse({ start_row, end_row })`.
- • |vim.lsp.util.parse_snippet()| will now strictly follow the snippet
- grammar defined by LSP, and hence previously parsed snippets might now be
- considered invalid input.
- • |vim.lsp.codelens.refresh()| now takes an `opts` argument. With this
- change, the default behavior of just refreshing the current buffer has
- been replaced by refreshing all buffers.
- • |vim.lsp.util.extract_completion_items()| will no longer return reliable
- results, since it does not apply `itemDefaults` when its input is
- a `CompletionList`. Moreover, since support for LSP
- `completionList.itemDefaults` was added, some third party plugins might be
- negatively impacted in case the language servers support the feature but
- the plugin does not. If necessary, the respective capability can be
- removed when calling |vim.lsp.protocol.make_client_capabilities()|.
- • |LspRequest| and LspProgressUpdate (renamed to |LspProgress|) autocmds
- were promoted from |User| autocmds to first class citizens.
-
-• Lua:
- • |-l| ensures output ends with a newline if the script prints messages and
- doesn't cause Nvim to exit.
- • Removed functions from the |vim.json| module:
- • Unnecessary, undocumented functions which caused global side-effects.
- • `vim.json.null` is redundant with `vim.NIL`.
- • `vim.json.array_mt` (and related) is redundant with `vim.empty_dict()`.
- • |vim.islist()| now checks whether a table is actually list-like (i.e., has
- integer keys without gaps and starting from 1). For the previous behavior
- (only check for integer keys, allow gaps or not starting with 1), use
- |vim.isarray()|.
- • Renamed `vim.treesitter.playground` to `vim.treesitter.dev`.
-
-• Options:
- • Removed some Vim 5.0<= option compatibilities:
- • 'backspace' no longer supports number values. Instead:
- • for `backspace=0` set `backspace=` (empty)
- • for `backspace=1` set `backspace=indent,eol`
- • for `backspace=2` set `backspace=indent,eol,start` (default behavior in Nvim)
- • for `backspace=3` set `backspace=indent,eol,nostop`
- • 'backupdir' and 'directory' will no longer remove a `>` at the start of
- the option.
- • |OptionSet| autocommand args |v:option_new|, |v:option_old|,
- |v:option_oldlocal|, |v:option_oldglobal| now have the type of the option
- instead of always being strings. |v:option_old| is now the old global
- value for all global-local options, instead of just string global-local
- options.
- • Local value for a global-local number/boolean option is now unset when the
- option is set (e.g. using |:set| or |nvim_set_option_value()|) without
- a scope, which means they now behave the same way as string options.
-
-• Plugins:
- • |:TOhtml| has been rewritten in Lua to support Nvim-specific decorations,
- and many options have been removed.
-
-• Treesitter:
- • Treesitter highlight groups have been renamed to be more in line with
- upstream tree-sitter and Helix to make it easier to share queries. The
- full list is documented in |treesitter-highlight-groups|.
-
-• TUI:
- • In some cases, the cursor in the Nvim |TUI| used to blink even without
- configuring 'guicursor' as mentioned in |cursor-blinking|. This was a bug
- that has now been fixed. If your cursor has stopped blinking, add the
- following (or similar, adapted to user preference) to your |config| file: >vim
- set guicursor+=n-v-c:blinkon500-blinkoff500
-<
+API
+
+• TODO
+
+DEFAULTS
+
+• TODO
+
+EDITOR
+
+• TODO
+
+EVENTS
+
+• TODO
+
+LSP
+
+• TODO
+
+LUA
+
+• TODO
+
+OPTIONS
+
+• TODO
+
+PLUGINS
+
+• TODO
+
+TREESITTER
+
+• TODO
+
+TUI
+
+• TODO
==============================================================================
NEW FEATURES *news-features*
The following new features were added.
-• API:
- • Passing 0 to |nvim_get_chan_info()| gets info about the current channel.
- • |nvim_buf_set_extmark()| supports inline virtual text.
- • |nvim_win_text_height()| computes the number of screen lines occupied
- by a range of text in a given window.
- • New RPC client type `msgpack-rpc` is added for |nvim_set_client_info()| to
- support fully MessagePack-RPC compliant clients.
- • Floating windows can now be hidden by setting `hide` in |nvim_open_win()| or
- |nvim_win_set_config()|.
- • |nvim_input_mouse()| supports mouse buttons "x1" and "x2".
- • Added "force_crlf" option field in |nvim_open_term()|.
- • Added |nvim_tabpage_set_win()| to set the current window of a tabpage.
- • |nvim__win_add_ns()| can bind a |namespace| to a window-local scope(s).
- • Extmarks opt-in to this scoping via the `scoped` flag of |nvim_buf_set_extmark()|.
- • Mapping APIs now support abbreviations when mode short-name has suffix "a".
- • Floating windows can now show footer with new `footer` and `footer_pos`
- config fields. Uses |hl-FloatFooter| by default.
- • |extmarks| can set a "url" highlight attribute, so the text region can
- become a clickable hyperlink (assuming UI support). The TUI renders URLs
- using the OSC 8 control sequence, enabling clickable text in supporting
- terminals.
- • |nvim_open_win()| and |nvim_win_set_config()| now support opening normal
- (split) windows, moving floating windows into split windows, and opening
- windows in non-current tabpages.
- • Flags added to |nvim_buf_set_extmark()|:
- • "undo_restore": opt-out extmarks of precise undo tracking.
- • "invalidate": automatically hide or delete extmarks.
- • "virt_text_repeat_linebreak": repeat virtual text on wrapped lines.
- • Extmarks now fully support multi-line ranges, and a single extmark can be
- used to highlight a range of arbitrary length. The |nvim_buf_set_extmark()|
- API function already allowed you to define such ranges, but highlight
- regions were not rendered consistently for a range that covers more than
- one line break. This has now been fixed. Signs defined as part of
- a multi-line extmark also apply to every line in the range, not just the
- first. In addition, |nvim_buf_get_extmarks()| has gained an "overlap"
- option to return such ranges even if they started before the specified
- position.
-
-• Defaults:
- • The `workspace/didChangeWatchedFiles` LSP client capability is now enabled
- by default on Mac and Windows. Disabled on Linux since there currently
- isn't a viable backend for watching files that scales well for large
- directories.
- • On Windows 'isfname' does not include ":". Drive letters are handled
- correctly without it. (Use |gF| for filepaths suffixed with ":line:col").
- • 'comments' includes "fb:•".
- • 'shortmess' includes the "C" flag.
- • 'grepprg' uses the -H and -I flags for grep by default,
- and defaults to using ripgrep if available.
- • "]d" and "[d" in Normal mode map to |vim.diagnostic.goto_next()| and
- |vim.diagnostic.goto_prev()|, respectively. |]d-default| |[d-default|
- • <C-W>d (and <C-W><C-D>) map to |vim.diagnostic.open_float()|
- |CTRL-W_d-default|
- • |vim.lsp.start()| sets the following default keymaps (assuming server
- support):
- • |K| in Normal mode maps to |vim.lsp.buf.hover()|, unless 'keywordprg'
- was customized before calling |vim.lsp.start()|.
- • Automatic linting of treesitter query files (see |ft-query-plugin|).
- Can be disabled via: >lua
- vim.g.query_lint_on = {}
-<
- • Enabled treesitter highlighting for:
- • Treesitter query files
- • Vim help files
- • Lua files
-
-• Editor:
- • Better cmdline completion for string option value. |complete-set-option|
- • Try it with `:set listchars=<Tab>`
- • By default, the swapfile "ATTENTION" |E325| dialog is skipped if the
- swapfile is owned by a running Nvim process, instead of prompting. If you
- always want the swapfile dialog, delete the default SwapExists handler:
- `autocmd! nvim_swapfile`. |default-autocmds|
- • Navigating the |jumplist| with CTRL+O, CTRL+I behaves more intuitively
- when deleting buffers, and avoids "invalid buffer" cases. #25461
- • |:fclose| command.
- • |v_Q-default| and |v_@-default| repeat a register for each line of a linewise
- visual selection.
- • Clicking on a tabpage in the tabline with the middle mouse button closes it.
- • |:checkhealth| buffer can be opened in a split window using modifiers like
- |:vertical|, |:horizontal| and |:botright|.
-
-• Events:
- • |vim.on_key()| callbacks receive a second argument for keys typed before
- mappings are applied.
-
-• LSP:
- • LSP method names are available in |vim.lsp.protocol.Methods|.
- • Implemented LSP inlay hints: |lsp-inlay_hint|
- https://microsoft.github.io/language-server-protocol/specification/#textDocument_inlayHint
- • Implemented pull diagnostic textDocument/diagnostic: |vim.lsp.diagnostic.on_diagnostic()|
- https://microsoft.github.io/language-server-protocol/specification/#textDocument_diagnostic
- • Implemented LSP type hierarchy: |vim.lsp.buf.typehierarchy()|
- https://microsoft.github.io/language-server-protocol/specification/#textDocument_prepareTypeHierarchy
- • |vim.lsp.status()| consumes the last progress messages as a string.
- • LSP client now always saves and restores named buffer marks when applying
- text edits.
- • LSP client now supports the `positionEncoding` server capability. If a server
- responds with the `positionEncoding` capability in its initialization
- response, Nvim automatically sets the client's `offset_encoding` field.
- • Dynamic registration of LSP capabilities. An implication of this change is
- that checking a client's `server_capabilities` is no longer a sufficient
- indicator to see if a server supports a feature. Instead use
- `client.supports_method(<method>)`. It considers both the dynamic
- capabilities and static `server_capabilities`.
- • `anchor_bias` option to |lsp-handlers| aids in positioning of floating
- windows.
- • |vim.lsp.util.locations_to_items()| sets the `user_data` of each item to
- the original LSP `Location` or `LocationLink`.
- • Added support for connecting to servers using named pipes (Windows) or
- Unix domain sockets (Unix) via |vim.lsp.rpc.connect()|.
- • Added support for `completionList.itemDefaults`, reducing overhead when
- computing completion items where properties often share the same value
- (e.g. `commitCharacters`). Note that this might affect plugins and
- language servers that don't support the feature, and in such cases the
- respective capability can be unset.
- • |vim.lsp.start()| accepts a "silent" option for suppressing messages
- if an LSP server failed to start.
- • |vim.lsp.buf.definition()|, |vim.lsp.buf.declaration()|,
- |vim.lsp.buf.type_definition()|, and |vim.lsp.buf.implementation()| now
- support the `loclist` field of |vim.lsp.ListOpts|.
-
-• Lua:
- • |:lua| with a |[range]| executes that range as Lua code, in any buffer.
- • |:source| without arguments treats a buffer with 'filetype' of "lua" as
- Lua code regardless of its extension.
- • Vimscript function |exists()| supports checking |v:lua| functions.
- • |vim.iter()| is a generic interface for all |iterable| objects (tables,
- |iterator|s).
- • |vim.snippet| provides a mode for expanding and navigating snippets.
- • |vim.ringbuf()| is a generic ring buffer (data structure).
- • |vim.deepcopy()| gained a `noref` argument to avoid hashing table values.
- • |vim.keycode()| translates keycodes in a string.
- • |vim.system()| runs commands / starts processes.
- • |vim.lpeg| and |vim.re| expose the bundled Lpeg expression grammar parser
- and its regex interface.
- • |vim.base64.encode()| and |vim.base64.decode()| encode and decode strings
- using Base64 encoding.
- • |vim.text.hexencode()| and |vim.text.hexdecode()| convert strings to and
- from byte representations.
- • |vim.ui.open()| opens URIs using the system default handler (macOS `open`,
- Windows `explorer`, Linux `xdg-open`, etc.)
- • |vim.wo| can now be double indexed for |:setlocal| behaviour. Currently
- only `0` for the buffer index is supported.
- • Improved messages for type errors in `vim.api.*` calls (including `opts` params).
- • Lua type annotations for:
- • `vim.*`
- • `vim.fn.*`
- • `vim.api.*`
- • `vim.v.*`
- • Functions that take a severity as an optional parameter (e.g.
- |vim.diagnostic.get()|) now also accept a list of severities |vim.diagnostic.severity|
- • |vim.diagnostic.count()| returns the number of diagnostics for a given
- buffer and/or namespace, by severity. This is a faster alternative to
- |vim.diagnostic.get()| when only the number of diagnostics is needed, but
- not the diagnostics themselves.
- • |vim.diagnostic.is_enabled()|
- • |vim.version.le()|, |vim.version.ge()|
- • |vim.fs.root()| finds project root directories from a list of "root
- markers".
- • |vim.tbl_contains()| now works for general tables and allows specifying
- a predicate function that is checked for each value. (Use
- |vim.list_contains()| for checking list-like tables (integer keys without
- gaps) for literal values.)
- • |vim.region()| can use a string accepted by |getpos()| as position.
-
-• Options:
- • 'winfixbuf' keeps a window focused onto a specific buffer
- • 'smoothscroll' option to scroll by screen line rather than by text line
- when 'wrap' is set.
- • 'foldtext' now supports virtual text format. |fold-foldtext|
- • 'foldtext' can be set to an empty string to disable and render the line:
- as normal with regular highlighting and no line wrapping.
- • 'complete' option supports "f" flag for completing buffer names.
- • 'completeopt' option supports "popup" flag to show extra information in
- a floating window.
- • 'errorfile' (|-q|) accepts `-` as an alias for stdin.
-
-• Performance:
- • 'diffopt' "linematch" scoring algorithm now favours larger and less groups
- https://github.com/neovim/neovim/pull/23611
- • Treesitter highlighting now parses injections incrementally during
- screen redraws only for the line range being rendered. This significantly
- improves performance in large files with many injections.
- • 'breakindent' performance is significantly improved for wrapped lines.
- • Cursor movement, insertion with [count] and |screenpos()| are now faster.
-
-• Plugins:
- • Nvim now includes |commenting| support.
- • |:Man| supports the `:hide` modifier to open page in the current window.
- • |:Man| respects 'wrapmargin'
-
-• Startup:
- • |$NVIM_APPNAME| can be set to a relative path instead of only a name.
- • |--startuptime| reports startup times for both processes (TUI + server) as
- separate sections.
-
-• Terminal:
- • |:terminal| accepts some |:command-modifiers| (specifically |:horizontal|
- and those that affect splitting a window).
- • Terminal buffers emit a |TermRequest| autocommand event when the child
- process emits an OSC or DCS control sequence.
- • Terminal buffers respond to OSC background and foreground requests.
- |default-autocmds|
-
-• Treesitter:
- • Bundled parsers and queries (highlight, folds) for Markdown, Python, and
- Bash.
- • |:InspectTree| shows root nodes.
- • |:InspectTree| now supports |folding|.
- • |:InspectTree| shows node ranges in 0-based instead of 1-based indexing.
- • |vim.treesitter.foldexpr()| now recognizes folds captured using a
- quantified query pattern.
- • |vim.treesitter.query.omnifunc()| provides completion in treesitter query
- files (set by default).
- • |vim.treesitter.query.edit()| provides live editing of treesitter queries.
- • |Query:iter_matches()| now has the ability to set the maximum start depth
- for matches.
- • `@injection.language` now has smarter resolution and will fall back to
- language aliases (e.g., filetype or custom shorthands) registered via
- |vim.treesitter.language.register()| and/or attempt lower case variants of
- the text.
- • `@injection.filename` will try to match the node text via
- |vim.filetype.match()| and treat the result as a language name in the same
- way as `@injection.language`.
- • The `#set!` directive supports `injection.self` and `injection.parent` for
- injecting either the current node's language or the parent
- |LanguageTree|'s language, respectively.
- • The `#set!` directive can set the "url" property of a node to have the
- node emit a hyperlink. Hyperlinks are UI specific: in the TUI, the OSC 8
- control sequence is used.
- • Improved error messages for query parsing.
-
-• TUI:
- • Builtin TUI can now recognize "super" (|<D-|) and "meta" (|<T-|) modifiers
- in a terminal emulator that supports |tui-csiu|.
- • The |TermResponse| event can be used with |v:termresponse| to read escape
- sequence responses from the host terminal.
- • A clipboard provider which uses OSC 52 to copy the selection to the system
- clipboard is now bundled by default and will be automatically enabled under
- certain conditions. |clipboard-osc52|
- • 'termsync' option asks the host terminal to buffer screen updates until
- the redraw cycle is complete. Requires support from the host terminal.
-
-• UI:
- • Enhanced support for rendering multibyte characters using composing
- characters: the maximum limit was increased from 1+6 codepoints to
- 31 bytes, which is guaranteed to fit all chars from before but often more.
- • NOTE: the regexp engine still has a hard-coded limit of considering
- 6 composing chars only.
+API
+
+• TODO
+
+DEFAULTS
+
+• TODO
+
+EDITOR
+
+• TODO
+
+EVENTS
+
+• TODO
+
+LSP
+
+• TODO
+
+LUA
+
+• TODO
+
+OPTIONS
+
+• TODO
+
+PERFORMANCE
+
+• TODO
+
+PLUGINS
+
+• TODO
+
+STARTUP
+
+• TODO
+
+TERMINAL
+
+• TODO
+
+TREESITTER
+
+• TODO
+
+TUI
+
+• TODO
+
+UI
+
+• TODO
==============================================================================
@@ -400,74 +130,18 @@ CHANGED FEATURES *news-changed*
These existing features changed their behavior.
-• API:
- • |nvim_buf_call()| and |nvim_win_call()| now preserve any return value (NB:
- not multiple return values)
-
-• Editor:
- • |gx| now uses |vim.ui.open()| and not netrw. To customize, you can redefine
- `vim.ui.open` or remap `gx`. To continue using netrw (deprecated): >vim
- :call netrw#BrowseX(expand(exists("g:netrw_gx") ? g:netrw_gx : '<cfile>'), netrw#CheckIfRemote())<CR>
-
-• LSP:
- • LSP hover and signature help now use Treesitter for highlighting of
- Markdown content. Note that highlighting of code examples requires
- a matching parser and may be affected by custom queries.
- • |LspRequest| autocmd callbacks contain more information about the LSP
- request status update that occurred.
-
-• Lua:
- • |vim.wait()| cannot be called in |api-fast|.
- • |vim.diagnostic.config()| now accepts virtual text relevant options to
- |nvim_buf_set_extmark()| (e.g. "virt_text_pos" and "hl_mode") in its
- "virtual_text" table, which gives users more control over how diagnostic
- virtual text is displayed.
- • |vim.diagnostic.get()| and |vim.diagnostic.count()| accept multiple
- namespaces rather than just a single namespace.
- • |vim.diagnostic.enable()| gained new parameters, and the old signature is
- deprecated.
- • |vim.diagnostic.config()| now accepts a function for the virtual_text.prefix
- option, which allows for rendering e.g., diagnostic severities differently.
-
-• Options:
- • Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no
- longer gives an error.
-
-• Terminal:
- • Terminal buffers started with no arguments (and use 'shell') close
- automatically if the job exited without error, eliminating the (often
- unwanted) "[Process exited 0]" message. |default-autocmds|
-
-• Treesitter:
- • |Query:iter_matches()|, |vim.treesitter.query.add_predicate()|, and
- |vim.treesitter.query.add_directive()| accept a new `all` option which
- ensures that all matching nodes are returned as a table. The default option
- `all=false` returns only a single node, breaking captures with quantifiers
- like `(comment)+ @comment`; it is only provided for backward compatibility
- and will be removed after Nvim 0.10.
- • |vim.treesitter.query.add_predicate()| and
- |vim.treesitter.query.add_directive()| now accept an options table rather
- than a boolean "force" argument. To force a predicate or directive to
- override an existing predicate or directive, use `{ force = true }`.
+• N/A
==============================================================================
REMOVED FEATURES *news-removed*
These deprecated features were removed.
-• Vimball support, including `:Vimuntar` command
-
-• Support for legacy treesitter injection queries
-
-• 'shortmess' flags:
- • |shm-f|. Always use "(3 of 5)", never "(file 3 of 5)".
- • |shm-i|. Always use "[noeol]".
- • |shm-x|. Always use "[dos]", "[unix]" and "[mac]".
- • |shm-n|. Always use "[New]".
+• N/A
==============================================================================
DEPRECATIONS *news-deprecations*
-See |deprecated-0.10|.
+See |deprecated-0.11|.
vim:tw=78:ts=8:sw=2:et:ft=help:norl:
diff --git a/scripts/gen_help_html.lua b/scripts/gen_help_html.lua
index 9f8b0f18ca..b33a94dca5 100644
--- a/scripts/gen_help_html.lua
+++ b/scripts/gen_help_html.lua
@@ -50,6 +50,7 @@ local spell_dict = {
local spell_ignore_files = {
['backers.txt'] = true,
['news.txt'] = { 'tree-sitter' }, -- in news, may refer to the upstream "tree-sitter" library
+ ['news-0.10.txt'] = { 'tree-sitter' },
}
local language = nil