mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	docs: misc #31479
This commit is contained in:
		| @@ -11,21 +11,20 @@ Nvim asynchronous IO					*channel* | |||||||
| ============================================================================== | ============================================================================== | ||||||
| 1. Introduction						    *channel-intro* | 1. Introduction						    *channel-intro* | ||||||
|  |  | ||||||
| Channels are nvim's way of communicating with external processes. | Channels are Nvim's way of communicating with external processes. | ||||||
|  |  | ||||||
| There are several ways to open a channel: | There are several ways to open a channel: | ||||||
|  |  | ||||||
|   1. Through stdin/stdout when `nvim` is started with `--headless`, and a startup |   1. Through stdin/stdout when `nvim` is started with `--headless` and a startup | ||||||
|      script or --cmd  command opens the stdio channel using |stdioopen()|. |      script or `--cmd` command opens the stdio channel using |stdioopen()|. | ||||||
|  |  | ||||||
|   2. Through stdin, stdout and stderr of a process spawned by |jobstart()|. |   2. Through stdin, stdout and stderr of a process spawned by |jobstart()|. | ||||||
|  |  | ||||||
|   3. Through the PTY master end of a PTY opened with |nvim_open_term()| or |   3. Through the PTY master end opened with `jobstart(…, {'pty': v:true})`. | ||||||
|      `jobstart(…, {'pty': v:true})`. |  | ||||||
|  |  | ||||||
|   4. By connecting to a TCP/IP socket or named pipe with |sockconnect()|. |   4. By connecting to a TCP/IP socket or named pipe with |sockconnect()|. | ||||||
|  |  | ||||||
|   5. By another process connecting to a socket listened to by nvim. This only |   5. By another process connecting to a socket listened to by Nvim. This only | ||||||
|      supports RPC channels, see |rpc-connecting|. |      supports RPC channels, see |rpc-connecting|. | ||||||
|  |  | ||||||
| Channels support multiple modes or protocols. In the most basic | Channels support multiple modes or protocols. In the most basic | ||||||
| @@ -146,7 +145,7 @@ from the host TTY, or if Nvim is |--headless| it uses default values: >vim | |||||||
|     :echo system('nvim --headless +"te stty -a" +"sleep 1" +"1,/^$/print" +q') |     :echo system('nvim --headless +"te stty -a" +"sleep 1" +"1,/^$/print" +q') | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| 3. Communicating using msgpack-rpc			      *channel-rpc* | 3. Communicating with msgpack RPC			      *channel-rpc* | ||||||
|  |  | ||||||
| When channels are opened with the `rpc` option set to true, the channel can be | When channels are opened with the `rpc` option set to true, the channel can be | ||||||
| used for remote method calls in both directions, see |msgpack-rpc|. Note that | used for remote method calls in both directions, see |msgpack-rpc|. Note that | ||||||
|   | |||||||
| @@ -17,10 +17,14 @@ TUI and GUI (assuming the UI supports the given feature). See |TUI| for notes | |||||||
| specific to the terminal UI. Help tags with the "gui-" prefix refer to UI | specific to the terminal UI. Help tags with the "gui-" prefix refer to UI | ||||||
| features, whereas help tags with the "ui-" prefix refer to the |ui-protocol|. | features, whereas help tags with the "ui-" prefix refer to the |ui-protocol|. | ||||||
|  |  | ||||||
| Nvim provides a default, builtin UI (the |TUI|), but there are many other | ============================================================================== | ||||||
| (third-party) GUIs that you can use instead: | Third-party GUIs                                *third-party-guis* *vscode* | ||||||
|  |  | ||||||
|  | Nvim provides a builtin "terminal UI" (|TUI|), but also works with many | ||||||
|  | (third-party) GUIs which may provide a fresh look or extra features on top of | ||||||
|  | Nvim. For example, "vscode-neovim" essentally allows you to use VSCode as | ||||||
|  | a Nvim GUI. | ||||||
|  |  | ||||||
|                                                         *vscode* |  | ||||||
| - vscode-neovim (Nvim in VSCode!) https://github.com/vscode-neovim/vscode-neovim | - vscode-neovim (Nvim in VSCode!) https://github.com/vscode-neovim/vscode-neovim | ||||||
| - Firenvim (Nvim in your web browser!) https://github.com/glacambre/firenvim | - Firenvim (Nvim in your web browser!) https://github.com/glacambre/firenvim | ||||||
| - Neovide https://neovide.dev/ | - Neovide https://neovide.dev/ | ||||||
|   | |||||||
| @@ -32,8 +32,9 @@ and |user-manual|. | |||||||
| Resources                                               *resources* | Resources                                               *resources* | ||||||
|  |  | ||||||
|                                                 *internet* *www* *distribution* |                                                 *internet* *www* *distribution* | ||||||
| - Nvim home page: https://neovim.io/ | Nvim home page: | ||||||
| - Vim FAQ: https://vimhelp.org/vim_faq.txt.html |  | ||||||
|  |         https://neovim.io/ | ||||||
|  |  | ||||||
|                                                 *book* |                                                 *book* | ||||||
| There are many resources to learn Vi, Vim, and Nvim.  We recommend: | There are many resources to learn Vi, Vim, and Nvim.  We recommend: | ||||||
| @@ -48,6 +49,7 @@ There are many resources to learn Vi, Vim, and Nvim.  We recommend: | |||||||
| - For more information try one of these: | - For more information try one of these: | ||||||
|   - https://iccf-holland.org/click5.html |   - https://iccf-holland.org/click5.html | ||||||
|   - https://www.vim.org/iccf/click5.html |   - https://www.vim.org/iccf/click5.html | ||||||
|  | - Vim FAQ: https://vimhelp.org/vim_faq.txt.html | ||||||
|  |  | ||||||
|                                                 *bugs* *bug-report* *feature-request* |                                                 *bugs* *bug-report* *feature-request* | ||||||
| Report bugs and request features here: https://github.com/neovim/neovim/issues | Report bugs and request features here: https://github.com/neovim/neovim/issues | ||||||
| @@ -67,18 +69,24 @@ To install or upgrade Nvim, you can... | |||||||
| - Build from source: | - Build from source: | ||||||
|   https://github.com/neovim/neovim/blob/master/INSTALL.md#install-from-source |   https://github.com/neovim/neovim/blob/master/INSTALL.md#install-from-source | ||||||
|  |  | ||||||
|                                                 *uninstall* | ------------------------------------------------------------------------------ | ||||||
|  | Un-installing Nvim                                      *uninstall* | ||||||
|  |  | ||||||
| To uninstall Nvim: | To uninstall Nvim: | ||||||
| - If you downloaded a pre-built archive or built Nvim from source (e.g. `make | - If you downloaded a pre-built archive or built Nvim from source (e.g. | ||||||
|   install`), just delete its files, typically located in: > |   `make install`), just delete its files, typically located in: > | ||||||
|   /usr/local/bin/nvim |   /usr/local/bin/nvim | ||||||
|   /usr/local/share/nvim |   /usr/local/share/nvim | ||||||
|  | < | ||||||
|  |   - To find where Nvim is installed, run these commands: > | ||||||
|  |     :echo v:progpath | ||||||
|  |     :echo $VIMRUNTIME | ||||||
| < | < | ||||||
| - If you installed via package manager, read your package manager's | - If you installed via package manager, read your package manager's | ||||||
|   documentation. Common examples: |   documentation. Common examples: | ||||||
|   - APT (Debian, Ubuntu, …): `apt-get remove neovim` |   - APT (Debian, Ubuntu, …): `apt-get remove neovim` | ||||||
|   - Homebrew (macOS): `brew install neovim` |   - Homebrew (macOS): `brew uninstall neovim` | ||||||
|   - Scoop (Windows): `scoop install neovim` |   - Scoop (Windows): `scoop uninstall neovim` | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| Sponsor Vim/Nvim development                            *sponsor* *register* | Sponsor Vim/Nvim development                            *sponsor* *register* | ||||||
|   | |||||||
| @@ -344,22 +344,17 @@ Each response handler has this signature: > | |||||||
|                                                       *lsp-handler-resolution* |                                                       *lsp-handler-resolution* | ||||||
| Handlers can be set by (in increasing priority): | Handlers can be set by (in increasing priority): | ||||||
|  |  | ||||||
| - Setting a field in vim.lsp.handlers.                      *vim.lsp.handlers* |                                                             *vim.lsp.handlers* | ||||||
|   `vim.lsp.handlers` is a global table that contains the default mapping of | - Setting a field in `vim.lsp.handlers`. This global table contains the | ||||||
|   |lsp-method| names to lsp-handlers. |   default mappings of |lsp-method| names to handlers. (Note: only for | ||||||
|  |   server-to-client requests/notifications, not client-to-server.) | ||||||
|   Example: >lua |   Example: >lua | ||||||
|  |  | ||||||
|     vim.lsp.handlers['textDocument/publishDiagnostics'] = my_custom_diagnostics_handler |     vim.lsp.handlers['textDocument/publishDiagnostics'] = my_custom_diagnostics_handler | ||||||
| < | < | ||||||
|   Note: this only applies for requests/notifications made by the | - Passing a {handlers} parameter to |vim.lsp.start()|. This sets the default | ||||||
|   server to the client. |   |lsp-handler| for a specific server. (Note: only for server-to-client | ||||||
|  |   requests/notifications, not client-to-server.) | ||||||
| - The {handlers} parameter of |vim.lsp.start()|. This sets the default |  | ||||||
|   |lsp-handler| for a specific server. |  | ||||||
|  |  | ||||||
|   Example: >lua |   Example: >lua | ||||||
|  |  | ||||||
|     vim.lsp.start { |     vim.lsp.start { | ||||||
|       ..., -- Other configuration omitted. |       ..., -- Other configuration omitted. | ||||||
|       handlers = { |       handlers = { | ||||||
| @@ -367,14 +362,9 @@ Handlers can be set by (in increasing priority): | |||||||
|       }, |       }, | ||||||
|     } |     } | ||||||
| < | < | ||||||
|   Note: this only applies for requests/notifications made by the | - Passing a {handler} parameter to |vim.lsp.buf_request_all()|. This sets the | ||||||
|   server to the client. |   |lsp-handler| ONLY for the given request(s). | ||||||
|  |  | ||||||
| - The {handler} parameter of |vim.lsp.buf_request_all()|. This sets |  | ||||||
|   the |lsp-handler| ONLY for the given request(s). |  | ||||||
|  |  | ||||||
|   Example: >lua |   Example: >lua | ||||||
|  |  | ||||||
|     vim.lsp.buf_request_all( |     vim.lsp.buf_request_all( | ||||||
|       0, |       0, | ||||||
|       'textDocument/publishDiagnostics', |       'textDocument/publishDiagnostics', | ||||||
|   | |||||||
| @@ -817,8 +817,8 @@ vim.json.encode({obj}, {opts})                             *vim.json.encode()* | |||||||
|     Parameters: ~ |     Parameters: ~ | ||||||
|       • {obj}   (`any`) |       • {obj}   (`any`) | ||||||
|       • {opts}  (`table<string,any>?`) Options table with keys: |       • {opts}  (`table<string,any>?`) Options table with keys: | ||||||
|                 • escape_slash: (boolean) (default false) When true, escapes |                 • escape_slash: (boolean) (default false) Escape slash | ||||||
|                   `/` character in JSON strings |                   characters "/" in string values. | ||||||
|  |  | ||||||
|     Return: ~ |     Return: ~ | ||||||
|         (`string`) |         (`string`) | ||||||
| @@ -3062,11 +3062,13 @@ vim.fs.find({names}, {opts})                                   *vim.fs.find()* | |||||||
|         items |         items | ||||||
|  |  | ||||||
| vim.fs.joinpath({...})                                     *vim.fs.joinpath()* | vim.fs.joinpath({...})                                     *vim.fs.joinpath()* | ||||||
|     Concatenates partial paths into one path. Slashes are normalized |     Concatenates partial paths (one absolute or relative path followed by zero | ||||||
|     (redundant slashes are removed, and on Windows backslashes are replaced |     or more relative paths). Slashes are normalized: redundant slashes are | ||||||
|     with forward-slashes) (e.g., `"foo/"` and `"/bar"` get joined to |     removed, and (on Windows) backslashes are replaced with forward-slashes. | ||||||
|     `"foo/bar"`) (windows: e.g `"a\foo\"` and `"\bar"` are joined to |  | ||||||
|     `"a/foo/bar"`) |     Examples: | ||||||
|  |     • "foo/", "/bar" => "foo/bar" | ||||||
|  |     • Windows: "a\foo\", "\bar" => "a/foo/bar" | ||||||
|  |  | ||||||
|     Attributes: ~ |     Attributes: ~ | ||||||
|         Since: 0.10.0 |         Since: 0.10.0 | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ manual. | |||||||
|                                       Type |gO| to see the table of contents. |                                       Type |gO| to see the table of contents. | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| 1. Key mapping			      *keybind* *key-mapping* *mapping* *macro* | 1. Key mapping				*keybind* *key-mapping* *mapping* | ||||||
|  |  | ||||||
| Key mapping is used to change the meaning of typed keys.  The most common use | Key mapping is used to change the meaning of typed keys.  The most common use | ||||||
| is to define a sequence of commands for a function key.  Example: > | is to define a sequence of commands for a function key.  Example: > | ||||||
|   | |||||||
| @@ -67,7 +67,6 @@ DEFAULTS | |||||||
|   current buffer, respectively. |   current buffer, respectively. | ||||||
| • 'number', 'relativenumber', 'signcolumn', and 'foldcolumn' are disabled in | • 'number', 'relativenumber', 'signcolumn', and 'foldcolumn' are disabled in | ||||||
|   |terminal| buffers. See |terminal-config| for an example of changing these defaults. |   |terminal| buffers. See |terminal-config| for an example of changing these defaults. | ||||||
| • |vim.json.encode()| no longer escapes the forward slash symbol by default |  | ||||||
|  |  | ||||||
| DIAGNOSTICS | DIAGNOSTICS | ||||||
|  |  | ||||||
| @@ -137,6 +136,7 @@ LUA | |||||||
| • Command-line completions for: `vim.g`, `vim.t`, `vim.w`, `vim.b`, `vim.v`, | • Command-line completions for: `vim.g`, `vim.t`, `vim.w`, `vim.b`, `vim.v`, | ||||||
|   `vim.o`, `vim.wo`, `vim.bo`, `vim.opt`, `vim.opt_local`, `vim.opt_global`, |   `vim.o`, `vim.wo`, `vim.bo`, `vim.opt`, `vim.opt_local`, `vim.opt_global`, | ||||||
|   and `vim.fn`. |   and `vim.fn`. | ||||||
|  | • |vim.json.encode()| no longer escapes forward slashes "/" by default | ||||||
|  |  | ||||||
| OPTIONS | OPTIONS | ||||||
|  |  | ||||||
| @@ -192,7 +192,6 @@ The following new features were added. | |||||||
| API | API | ||||||
|  |  | ||||||
| • |nvim__ns_set()| can set properties for a namespace | • |nvim__ns_set()| can set properties for a namespace | ||||||
| • |vim.json.encode()| has an option to enable forward slash escaping |  | ||||||
|  |  | ||||||
| DEFAULTS | DEFAULTS | ||||||
|  |  | ||||||
| @@ -270,6 +269,7 @@ LUA | |||||||
|   is more performant and easier to read. |   is more performant and easier to read. | ||||||
| • |vim.str_byteindex()| and |vim.str_utfindex()| gained overload signatures | • |vim.str_byteindex()| and |vim.str_utfindex()| gained overload signatures | ||||||
|   supporting two new parameters, `encoding` and `strict_indexing`. |   supporting two new parameters, `encoding` and `strict_indexing`. | ||||||
|  | • |vim.json.encode()| has an option to enable forward slash escaping | ||||||
| • |vim.fs.abspath()| converts paths to absolute paths. | • |vim.fs.abspath()| converts paths to absolute paths. | ||||||
|  |  | ||||||
| OPTIONS | OPTIONS | ||||||
| @@ -282,6 +282,8 @@ PERFORMANCE | |||||||
|  |  | ||||||
| • Significantly reduced redraw time for long lines with treesitter | • Significantly reduced redraw time for long lines with treesitter | ||||||
|   highlighting. |   highlighting. | ||||||
|  | • LSP diagnostics and inlay hints are de-duplicated (new requests cancel | ||||||
|  |   inflight requests). This greatly improves performance with slow LSP servers. | ||||||
|  |  | ||||||
| PLUGINS | PLUGINS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -111,7 +111,7 @@ To abort this type CTRL-C twice. | |||||||
| ============================================================================== | ============================================================================== | ||||||
| Complex repeats						*complex-repeat* | Complex repeats						*complex-repeat* | ||||||
|  |  | ||||||
| 							*q* *recording* | 							*q* *recording* *macro* | ||||||
| q{0-9a-zA-Z"}		Record typed characters into register {0-9a-zA-Z"} | q{0-9a-zA-Z"}		Record typed characters into register {0-9a-zA-Z"} | ||||||
| 			(uppercase to append).  The 'q' command is disabled | 			(uppercase to append).  The 'q' command is disabled | ||||||
| 			while executing a register, and it doesn't work inside | 			while executing a register, and it doesn't work inside | ||||||
|   | |||||||
| @@ -81,8 +81,7 @@ that user config takes precedence over plugins, which take precedence over | |||||||
| queries bundled with Nvim). If a query should extend other queries instead | queries bundled with Nvim). If a query should extend other queries instead | ||||||
| of replacing them, use |treesitter-query-modeline-extends|. | of replacing them, use |treesitter-query-modeline-extends|. | ||||||
|  |  | ||||||
| See |lua-treesitter-query| for the list of available methods for working with | The Lua interface is described at |lua-treesitter-query|. | ||||||
| treesitter queries from Lua. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| TREESITTER QUERY PREDICATES                            *treesitter-predicates* | TREESITTER QUERY PREDICATES                            *treesitter-predicates* | ||||||
| @@ -1195,6 +1194,10 @@ register({lang}, {filetype})              *vim.treesitter.language.register()* | |||||||
| ============================================================================== | ============================================================================== | ||||||
| Lua module: vim.treesitter.query                        *lua-treesitter-query* | Lua module: vim.treesitter.query                        *lua-treesitter-query* | ||||||
|  |  | ||||||
|  | This Lua |treesitter-query| interface allows you to create queries and use | ||||||
|  | them to parse text. See |vim.treesitter.query.parse()| for a working example. | ||||||
|  |  | ||||||
|  |  | ||||||
|                                         *vim.treesitter.query.add_directive()* |                                         *vim.treesitter.query.add_directive()* | ||||||
| add_directive({name}, {handler}, {opts}) | add_directive({name}, {handler}, {opts}) | ||||||
|     Adds a new directive to be used in queries |     Adds a new directive to be used in queries | ||||||
| @@ -1325,21 +1328,30 @@ omnifunc({findstart}, {base})                *vim.treesitter.query.omnifunc()* | |||||||
|       • {base}       (`string`) |       • {base}       (`string`) | ||||||
|  |  | ||||||
| parse({lang}, {query})                          *vim.treesitter.query.parse()* | parse({lang}, {query})                          *vim.treesitter.query.parse()* | ||||||
|     Parse {query} as a string. (If the query is in a file, the caller should |     Parses a {query} string and returns a `Query` object | ||||||
|     read the contents into a string before calling). |     (|lua-treesitter-query|), which can be used to search the tree for the | ||||||
|  |     query patterns (via |Query:iter_captures()|, |Query:iter_matches()|), or | ||||||
|  |     inspect the query via these fields: | ||||||
|  |     • `captures`: a list of unique capture names defined in the query (alias: | ||||||
|  |       `info.captures`). | ||||||
|  |     • `info.patterns`: information about predicates. | ||||||
|  |  | ||||||
|     Returns a `Query` (see |lua-treesitter-query|) object which can be used to |     Example (select the code then run `:'<,'>lua` to try it): >lua | ||||||
|     search nodes in the syntax tree for the patterns defined in {query} using |         local query = vim.treesitter.query.parse('vimdoc', [[ | ||||||
|     the `iter_captures` and `iter_matches` methods. |           ; query | ||||||
|  |           ((h1) @str | ||||||
|     Exposes `info` and `captures` with additional context about {query}. |             (#trim! @str 1 1 1 1)) | ||||||
|     • `captures` contains the list of unique capture names defined in {query}. |         ]]) | ||||||
|     • `info.captures` also points to `captures`. |         local tree = vim.treesitter.get_parser():parse()[1] | ||||||
|     • `info.patterns` contains information about predicates. |         for id, node, metadata in query:iter_captures(tree:root(), 0) do | ||||||
|  |            -- Print the node name and source text. | ||||||
|  |            vim.print({node:type(), vim.treesitter.get_node_text(node, vim.api.nvim_get_current_buf())}) | ||||||
|  |         end | ||||||
|  | < | ||||||
|  |  | ||||||
|     Parameters: ~ |     Parameters: ~ | ||||||
|       • {lang}   (`string`) Language to use for the query |       • {lang}   (`string`) Language to use for the query | ||||||
|       • {query}  (`string`) Query in s-expr syntax |       • {query}  (`string`) Query text, in s-expr syntax | ||||||
|  |  | ||||||
|     Return: ~ |     Return: ~ | ||||||
|         (`vim.treesitter.Query`) Parsed query |         (`vim.treesitter.Query`) Parsed query | ||||||
| @@ -1349,18 +1361,23 @@ parse({lang}, {query})                          *vim.treesitter.query.parse()* | |||||||
|  |  | ||||||
|                                                        *Query:iter_captures()* |                                                        *Query:iter_captures()* | ||||||
| Query:iter_captures({node}, {source}, {start}, {stop}) | Query:iter_captures({node}, {source}, {start}, {stop}) | ||||||
|     Iterate over all captures from all matches inside {node} |     Iterates over all captures from all matches in {node}. | ||||||
|  |  | ||||||
|     {source} is needed if the query contains predicates; then the caller must |     {source} is required if the query contains predicates; then the caller | ||||||
|     ensure to use a freshly parsed tree consistent with the current text of |     must ensure to use a freshly parsed tree consistent with the current text | ||||||
|     the buffer (if relevant). {start} and {stop} can be used to limit matches |     of the buffer (if relevant). {start} and {stop} can be used to limit | ||||||
|     inside a row range (this is typically used with root node as the {node}, |     matches inside a row range (this is typically used with root node as the | ||||||
|     i.e., to get syntax highlight matches in the current viewport). When |     {node}, i.e., to get syntax highlight matches in the current viewport). | ||||||
|     omitted, the {start} and {stop} row values are used from the given node. |     When omitted, the {start} and {stop} row values are used from the given | ||||||
|  |     node. | ||||||
|  |  | ||||||
|     The iterator returns four values: a numeric id identifying the capture, |     The iterator returns four values: | ||||||
|     the captured node, metadata from any directives processing the match, and |     1. the numeric id identifying the capture | ||||||
|     the match itself. The following example shows how to get captures by name: >lua |     2. the captured node | ||||||
|  |     3. metadata from any directives processing the match | ||||||
|  |     4. the match itself | ||||||
|  |  | ||||||
|  |     Example: how to get captures by name: >lua | ||||||
|         for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do |         for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do | ||||||
|           local name = query.captures[id] -- name of the capture in the query |           local name = query.captures[id] -- name of the capture in the query | ||||||
|           -- typically useful info about the node: |           -- typically useful info about the node: | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ User configuration and data files are found in standard |base-directories| | |||||||
|   session information.  |shada| |   session information.  |shada| | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
| Defaults                                                    *nvim-defaults* | Defaults                                            *defaults* *nvim-defaults* | ||||||
|  |  | ||||||
| - Filetype detection is enabled by default. This can be disabled by adding | - Filetype detection is enabled by default. This can be disabled by adding | ||||||
|   ":filetype off" to |init.vim|. |   ":filetype off" to |init.vim|. | ||||||
| @@ -291,7 +291,8 @@ Commands: | |||||||
|   User commands can support |:command-preview| to show results as you type |   User commands can support |:command-preview| to show results as you type | ||||||
| - |:write| with "++p" flag creates parent directories. | - |:write| with "++p" flag creates parent directories. | ||||||
|  |  | ||||||
| Events: | Events (autocommands): | ||||||
|  | - Fixed inconsistent behavior in execution of nested autocommands #23368 | ||||||
| - |RecordingEnter| | - |RecordingEnter| | ||||||
| - |RecordingLeave| | - |RecordingLeave| | ||||||
| - |SearchWrapped| | - |SearchWrapped| | ||||||
| @@ -299,6 +300,8 @@ Events: | |||||||
| - |TabNewEntered| | - |TabNewEntered| | ||||||
| - |TermClose| | - |TermClose| | ||||||
| - |TermOpen| | - |TermOpen| | ||||||
|  | - |TermResponse| is fired for any OSC sequence received from the terminal, | ||||||
|  |   instead of the Primary Device Attributes response. |v:termresponse| | ||||||
| - |UIEnter| | - |UIEnter| | ||||||
| - |UILeave| | - |UILeave| | ||||||
|  |  | ||||||
| @@ -366,7 +369,7 @@ Options: | |||||||
| - 'shortmess' | - 'shortmess' | ||||||
|     - "F" flag does not affect output from autocommands. |     - "F" flag does not affect output from autocommands. | ||||||
|     - "q" flag fully hides macro recording message. |     - "q" flag fully hides macro recording message. | ||||||
| - 'signcolumn'  supports up to 9 dynamic/fixed columns | - 'signcolumn'  can show multiple signs (dynamic or fixed columns) | ||||||
| - 'statuscolumn' full control of columns using 'statusline' format | - 'statuscolumn' full control of columns using 'statusline' format | ||||||
| - 'tabline'     middle-click on tabpage label closes tabpage, | - 'tabline'     middle-click on tabpage label closes tabpage, | ||||||
|                 and %@Func@foo%X can call any function on mouse-click |                 and %@Func@foo%X can call any function on mouse-click | ||||||
| @@ -375,6 +378,10 @@ Options: | |||||||
| - 'winblend'    pseudo-transparency in floating windows |api-floatwin| | - 'winblend'    pseudo-transparency in floating windows |api-floatwin| | ||||||
| - 'winhighlight' window-local highlights | - 'winhighlight' window-local highlights | ||||||
|  |  | ||||||
|  | Performance: | ||||||
|  | - Signs are implemented using Nvim's internal "marktree" (btree) structure. | ||||||
|  | - Folds are not updated during insert-mode. | ||||||
|  |  | ||||||
| Providers: | Providers: | ||||||
| - If a Python interpreter is available on your `$PATH`, |:python| and | - If a Python interpreter is available on your `$PATH`, |:python| and | ||||||
|   |:python3| are always available. See |provider-python|. |   |:python3| are always available. See |provider-python|. | ||||||
| @@ -392,6 +399,7 @@ Shell: | |||||||
| - |system()| does not support writing/reading "backgrounded" commands. |E5677| | - |system()| does not support writing/reading "backgrounded" commands. |E5677| | ||||||
|  |  | ||||||
| Signs: | Signs: | ||||||
|  | - 'signcolumn' can show multiple signs. | ||||||
| - Signs are removed if the associated line is deleted. | - Signs are removed if the associated line is deleted. | ||||||
| - Signs placed twice with the same identifier in the same group are moved. | - Signs placed twice with the same identifier in the same group are moved. | ||||||
|  |  | ||||||
| @@ -584,9 +592,6 @@ Mappings: | |||||||
| Motion: | Motion: | ||||||
| - The |jumplist| avoids useless/phantom jumps. | - The |jumplist| avoids useless/phantom jumps. | ||||||
|  |  | ||||||
| Performance: |  | ||||||
| - Folds are not updated during insert-mode. |  | ||||||
|  |  | ||||||
| Syntax highlighting: | Syntax highlighting: | ||||||
| - syncolor.vim has been removed. Nvim now sets up default highlighting groups | - syncolor.vim has been removed. Nvim now sets up default highlighting groups | ||||||
|   automatically for both light and dark backgrounds, regardless of whether or |   automatically for both light and dark backgrounds, regardless of whether or | ||||||
| @@ -611,12 +616,6 @@ Working directory (Vim implemented some of these after Nvim): | |||||||
| - `getcwd(-1)` is equivalent to `getcwd(-1, 0)` instead of returning the global | - `getcwd(-1)` is equivalent to `getcwd(-1, 0)` instead of returning the global | ||||||
|   working directory. Use `getcwd(-1, -1)` to get the global working directory. |   working directory. Use `getcwd(-1, -1)` to get the global working directory. | ||||||
|  |  | ||||||
| Autocommands: |  | ||||||
| - Fixed inconsistent behavior in execution of nested autocommands: |  | ||||||
|   https://github.com/neovim/neovim/issues/23368 |  | ||||||
| - |TermResponse| is fired for any OSC sequence received from the terminal, |  | ||||||
|   instead of the Primary Device Attributes response. |v:termresponse| |  | ||||||
|  |  | ||||||
| Options: | Options: | ||||||
| - 'titlestring' uses printf-style '%' items (see: 'statusline') to implement | - 'titlestring' uses printf-style '%' items (see: 'statusline') to implement | ||||||
|   the default behaviour. The implementation is equivalent to setting |   the default behaviour. The implementation is equivalent to setting | ||||||
|   | |||||||
| @@ -26,9 +26,9 @@ vim.json = {} | |||||||
| ---@param str string Stringified JSON data. | ---@param str string Stringified JSON data. | ||||||
| ---@param opts? table<string,any> Options table with keys: | ---@param opts? table<string,any> Options table with keys: | ||||||
| ---                               - luanil: (table) Table with keys: | ---                               - luanil: (table) Table with keys: | ||||||
| ---                                   * object: (boolean) When true, converts `null` in JSON objects | ---                                 - object: (boolean) When true, converts `null` in JSON objects | ||||||
| ---                                   to Lua `nil` instead of |vim.NIL|. | ---                                   to Lua `nil` instead of |vim.NIL|. | ||||||
| ---                                   * array: (boolean) When true, converts `null` in JSON arrays | ---                                 - array: (boolean) When true, converts `null` in JSON arrays | ||||||
| ---                                   to Lua `nil` instead of |vim.NIL|. | ---                                   to Lua `nil` instead of |vim.NIL|. | ||||||
| ---@return any | ---@return any | ||||||
| function vim.json.decode(str, opts) end | function vim.json.decode(str, opts) end | ||||||
| @@ -36,7 +36,7 @@ function vim.json.decode(str, opts) end | |||||||
| --- Encodes (or "packs") Lua object {obj} as JSON in a Lua string. | --- Encodes (or "packs") Lua object {obj} as JSON in a Lua string. | ||||||
| ---@param obj any | ---@param obj any | ||||||
| ---@param opts? table<string,any> Options table with keys: | ---@param opts? table<string,any> Options table with keys: | ||||||
| ---                                 - escape_slash: (boolean) (default false) When true, escapes `/` | ---                                 - escape_slash: (boolean) (default false) Escape slash | ||||||
| ---                                                           character in JSON strings | ---                                   characters "/" in string values. | ||||||
| ---@return string | ---@return string | ||||||
| function vim.json.encode(obj, opts) end | function vim.json.encode(obj, opts) end | ||||||
|   | |||||||
| @@ -105,9 +105,13 @@ function M.basename(file) | |||||||
|   return file:match('/$') and '' or (file:match('[^/]*$')) |   return file:match('/$') and '' or (file:match('[^/]*$')) | ||||||
| end | end | ||||||
|  |  | ||||||
| --- Concatenates partial paths into one path. Slashes are normalized (redundant slashes are removed, and on Windows backslashes are replaced with forward-slashes) | --- Concatenates partial paths (one absolute or relative path followed by zero or more relative | ||||||
| --- (e.g., `"foo/"` and `"/bar"` get joined to `"foo/bar"`) | --- paths). Slashes are normalized: redundant slashes are removed, and (on Windows) backslashes are | ||||||
| --- (windows: e.g `"a\foo\"` and `"\bar"` are joined to `"a/foo/bar"`) | --- replaced with forward-slashes. | ||||||
|  | --- | ||||||
|  | --- Examples: | ||||||
|  | --- - "foo/", "/bar" => "foo/bar" | ||||||
|  | --- - Windows: "a\foo\", "\bar" => "a/foo/bar" | ||||||
| --- | --- | ||||||
| ---@since 12 | ---@since 12 | ||||||
| ---@param ... string | ---@param ... string | ||||||
|   | |||||||
| @@ -1,3 +1,6 @@ | |||||||
|  | --- @brief This Lua |treesitter-query| interface allows you to create queries and use them to parse | ||||||
|  | --- text. See |vim.treesitter.query.parse()| for a working example. | ||||||
|  |  | ||||||
| local api = vim.api | local api = vim.api | ||||||
| local language = require('vim.treesitter.language') | local language = require('vim.treesitter.language') | ||||||
| local memoize = vim.func._memoize | local memoize = vim.func._memoize | ||||||
| @@ -8,9 +11,9 @@ local M = {} | |||||||
| ---Parsed query, see |vim.treesitter.query.parse()| | ---Parsed query, see |vim.treesitter.query.parse()| | ||||||
| --- | --- | ||||||
| ---@class vim.treesitter.Query | ---@class vim.treesitter.Query | ||||||
| ---@field lang string name of the language for this parser | ---@field lang string parser language name | ||||||
| ---@field captures string[] list of (unique) capture names defined in query | ---@field captures string[] list of (unique) capture names defined in query | ||||||
| ---@field info vim.treesitter.QueryInfo contains information used in the query (e.g. captures, predicates, directives) | ---@field info vim.treesitter.QueryInfo query context (e.g. captures, predicates, directives) | ||||||
| ---@field query TSQuery userdata query object | ---@field query TSQuery userdata query object | ||||||
| local Query = {} | local Query = {} | ||||||
| Query.__index = Query | Query.__index = Query | ||||||
| @@ -228,20 +231,28 @@ M.get = memoize('concat-2', function(lang, query_name) | |||||||
|   return M.parse(lang, query_string) |   return M.parse(lang, query_string) | ||||||
| end) | end) | ||||||
|  |  | ||||||
| --- Parse {query} as a string. (If the query is in a file, the caller | --- Parses a {query} string and returns a `Query` object (|lua-treesitter-query|), which can be used | ||||||
| --- should read the contents into a string before calling). | --- to search the tree for the query patterns (via |Query:iter_captures()|, |Query:iter_matches()|), | ||||||
|  | --- or inspect the query via these fields: | ||||||
|  | ---   - `captures`: a list of unique capture names defined in the query (alias: `info.captures`). | ||||||
|  | ---   - `info.patterns`: information about predicates. | ||||||
| --- | --- | ||||||
| --- Returns a `Query` (see |lua-treesitter-query|) object which can be used to | --- Example (select the code then run `:'<,'>lua` to try it): | ||||||
| --- search nodes in the syntax tree for the patterns defined in {query} | --- ```lua | ||||||
| --- using the `iter_captures` and `iter_matches` methods. | --- local query = vim.treesitter.query.parse('vimdoc', [[ | ||||||
| --- | ---   ; query | ||||||
| --- Exposes `info` and `captures` with additional context about {query}. | ---   ((h1) @str | ||||||
| ---   - `captures` contains the list of unique capture names defined in {query}. | ---     (#trim! @str 1 1 1 1)) | ||||||
| ---   - `info.captures` also points to `captures`. | --- ]]) | ||||||
| ---   - `info.patterns` contains information about predicates. | --- local tree = vim.treesitter.get_parser():parse()[1] | ||||||
|  | --- for id, node, metadata in query:iter_captures(tree:root(), 0) do | ||||||
|  | ---    -- Print the node name and source text. | ||||||
|  | ---    vim.print({node:type(), vim.treesitter.get_node_text(node, vim.api.nvim_get_current_buf())}) | ||||||
|  | --- end | ||||||
|  | --- ``` | ||||||
| --- | --- | ||||||
| ---@param lang string Language to use for the query | ---@param lang string Language to use for the query | ||||||
| ---@param query string Query in s-expr syntax | ---@param query string Query text, in s-expr syntax | ||||||
| --- | --- | ||||||
| ---@return vim.treesitter.Query : Parsed query | ---@return vim.treesitter.Query : Parsed query | ||||||
| --- | --- | ||||||
| @@ -847,20 +858,22 @@ local function match_id_hash(_, match) | |||||||
|   return (match:info()) |   return (match:info()) | ||||||
| end | end | ||||||
|  |  | ||||||
| --- Iterate over all captures from all matches inside {node} | --- Iterates over all captures from all matches in {node}. | ||||||
| --- | --- | ||||||
| --- {source} is needed if the query contains predicates; then the caller | --- {source} is required if the query contains predicates; then the caller | ||||||
| --- must ensure to use a freshly parsed tree consistent with the current | --- must ensure to use a freshly parsed tree consistent with the current | ||||||
| --- text of the buffer (if relevant). {start} and {stop} can be used to limit | --- text of the buffer (if relevant). {start} and {stop} can be used to limit | ||||||
| --- matches inside a row range (this is typically used with root node | --- matches inside a row range (this is typically used with root node | ||||||
| --- as the {node}, i.e., to get syntax highlight matches in the current | --- as the {node}, i.e., to get syntax highlight matches in the current | ||||||
| --- viewport). When omitted, the {start} and {stop} row values are used from the given node. | --- viewport). When omitted, the {start} and {stop} row values are used from the given node. | ||||||
| --- | --- | ||||||
| --- The iterator returns four values: a numeric id identifying the capture, | --- The iterator returns four values: | ||||||
| --- the captured node, metadata from any directives processing the match, | --- 1. the numeric id identifying the capture | ||||||
| --- and the match itself. | --- 2. the captured node | ||||||
| --- The following example shows how to get captures by name: | --- 3. metadata from any directives processing the match | ||||||
|  | --- 4. the match itself | ||||||
| --- | --- | ||||||
|  | --- Example: how to get captures by name: | ||||||
| --- ```lua | --- ```lua | ||||||
| --- for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do | --- for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do | ||||||
| ---   local name = query.captures[id] -- name of the capture in the query | ---   local name = query.captures[id] -- name of the capture in the query | ||||||
|   | |||||||
| @@ -469,7 +469,7 @@ describe('vim.fs', function() | |||||||
|     end) |     end) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|   describe('abspath', function() |   describe('abspath()', function() | ||||||
|     local cwd = is_os('win') and vim.uv.cwd():gsub('\\', '/') or vim.uv.cwd() |     local cwd = is_os('win') and vim.uv.cwd():gsub('\\', '/') or vim.uv.cwd() | ||||||
|     local home = is_os('win') and vim.uv.os_homedir():gsub('\\', '/') or vim.uv.os_homedir() |     local home = is_os('win') and vim.uv.os_homedir():gsub('\\', '/') or vim.uv.os_homedir() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -152,7 +152,7 @@ describe('vim.json.encode()', function() | |||||||
|     clear() |     clear() | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|   it('dumps strings with & without escaped slash', function() |   it('escape_slash', function() | ||||||
|     -- With slash |     -- With slash | ||||||
|     eq('"Test\\/"', exec_lua([[return vim.json.encode('Test/', { escape_slash = true })]])) |     eq('"Test\\/"', exec_lua([[return vim.json.encode('Test/', { escape_slash = true })]])) | ||||||
|     eq( |     eq( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Justin M. Keyes
					Justin M. Keyes