docs: news, lsp autocomplete #33047

This commit is contained in:
Justin M. Keyes
2025-03-26 05:49:48 -07:00
committed by GitHub
parent 6b00c9acfd
commit 8a7e1b19b9
9 changed files with 51 additions and 56 deletions

View File

@@ -5805,7 +5805,9 @@ log10({expr}) *log10()*
luaeval({expr} [, {expr}]) *luaeval()* luaeval({expr} [, {expr}]) *luaeval()*
Evaluate Lua expression {expr} and return its result converted Evaluate Lua expression {expr} and return its result converted
to Vim data structures. See |lua-eval| for more details. to Vim data structures. See |lua-eval| for details.
See also |v:lua-call|.
Parameters: ~ Parameters: ~
• {expr} (`string`) • {expr} (`string`)

View File

@@ -791,14 +791,11 @@ Variables:
To use Nvim as a manpager: >bash To use Nvim as a manpager: >bash
export MANPAGER='nvim +Man!' export MANPAGER='nvim +Man!'
Note that when running `man` from the shell and with that `MANPAGER` in your Note: when running `man` from the shell with Nvim as `$MANPAGER`, `man` will
environment, `man` will pre-format the manpage using `groff`. Thus, Nvim pre-format the manpage using `groff`, and Nvim will display the manual page as
will inevitably display the manual page as it was passed to it from stdin. One it was received from stdin (it can't "undo" the hard-wrap caused by
of the caveats of this is that the width will _always_ be hard-wrapped and not man/groff). To prevent man/groff from hard-wrapping the manpage, you can set
soft wrapped as with `g:man_hardwrap=0`. You can set in your environment: >bash `$MANWIDTH=999` in your environment.
export MANWIDTH=999
So `groff`'s pre-formatting output will be the same as with `g:man_hardwrap=0` i.e soft-wrapped.
To disable bold highlighting: >vim To disable bold highlighting: >vim
:highlight link manBold Normal :highlight link manBold Normal

View File

@@ -64,6 +64,8 @@ Stop or detach the current UI
the channel to be closed, it may be (incorrectly) reported as the channel to be closed, it may be (incorrectly) reported as
an error. an error.
Note: Not supported on Windows, currently.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
GUI commands GUI commands

View File

@@ -201,6 +201,10 @@ Example: Enable auto-completion and auto-formatting ("linting"): >lua
-- Enable auto-completion. Note: Use CTRL-Y to select an item. |complete_CTRL-Y| -- Enable auto-completion. Note: Use CTRL-Y to select an item. |complete_CTRL-Y|
if client:supports_method('textDocument/completion') then if client:supports_method('textDocument/completion') then
-- Optional: trigger autocompletion on EVERY keypress. May be slow!
-- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end
-- client.server_capabilities.completionProvider.triggerCharacters = chars
vim.lsp.completion.enable(true, client.id, args.buf, {autotrigger = true}) vim.lsp.completion.enable(true, client.id, args.buf, {autotrigger = true})
end end
@@ -1881,12 +1885,27 @@ Example: activate LSP-driven auto-completion: >lua
}) })
< <
*lsp-autocompletion*
The LSP `triggerCharacters` field decides when to trigger autocompletion. If
you want to trigger on EVERY keypress you can either:
• Extend `client.server_capabilities.completionProvider.triggerCharacters` on
`LspAttach`, before you call
`vim.lsp.completion.enable(… {autotrigger=true})`. See the |lsp-attach|
example.
• Call `vim.lsp.completion.get()` from the handler described at
|compl-autocomplete|.
*vim.lsp.completion.enable()* *vim.lsp.completion.enable()*
enable({enable}, {client_id}, {bufnr}, {opts}) enable({enable}, {client_id}, {bufnr}, {opts})
Enables or disables completions from the given language client in the Enables or disables completions from the given language client in the
given buffer. Example: |lsp-attach| |lsp-completion| given buffer. Example: |lsp-attach| |lsp-completion|
Note: the behavior of `autotrigger=true` is controlled by the LSP
`triggerCharacters` field. You can override it on LspAttach, see
|lsp-autocompletion|.
Parameters: ~ Parameters: ~
• {enable} (`boolean`) True to enable, false to disable • {enable} (`boolean`) True to enable, false to disable
• {client_id} (`integer`) Client ID • {client_id} (`integer`) Client ID

View File

