mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 13:15:09 -07:00
docs: news #28773
This commit is contained in:
parent
ecee8ef8a9
commit
31dc627969
@ -12,6 +12,10 @@ They should not be used in new scripts, and old scripts should be updated.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
Deprecated features
|
Deprecated features
|
||||||
|
|
||||||
|
DEPRECATED IN 0.11 *deprecated-0.11*
|
||||||
|
|
||||||
|
• N/A
|
||||||
|
|
||||||
DEPRECATED IN 0.10 *deprecated-0.10*
|
DEPRECATED IN 0.10 *deprecated-0.10*
|
||||||
|
|
||||||
• Configuring |diagnostic-signs| using |:sign-define| or |sign_define()|. Use
|
• Configuring |diagnostic-signs| using |:sign-define| or |sign_define()|. Use
|
||||||
|
473
runtime/doc/news-0.10.txt
Normal file
473
runtime/doc/news-0.10.txt
Normal file
@ -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:
|
@ -4,395 +4,125 @@
|
|||||||
NVIM REFERENCE MANUAL
|
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.
|
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*
|
BREAKING CHANGES *news-breaking*
|
||||||
|
|
||||||
These changes may require adaptations in your config or plugins.
|
These changes may require adaptations in your config or plugins.
|
||||||
|
|
||||||
• API:
|
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:
|
• TODO
|
||||||
• 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:
|
DEFAULTS
|
||||||
• 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
|
• TODO
|
||||||
<
|
|
||||||
• If you used `:behave mswin`, the following is equivalent: >vim
|
|
||||||
|
|
||||||
set selection=exclusive
|
EDITOR
|
||||||
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:
|
• TODO
|
||||||
• |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:
|
EVENTS
|
||||||
• |-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:
|
• TODO
|
||||||
• 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:
|
LSP
|
||||||
• |:TOhtml| has been rewritten in Lua to support Nvim-specific decorations,
|
|
||||||
and many options have been removed.
|
|
||||||
|
|
||||||
• Treesitter:
|
• TODO
|
||||||
• 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:
|
LUA
|
||||||
• 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
|
• TODO
|
||||||
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
|
OPTIONS
|
||||||
set guicursor+=n-v-c:blinkon500-blinkoff500
|
|
||||||
<
|
• TODO
|
||||||
|
|
||||||
|
PLUGINS
|
||||||
|
|
||||||
|
• TODO
|
||||||
|
|
||||||
|
TREESITTER
|
||||||
|
|
||||||
|
• TODO
|
||||||
|
|
||||||
|
TUI
|
||||||
|
|
||||||
|
• TODO
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
NEW FEATURES *news-features*
|
NEW FEATURES *news-features*
|
||||||
|
|
||||||
The following new features were added.
|
The following new features were added.
|
||||||
|
|
||||||
• API:
|
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:
|
• TODO
|
||||||
• 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:
|
DEFAULTS
|
||||||
• 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:
|
• TODO
|
||||||
• |vim.on_key()| callbacks receive a second argument for keys typed before
|
|
||||||
mappings are applied.
|
|
||||||
|
|
||||||
• LSP:
|
EDITOR
|
||||||
• 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:
|
• TODO
|
||||||
• |: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:
|
EVENTS
|
||||||
• '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:
|
• TODO
|
||||||
• '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:
|
LSP
|
||||||
• Nvim now includes |commenting| support.
|
|
||||||
• |:Man| supports the `:hide` modifier to open page in the current window.
|
|
||||||
• |:Man| respects 'wrapmargin'
|
|
||||||
|
|
||||||
• Startup:
|
• TODO
|
||||||
• |$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:
|
LUA
|
||||||
• |: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:
|
• TODO
|
||||||
• 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:
|
OPTIONS
|
||||||
• 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:
|
• TODO
|
||||||
• Enhanced support for rendering multibyte characters using composing
|
|
||||||
characters: the maximum limit was increased from 1+6 codepoints to
|
PERFORMANCE
|
||||||
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
|
• TODO
|
||||||
6 composing chars only.
|
|
||||||
|
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.
|
These existing features changed their behavior.
|
||||||
|
|
||||||
• API:
|
• N/A
|
||||||
• |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 *news-removed*
|
REMOVED FEATURES *news-removed*
|
||||||
|
|
||||||
These deprecated features were removed.
|
These deprecated features were removed.
|
||||||
|
|
||||||
• Vimball support, including `:Vimuntar` command
|
• N/A
|
||||||
|
|
||||||
• 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 *news-deprecations*
|
DEPRECATIONS *news-deprecations*
|
||||||
|
|
||||||
See |deprecated-0.10|.
|
See |deprecated-0.11|.
|
||||||
|
|
||||||
vim:tw=78:ts=8:sw=2:et:ft=help:norl:
|
vim:tw=78:ts=8:sw=2:et:ft=help:norl:
|
||||||
|
@ -50,6 +50,7 @@ local spell_dict = {
|
|||||||
local spell_ignore_files = {
|
local spell_ignore_files = {
|
||||||
['backers.txt'] = true,
|
['backers.txt'] = true,
|
||||||
['news.txt'] = { 'tree-sitter' }, -- in news, may refer to the upstream "tree-sitter" library
|
['news.txt'] = { 'tree-sitter' }, -- in news, may refer to the upstream "tree-sitter" library
|
||||||
|
['news-0.10.txt'] = { 'tree-sitter' },
|
||||||
}
|
}
|
||||||
local language = nil
|
local language = nil
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user