@@ -435,18 +435,12 @@ where the args are converted to Lua values. The expression >vim
is equivalent to the Lua chunk >lua is equivalent to the Lua chunk >lua
return somemod.func(...) return somemod.func(...)
In addition, functions of packages can be accessed like >vim Lua module functions can be accessed like: >vim
call v:lua.require'mypack'.func(arg1, arg2) call v:lua.require'mypack'.func(arg1, arg2)
call v:lua.require'mypack.submod'.func(arg1, arg2) call v:lua.require'mypack.submod'.func(arg1, arg2)
Note: Only single quote form without parens is allowed. Using Note: Only single quote form without parens is allowed. Using
`require"mypack"` or `require('mypack')` as prefixes do NOT work (the latter `require"mypack"` or `require('mypack')` as a prefix does NOT work.
is still valid as a function call of itself, in case require returns a useful
value).
The `v:lua` prefix may be used to call Lua functions as |method|s. For
example: >vim
:eval arg1->v:lua.somemod.func(arg2)
<
You can use `v:lua` in "func" options like 'tagfunc', 'omnifunc', etc. You can use `v:lua` in "func" options like 'tagfunc', 'omnifunc', etc.
For example consider the following Lua omnifunc handler: >lua For example consider the following Lua omnifunc handler: >lua
@@ -457,11 +451,13 @@ For example consider the following Lua omnifunc handler: >lua
return {'stuff', 'steam', 'strange things'} return {'stuff', 'steam', 'strange things'}
end end
end end
-- Note: The module ("mymod") must be a Lua global, or use require() as
-- shown above to access it from a package.
vim.bo[buf].omnifunc = 'v:lua.mymod.omnifunc' vim.bo[buf].omnifunc = 'v:lua.mymod.omnifunc'
Note: The module ("mymod" in the above example) must either be a Lua global, You can also use `v:lua` to call Lua functions as Vimscript |method|s: >vim
or use require() as shown above to access it from a package. :eval arg1->v:lua.somemod.func(arg2)
<
Note: `v:lua` without a call is not allowed in a Vimscript expression: Note: `v:lua` without a call is not allowed in a Vimscript expression:
|Funcref|s cannot represent Lua functions. The following are errors: >vim |Funcref|s cannot represent Lua functions. The following are errors: >vim

View File

@@ -10,39 +10,6 @@ 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 OR EXPERIMENTAL *news-breaking-dev*
====== Remove this section before release. ======
The following changes to UNRELEASED features were made during the development
cycle (Nvim HEAD, the "master" branch).
EXPERIMENTS
• Removed `vim.loader.disable()`. Use `vim.loader.enable(false)` instead.
LSP
• `lsp/` runtimepath files should return a table instead of calling
|vim.lsp.config()| (or assigning to `vim.lsp.config`). See |lsp-config|
• `vim.lsp.buf.document_symbol()` uses the |location-list| by default. Use
`vim.lsp.buf.document_symbol({ loclist = false })` to use the |quickfix|
list.
• `vim.lsp.completion.trigger()` has been renamed to
|vim.lsp.completion.get()|.
OPTIONS
• 'jumpoptions' flag "unload" has been renamed to "clean".
• The `msghistory` option has been removed in favor of 'messagesopt'.
TREESITTER
• *TSNode:child_containing_descendant()* has been removed in the tree-sitter
library and is no longer available; use |TSNode:child_with_descendant()|
instead.
============================================================================== ==============================================================================
BREAKING CHANGES *news-breaking* BREAKING CHANGES *news-breaking*
@@ -266,7 +233,6 @@ DIAGNOSTICS
EDITOR EDITOR
• Use |g==| in :help docs to execute Lua and Vimscript code examples.
• Improved |paste| handling for redo (dot-repeat) and macros (|recording|): • Improved |paste| handling for redo (dot-repeat) and macros (|recording|):
• Redoing a large paste is significantly faster and ignores 'autoindent'. • Redoing a large paste is significantly faster and ignores 'autoindent'.
• Replaying a macro with |@| also replays pasted text. • Replaying a macro with |@| also replays pasted text.

View File

@@ -22,6 +22,14 @@
--- end, --- end,
--- }) --- })
--- ``` --- ```
---
--- [lsp-autocompletion]()
---
--- The LSP `triggerCharacters` field decides when to trigger autocompletion. If you want to trigger
--- on EVERY keypress you can either:
--- - Extend `client.server_capabilities.completionProvider.triggerCharacters` on `LspAttach`,
--- before you call `vim.lsp.completion.enable(… {autotrigger=true})`. See the |lsp-attach| example.
--- - Call `vim.lsp.completion.get()` from the handler described at |compl-autocomplete|.
local M = {} local M = {}
@@ -781,6 +789,9 @@ end
--- Enables or disables completions from the given language client in the given buffer. --- Enables or disables completions from the given language client in the given buffer.
--- Example: |lsp-attach| |lsp-completion| --- Example: |lsp-attach| |lsp-completion|
--- ---
--- Note: the behavior of `autotrigger=true` is controlled by the LSP `triggerCharacters` field. You
--- can override it on LspAttach, see |lsp-autocompletion|.
---
--- @param enable boolean True to enable, false to disable --- @param enable boolean True to enable, false to disable
--- @param client_id integer Client ID --- @param client_id integer Client ID
--- @param bufnr integer Buffer handle, or 0 for the current buffer --- @param bufnr integer Buffer handle, or 0 for the current buffer

View File

@@ -6494,7 +6494,9 @@ M.funcs = {
base = 1, base = 1,
desc = [=[ desc = [=[
Evaluate Lua expression {expr} and return its result converted Evaluate Lua expression {expr} and return its result converted
to Vim data structures. See |lua-eval| for more details. to Vim data structures. See |lua-eval| for details.
See also |v:lua-call|.
]=], ]=],
lua = false, lua = false,

View File

@@ -518,7 +518,7 @@ void rpc_free(Channel *channel)
api_free_dict(channel->rpc.info); api_free_dict(channel->rpc.info);
} }
/// Logs a fatal error received from a channel, then closes the channel. /// Closes a channel after receiving fatal error, and logs a message.
static void chan_close_on_err(Channel *channel, char *msg, int loglevel) static void chan_close_on_err(Channel *channel, char *msg, int loglevel)
{ {
for (size_t i = 0; i < kv_size(channel->rpc.call_stack); i++) { for (size_t i = 0; i < kv_size(channel->rpc.call_stack); i++) {