docs: third-party licenses, TEST_COLORS, system() #15665

This commit is contained in:
Justin M. Keyes 2021-09-14 10:20:33 -07:00 committed by GitHub
parent 0a83017fe9
commit b63b4777ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 157 additions and 154 deletions

10
LICENSE
View File

@ -189,8 +189,16 @@ contributed under the Vim license and (2) externally maintained libraries.
The externally maintained libraries used by Neovim are: The externally maintained libraries used by Neovim are:
- Klib: a Generic Library in C. MIT/X11 license. - Klib: a Generic Library in C. MIT/X11 license.
- libuv. Copyright Joyent, Inc. and other Node contributors. Node.js license. - Lua: MIT license
- LuaJIT: a Just-In-Time Compiler for Lua. Copyright Mike Pall. MIT license. - LuaJIT: a Just-In-Time Compiler for Lua. Copyright Mike Pall. MIT license.
- Luv: Apache 2.0 license
- libmpack: MIT license
- libtermkey: MIT license
- libuv. Copyright Joyent, Inc. and other Node contributors. Node.js license.
- libvterm: MIT license
- lua-compat: MIT license
- tree-sitter: MIT license
- xdiff: LGPL license
==== ====

View File

@ -10,14 +10,13 @@ General guidelines
* Write down what was decided * Write down what was decided
* Constraints are good * Constraints are good
* Use automation to solve problems * Use automation to solve problems
* Never break the API * Never break the API... but sometimes break the UI
Ticket triage Ticket triage
------------- -------------
In practice we haven't found a meaningful way to forecast more precisely than In practice we haven't found a way to forecast more precisely than "next" and
"next" and "after next". That means there are usually one or two (at most) "after next". So there are usually one or two (at most) planned milestones:
planned milestones:
- Next bugfix-release (1.0.x) - Next bugfix-release (1.0.x)
- Next feature-release (1.x.0) - Next feature-release (1.x.0)
@ -25,16 +24,16 @@ planned milestones:
The forecasting problem might be solved with an explicit priority system (like The forecasting problem might be solved with an explicit priority system (like
Bram's todo.txt). Meanwhile the Neovim priority system is defined by: Bram's todo.txt). Meanwhile the Neovim priority system is defined by:
- PRs nearing completion (RDY). - PRs nearing completion.
- Issue labels. E.g. the `+plan` label increases the ticket's priority merely - Issue labels. E.g. the `+plan` label increases the ticket's priority merely
for having a plan written down: it is _closer to completion_ than tickets for having a plan written down: it is _closer to completion_ than tickets
without a plan. without a plan.
- Comment activity or new information. - Comment activity or new information.
Anything that isn't in the next milestone, and doesn't have a RDY PR ... is Anything that isn't in the next milestone, and doesn't have a finished PR—is
just not something you care very much about, by construction. Post-release you just not something you care very much about, by construction. Post-release you
can review open issues, but chances are your next milestone is already getting can review open issues, but chances are your next milestone is already getting
full :) full... :)
Release policy Release policy
-------------- --------------

View File

@ -9139,11 +9139,23 @@ synstack({lnum}, {col}) *synstack()*
valid positions. valid positions.
system({cmd} [, {input}]) *system()* *E677* system({cmd} [, {input}]) *system()* *E677*
Get the output of {cmd} as a |string| (use |systemlist()| to Gets the output of {cmd} as a |string| (|systemlist()| returns
get a |List|). {cmd} is treated exactly as in |jobstart()|. a |List|) and sets |v:shell_error| to the error code.
Not to be used for interactive commands. {cmd} is treated as in |jobstart()|:
If {cmd} is a List it runs directly (no 'shell').
If {cmd} is a String it runs in the 'shell', like this: >
:call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
If {input} is a string it is written to a pipe and passed as < Not to be used for interactive commands.
Result is a String, filtered to avoid platform-specific quirks:
- <CR><NL> is replaced with <NL>
- NUL characters are replaced with SOH (0x01)
Example: >
:echo system(['ls', expand('%:h')])
< If {input} is a string it is written to a pipe and passed as
stdin to the command. The string is written as-is, line stdin to the command. The string is written as-is, line
separators are not changed. separators are not changed.
If {input} is a |List| it is written to the pipe as If {input} is a |List| it is written to the pipe as
@ -9165,29 +9177,12 @@ system({cmd} [, {input}]) *system()* *E677*
Note: Use |shellescape()| or |::S| with |expand()| or Note: Use |shellescape()| or |::S| with |expand()| or
|fnamemodify()| to escape special characters in a command |fnamemodify()| to escape special characters in a command
argument. Newlines in {cmd} may cause the command to fail. argument. 'shellquote' and 'shellxquote' must be properly
The characters in 'shellquote' and 'shellxquote' may also configured. Example: >
cause trouble. :echo system('ls '..shellescape(expand('%:h')))
:echo system('ls '..expand('%:h:S'))
Result is a String. Example: > < Unlike ":!cmd" there is no automatic check for changed files.
:let files = system("ls " . shellescape(expand('%:h')))
:let files = system('ls ' . expand('%:h:S'))
< To make the result more system-independent, the shell output
is filtered to replace <CR> with <NL> for Macintosh, and
<CR><NL> with <NL> for DOS-like systems.
To avoid the string being truncated at a NUL, all NUL
characters are replaced with SOH (0x01).
The command executed is constructed using several options when
{cmd} is a string: 'shell' 'shellcmdflag' {cmd}
The resulting error code can be found in |v:shell_error|.
Note that any wrong value in the options mentioned above may
make the function fail. It has also been reported to fail
when using a security agent application.
Unlike ":!cmd" there is no automatic check for changed files.
Use |:checktime| to force a check. Use |:checktime| to force a check.
Can also be used as a |method|: > Can also be used as a |method|: >

View File

@ -1,15 +1,15 @@
*lua.txt* Nvim *lua.txt* Nvim
NVIM REFERENCE MANUAL NVIM REFERENCE MANUAL
Lua engine *lua* *Lua* Lua engine *lua* *Lua*
Type |gO| to see the table of contents. Type |gO| to see the table of contents.
============================================================================== ==============================================================================
INTRODUCTION *lua-intro* INTRODUCTION *lua-intro*
The Lua 5.1 language is builtin and always available. Try this command to get The Lua 5.1 language is builtin and always available. Try this command to get
an idea of what lurks beneath: > an idea of what lurks beneath: >
@ -27,11 +27,12 @@ are on 'runtimepath':
~/.config/nvim/lua/foo.lua ~/.config/nvim/lua/foo.lua
then `require('foo')` loads "~/.config/nvim/lua/foo.lua", and then `require('foo')` loads "~/.config/nvim/lua/foo.lua", and
"runtime/lua/foo.lua" is not used. See |lua-require| to understand how Nvim "runtime/lua/foo.lua" is not used. See |lua-require| to understand how Nvim
finds and loads Lua modules. The conventions are similar to VimL plugins, finds and loads Lua modules. The conventions are similar to those of
with some extra features. See |lua-require-example| for a walkthrough. Vimscript |plugin|s, with some extra features. See |lua-require-example| for
a walkthrough.
============================================================================== ==============================================================================
IMPORTING LUA MODULES *lua-require* IMPORTING LUA MODULES *lua-require*
*lua-package-path* *lua-package-path*
Nvim automatically adjusts `package.path` and `package.cpath` according to Nvim automatically adjusts `package.path` and `package.cpath` according to
@ -157,7 +158,7 @@ function without any parentheses. This is most often used to approximate
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
LUA PLUGIN EXAMPLE *lua-require-example* LUA PLUGIN EXAMPLE *lua-require-example*
The following example plugin adds a command `:MakeCharBlob` which transforms The following example plugin adds a command `:MakeCharBlob` which transforms
current buffer into a long `unsigned char` array. Lua contains transformation current buffer into a long `unsigned char` array. Lua contains transformation
@ -234,7 +235,7 @@ lua/charblob.lua: >
} }
============================================================================== ==============================================================================
COMMANDS *lua-commands* COMMANDS *lua-commands*
These commands execute a Lua chunk from either the command line (:lua, :luado) These commands execute a Lua chunk from either the command line (:lua, :luado)
or a file (:luafile) on the given line [range]. As always in Lua, each chunk or a file (:luafile) on the given line [range]. As always in Lua, each chunk
@ -298,19 +299,20 @@ arguments separated by " " (space) instead of "\t" (tab).
:luado if bp:match(line) then return "-->\t" .. line end :luado if bp:match(line) then return "-->\t" .. line end
< <
*:luafile* *:luafile*
:[range]luafile {file} :[range]luafile {file}
Execute Lua script in {file}. Execute Lua script in {file}.
The whole argument is used as a single file name. The whole argument is used as the filename (like
|:edit|), spaces do not need to be escaped.
Alternatively you can |:source| Lua files.
Examples: Examples: >
>
:luafile script.lua :luafile script.lua
:luafile % :luafile %
< <
============================================================================== ==============================================================================
luaeval() *lua-eval* *luaeval()* luaeval() *lua-eval* *luaeval()*
The (dual) equivalent of "vim.eval" for passing Lua values to Nvim is The (dual) equivalent of "vim.eval" for passing Lua values to Nvim is
"luaeval". "luaeval" takes an expression string and an optional argument used "luaeval". "luaeval" takes an expression string and an optional argument used
@ -324,8 +326,7 @@ semantically equivalent in Lua to:
end end
Lua nils, numbers, strings, tables and booleans are converted to their Lua nils, numbers, strings, tables and booleans are converted to their
respective VimL types. An error is thrown if conversion of any other Lua types respective Vimscript types. Conversion of other Lua types is an error.
is attempted.
The magic global "_A" contains the second argument to luaeval(). The magic global "_A" contains the second argument to luaeval().
@ -348,21 +349,21 @@ cases there is the following agreement:
3. Table with string keys, at least one of which contains NUL byte, is also 3. Table with string keys, at least one of which contains NUL byte, is also
considered to be a dictionary, but this time it is converted to considered to be a dictionary, but this time it is converted to
a |msgpack-special-map|. a |msgpack-special-map|.
*lua-special-tbl* *lua-special-tbl*
4. Table with `vim.type_idx` key may be a dictionary, a list or floating-point 4. Table with `vim.type_idx` key may be a dictionary, a list or floating-point
value: value:
- `{[vim.type_idx]=vim.types.float, [vim.val_idx]=1}` is converted to - `{[vim.type_idx]=vim.types.float, [vim.val_idx]=1}` is converted to
a floating-point 1.0. Note that by default integral Lua numbers are a floating-point 1.0. Note that by default integral Lua numbers are
converted to |Number|s, non-integral are converted to |Float|s. This converted to |Number|s, non-integral are converted to |Float|s. This
variant allows integral |Float|s. variant allows integral |Float|s.
- `{[vim.type_idx]=vim.types.dictionary}` is converted to an empty - `{[vim.type_idx]=vim.types.dictionary}` is converted to an empty
dictionary, `{[vim.type_idx]=vim.types.dictionary, [42]=1, a=2}` is dictionary, `{[vim.type_idx]=vim.types.dictionary, [42]=1, a=2}` is
converted to a dictionary `{'a': 42}`: non-string keys are ignored. converted to a dictionary `{'a': 42}`: non-string keys are ignored.
Without `vim.type_idx` key tables with keys not fitting in 1., 2. or 3. Without `vim.type_idx` key tables with keys not fitting in 1., 2. or 3.
are errors. are errors.
- `{[vim.type_idx]=vim.types.list}` is converted to an empty list. As well - `{[vim.type_idx]=vim.types.list}` is converted to an empty list. As well
as `{[vim.type_idx]=vim.types.list, [42]=1}`: integral keys that do not as `{[vim.type_idx]=vim.types.list, [42]=1}`: integral keys that do not
form a 1-step sequence from 1 to N are ignored, as well as all form a 1-step sequence from 1 to N are ignored, as well as all
non-integral keys. non-integral keys.
Examples: > Examples: >
@ -373,13 +374,13 @@ Examples: >
: endfunction : endfunction
:echo Rand(1,10) :echo Rand(1,10)
Note: second argument to `luaeval` undergoes VimL to Lua conversion Note: second argument to `luaeval` is converted ("marshalled") from Vimscript
("marshalled"), so changes to Lua containers do not affect values in VimL. to Lua, so changes to Lua containers do not affect values in Vimscript. Return
Return value is also always converted. When converting, value is also always converted. When converting, |msgpack-special-dict|s are
|msgpack-special-dict|s are treated specially. treated specially.
============================================================================== ==============================================================================
Vimscript v:lua interface *v:lua-call* Vimscript v:lua interface *v:lua-call*
From Vimscript the special `v:lua` prefix can be used to call Lua functions From Vimscript the special `v:lua` prefix can be used to call Lua functions
which are global or accessible from global tables. The expression > which are global or accessible from global tables. The expression >
@ -419,7 +420,7 @@ Note: `v:lua` without a call is not allowed in a Vimscript expression:
============================================================================== ==============================================================================
Lua standard modules *lua-stdlib* Lua standard modules *lua-stdlib*
The Nvim Lua "standard library" (stdlib) is the `vim` module, which exposes The Nvim Lua "standard library" (stdlib) is the `vim` module, which exposes
various functions and sub-modules. It is always loaded, thus require("vim") various functions and sub-modules. It is always loaded, thus require("vim")
@ -453,7 +454,7 @@ Note that underscore-prefixed functions (e.g. "_os_proc_children") are
internal/private and must not be used by plugins. internal/private and must not be used by plugins.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
VIM.LOOP *lua-loop* *vim.loop* VIM.LOOP *lua-loop* *vim.loop*
`vim.loop` exposes all features of the Nvim event-loop. This is a low-level `vim.loop` exposes all features of the Nvim event-loop. This is a low-level
API that provides functionality for networking, filesystem, and process API that provides functionality for networking, filesystem, and process
@ -464,7 +465,7 @@ management. Try this command to see available functions: >
Reference: https://github.com/luvit/luv/blob/master/docs.md Reference: https://github.com/luvit/luv/blob/master/docs.md
Examples: https://github.com/luvit/luv/tree/master/examples Examples: https://github.com/luvit/luv/tree/master/examples
*E5560* *lua-loop-callbacks* *E5560* *lua-loop-callbacks*
It is an error to directly invoke `vim.api` functions (except |api-fast|) in It is an error to directly invoke `vim.api` functions (except |api-fast|) in
`vim.loop` callbacks. For example, this is an error: > `vim.loop` callbacks. For example, this is an error: >
@ -500,7 +501,7 @@ Example: repeating timer
print('sleeping'); print('sleeping');
Example: File-change detection *watch-file* Example: File-change detection *watch-file*
1. Save this code to a file. 1. Save this code to a file.
2. Execute it with ":luafile %". 2. Execute it with ":luafile %".
3. Use ":Watch %" to watch any file. 3. Use ":Watch %" to watch any file.
@ -526,7 +527,7 @@ Example: File-change detection *watch-file*
"command! -nargs=1 Watch call luaeval('watch_file(_A)', expand('<args>'))") "command! -nargs=1 Watch call luaeval('watch_file(_A)', expand('<args>'))")
Example: TCP echo-server *tcp-server* Example: TCP echo-server *tcp-server*
1. Save this code to a file. 1. Save this code to a file.
2. Execute it with ":luafile %". 2. Execute it with ":luafile %".
3. Note the port number. 3. Note the port number.
@ -556,7 +557,7 @@ Example: TCP echo-server *tcp-server*
print('TCP echo-server listening on port: '..server:getsockname().port) print('TCP echo-server listening on port: '..server:getsockname().port)
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
VIM.HIGHLIGHT *lua-highlight* VIM.HIGHLIGHT *lua-highlight*
Nvim includes a function for highlighting a selection on yank (see for example Nvim includes a function for highlighting a selection on yank (see for example
https://github.com/machakann/vim-highlightedyank). To enable it, add https://github.com/machakann/vim-highlightedyank). To enable it, add
@ -591,21 +592,19 @@ vim.highlight.range({bufnr}, {ns}, {higroup}, {start}, {finish}, {rtype}, {inclu
range is inclusive (default false). range is inclusive (default false).
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
VIM.REGEX *lua-regex* VIM.REGEX *lua-regex*
Vim regexes can be used directly from lua. Currently they only allow Vim regexes can be used directly from lua. Currently they only allow
matching within a single line. matching within a single line.
vim.regex({re}) *vim.regex()* vim.regex({re}) *vim.regex()*
Parse the Vim regex {re} and return a regex object. Regexes are
"magic" and case-insensitive by default, regardless of 'magic' and
'ignorecase'. The can be controlled with flags, see |/magic|.
Parse the regex {re} and return a regex object. 'magic' and Methods on the regex object:
'ignorecase' options are ignored, lua regexes always defaults to magic
and ignoring case. The behavior can be changed with flags in
the beginning of the string |/magic|.
Regex objects support the following methods: regex:match_str({str}) *regex:match_str()*
regex:match_str({str}) *regex:match_str()*
Match the string against the regex. If the string should match the Match the string against the regex. If the string should match the
regex precisely, surround the regex with `^` and `$`. regex precisely, surround the regex with `^` and `$`.
If the was a match, the byte indices for the beginning and end of If the was a match, the byte indices for the beginning and end of
@ -613,7 +612,7 @@ regex:match_str({str}) *regex:match_str()*
As any integer is truth-y, `regex:match()` can be directly used As any integer is truth-y, `regex:match()` can be directly used
as a condition in an if-statement. as a condition in an if-statement.
regex:match_line({bufnr}, {line_idx}[, {start}, {end}]) *regex:match_line()* regex:match_line({bufnr}, {line_idx}[, {start}, {end}]) *regex:match_line()*
Match line {line_idx} (zero-based) in buffer {bufnr}. If {start} and Match line {line_idx} (zero-based) in buffer {bufnr}. If {start} and
{end} are supplied, match only this byte index range. Otherwise see {end} are supplied, match only this byte index range. Otherwise see
|regex:match_str()|. If {start} is used, then the returned byte |regex:match_str()|. If {start} is used, then the returned byte
@ -692,67 +691,65 @@ VIM.MPACK *lua-mpack*
The *vim.mpack* module provides packing and unpacking of lua objects to The *vim.mpack* module provides packing and unpacking of lua objects to
msgpack encoded strings. |vim.NIL| and |vim.empty_dict()| are supported. msgpack encoded strings. |vim.NIL| and |vim.empty_dict()| are supported.
vim.mpack.pack({obj}) *vim.mpack.pack* vim.mpack.pack({obj}) *vim.mpack.pack*
Packs a lua object {obj} and returns the msgpack representation as Packs a lua object {obj} and returns the msgpack representation as
a string a string
vim.mpack.unpack({str}) *vim.mpack.unpack* vim.mpack.unpack({str}) *vim.mpack.unpack*
Unpacks the msgpack encoded {str} and returns a lua object Unpacks the msgpack encoded {str} and returns a lua object
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
VIM *lua-builtin* VIM *lua-builtin*
vim.api.{func}({...}) *vim.api* vim.api.{func}({...}) *vim.api*
Invokes Nvim |API| function {func} with arguments {...}. Invokes Nvim |API| function {func} with arguments {...}.
Example: call the "nvim_get_current_line()" API function: > Example: call the "nvim_get_current_line()" API function: >
print(tostring(vim.api.nvim_get_current_line())) print(tostring(vim.api.nvim_get_current_line()))
vim.version() *vim.version* vim.version() *vim.version*
Returns the version of the current neovim build. Gets the version of the current Nvim build.
vim.in_fast_event() *vim.in_fast_event()* vim.in_fast_event() *vim.in_fast_event()*
Returns true if the code is executing as part of a "fast" event Returns true if the code is executing as part of a "fast" event
handler, where most of the API is disabled. These are low-level events handler, where most of the API is disabled. These are low-level events
(e.g. |lua-loop-callbacks|) which can be invoked whenever Nvim polls (e.g. |lua-loop-callbacks|) which can be invoked whenever Nvim polls
for input. When this is `false` most API functions are callable (but for input. When this is `false` most API functions are callable (but
may be subject to other restrictions such as |textlock|). may be subject to other restrictions such as |textlock|).
vim.NIL *vim.NIL* vim.NIL *vim.NIL*
Special value used to represent NIL in msgpack-rpc and |v:null| in Special value representing NIL in |RPC| and |v:null| in Vimscript
vimL interaction, and similar cases. Lua `nil` cannot be used as conversion, and similar cases. Lua `nil` cannot be used as part of
part of a lua table representing a Dictionary or Array, as it a Lua table representing a Dictionary or Array, because it is
is equivalent to a missing value: `{"foo", nil}` is the same as treated as missing: `{"foo", nil}` is the same as `{"foo"}`.
`{"foo"}`
vim.empty_dict() *vim.empty_dict()* vim.empty_dict() *vim.empty_dict()*
Creates a special table which will be converted to an empty Creates a special empty table (marked with a metatable), which Nvim
dictionary when converting lua values to vimL or API types. The converts to an empty dictionary when translating Lua values to
table is empty, and this property is marked using a metatable. An Vimscript or API types. Nvim by default converts an empty table `{}`
empty table `{}` without this metatable will default to convert to without this metatable to an list/array.
an array/list.
Note: if numeric keys are added to the table, the metatable will be Note: if numeric keys are present in the table, Nvim ignores the
ignored and the dict converted to a list/array anyway. metatable marker and converts the dict to a list/array anyway.
vim.rpcnotify({channel}, {method}[, {args}...]) *vim.rpcnotify()* vim.rpcnotify({channel}, {method}[, {args}...]) *vim.rpcnotify()*
Sends {event} to {channel} via |RPC| and returns immediately. Sends {event} to {channel} via |RPC| and returns immediately. If
If {channel} is 0, the event is broadcast to all channels. {channel} is 0, the event is broadcast to all channels.
This function also works in a fast callback |lua-loop-callbacks|. This function also works in a fast callback |lua-loop-callbacks|.
vim.rpcrequest({channel}, {method}[, {args}...]) *vim.rpcrequest()* vim.rpcrequest({channel}, {method}[, {args}...]) *vim.rpcrequest()*
Sends a request to {channel} to invoke {method} via Sends a request to {channel} to invoke {method} via |RPC| and blocks
|RPC| and blocks until a response is received. until a response is received.
Note: NIL values as part of the return value is represented as Note: NIL values as part of the return value is represented as
|vim.NIL| special value |vim.NIL| special value
vim.stricmp({a}, {b}) *vim.stricmp()* vim.stricmp({a}, {b}) *vim.stricmp()*
Compares strings case-insensitively. Returns 0, 1 or -1 if strings Compares strings case-insensitively. Returns 0, 1 or -1 if strings
are equal, {a} is greater than {b} or {a} is lesser than {b}, are equal, {a} is greater than {b} or {a} is lesser than {b},
respectively. respectively.
vim.str_utfindex({str}[, {index}]) *vim.str_utfindex()* vim.str_utfindex({str}[, {index}]) *vim.str_utfindex()*
Convert byte index to UTF-32 and UTF-16 indicies. If {index} is not Convert byte index to UTF-32 and UTF-16 indicies. If {index} is not
supplied, the length of the string is used. All indicies are zero-based. supplied, the length of the string is used. All indicies are zero-based.
Returns two values: the UTF-32 and UTF-16 indicies respectively. Returns two values: the UTF-32 and UTF-16 indicies respectively.
@ -840,40 +837,40 @@ vim.wait({time} [, {callback}, {interval}, {fast_only}]) *vim.wait()*
end end
< <
vim.type_idx *vim.type_idx* vim.type_idx *vim.type_idx*
Type index for use in |lua-special-tbl|. Specifying one of the Type index for use in |lua-special-tbl|. Specifying one of the values
values from |vim.types| allows typing the empty table (it is from |vim.types| allows typing the empty table (it is unclear whether
unclear whether empty Lua table represents empty list or empty array) empty Lua table represents empty list or empty array) and forcing
and forcing integral numbers to be |Float|. See |lua-special-tbl| for integral numbers to be |Float|. See |lua-special-tbl| for more
more details. details.
vim.val_idx *vim.val_idx* vim.val_idx *vim.val_idx*
Value index for tables representing |Float|s. A table representing Value index for tables representing |Float|s. A table representing
floating-point value 1.0 looks like this: > floating-point value 1.0 looks like this: >
{ {
[vim.type_idx] = vim.types.float, [vim.type_idx] = vim.types.float,
[vim.val_idx] = 1.0, [vim.val_idx] = 1.0,
} }
< See also |vim.type_idx| and |lua-special-tbl|. < See also |vim.type_idx| and |lua-special-tbl|.
vim.types *vim.types* vim.types *vim.types*
Table with possible values for |vim.type_idx|. Contains two sets Table with possible values for |vim.type_idx|. Contains two sets of
of key-value pairs: first maps possible values for |vim.type_idx| key-value pairs: first maps possible values for |vim.type_idx| to
to human-readable strings, second maps human-readable type names to human-readable strings, second maps human-readable type names to
values for |vim.type_idx|. Currently contains pairs for `float`, values for |vim.type_idx|. Currently contains pairs for `float`,
`array` and `dictionary` types. `array` and `dictionary` types.
Note: one must expect that values corresponding to `vim.types.float`, Note: one must expect that values corresponding to `vim.types.float`,
`vim.types.array` and `vim.types.dictionary` fall under only two `vim.types.array` and `vim.types.dictionary` fall under only two
following assumptions: following assumptions:
1. Value may serve both as a key and as a value in a table. Given the 1. Value may serve both as a key and as a value in a table. Given the
properties of Lua tables this basically means “value is not `nil`”. properties of Lua tables this basically means “value is not `nil`”.
2. For each value in `vim.types` table `vim.types[vim.types[value]]` 2. For each value in `vim.types` table `vim.types[vim.types[value]]`
is the same as `value`. is the same as `value`.
No other restrictions are put on types, and it is not guaranteed that No other restrictions are put on types, and it is not guaranteed that
values corresponding to `vim.types.float`, `vim.types.array` and values corresponding to `vim.types.float`, `vim.types.array` and
`vim.types.dictionary` will not change or that `vim.types` table will `vim.types.dictionary` will not change or that `vim.types` table will
only contain values for these three types. only contain values for these three types.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
LUA-VIMSCRIPT BRIDGE *lua-vimscript* LUA-VIMSCRIPT BRIDGE *lua-vimscript*
@ -966,8 +963,8 @@ vim.env *vim.env*
*lua-vim-optlocal* *lua-vim-optlocal*
*lua-vim-setlocal* *lua-vim-setlocal*
In vimL, there is a succint and simple way to set options. For more In Vimscript, there is an way to set options |set-option|. In Lua, the
information, see |set-option|. In Lua, the corresponding method is `vim.opt`. corresponding method is `vim.opt`.
`vim.opt` provides several conveniences for setting and controlling options `vim.opt` provides several conveniences for setting and controlling options
from within Lua. from within Lua.
@ -975,18 +972,18 @@ from within Lua.
Examples: ~ Examples: ~
To set a boolean toggle: To set a boolean toggle:
In vimL: In Vimscript:
`set number` `set number`
In Lua: In Lua:
`vim.opt.number = true` `vim.opt.number = true`
To set an array of values: To set an array of values:
In vimL: In Vimscript:
`set wildignore=*.o,*.a,__pycache__` `set wildignore=*.o,*.a,__pycache__`
In Lua, there are two ways you can do this now. One is very similar to In Lua, there are two ways you can do this now. One is very similar to
the vimL way: the Vimscript form:
`vim.opt.wildignore = '*.o,*.a,__pycache__'` `vim.opt.wildignore = '*.o,*.a,__pycache__'`
However, vim.opt also supports a more elegent way of setting However, vim.opt also supports a more elegent way of setting
@ -1019,7 +1016,7 @@ from within Lua.
vim.opt.wildignore:remove { "node_modules" } vim.opt.wildignore:remove { "node_modules" }
< <
To set a map of values: To set a map of values:
In vimL: In Vimscript:
`set listchars=space:_,tab:>~` `set listchars=space:_,tab:>~`
In Lua: In Lua:

View File

@ -172,15 +172,16 @@ Using Vim scripts *using-scripts*
For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
*:so* *:source* *load-vim-script* *:so* *:source* *load-vim-script*
:so[urce] {file} Runs |Ex| commands or Lua code (".lua" files) read :[range]so[urce] [file] Runs |Ex| commands or Lua code (".lua" files) from
from {file}. [file], or from the current buffer if no [file] is
given.
Triggers the |SourcePre| autocommand. Triggers the |SourcePre| autocommand.
*:source!* *:source!*
:so[urce]! {file} Runs |Normal-mode| commands read from {file}. When :[range]so[urce]! {file}
used after |:global|, |:argdo|, |:windo|, |:bufdo|, in Runs |Normal-mode| commands from {file}. When used
after |:global|, |:argdo|, |:windo|, |:bufdo|, in
a loop or when another command follows the display a loop or when another command follows the display
won't be updated while executing the commands. won't be updated while executing the commands.
Cannot be used in the |sandbox|.
*:ru* *:runtime* *:ru* *:runtime*
:ru[ntime][!] [where] {file} .. :ru[ntime][!] [where] {file} ..

View File

@ -472,6 +472,7 @@ Compile-time features:
X11 integration (see |x11-selection|) X11 integration (see |x11-selection|)
Eval: Eval:
Vim9script
*js_encode()* *js_encode()*
*js_decode()* *js_decode()*
*v:none* (used by Vim to represent JavaScript "undefined"); use |v:null| instead. *v:none* (used by Vim to represent JavaScript "undefined"); use |v:null| instead.

View File

@ -90,7 +90,7 @@ static void nlua_error(lua_State *const lstate, const char *const msg)
lua_pop(lstate, 1); lua_pop(lstate, 1);
} }
/// Return version of current neovim build /// Gets the version of the current Nvim build.
/// ///
/// @param lstate Lua interpreter state. /// @param lstate Lua interpreter state.
static int nlua_nvim_version(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL static int nlua_nvim_version(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL

View File

@ -256,6 +256,8 @@ Number; !must be defined to function properly):
- `VALGRIND_LOG` (F) (S): overrides valgrind log file name used for `VALGRIND`. - `VALGRIND_LOG` (F) (S): overrides valgrind log file name used for `VALGRIND`.
- `TEST_COLORS` (F) (U) (D): enable pretty colors in test runner.
- `TEST_SKIP_FRAGILE` (F) (D): makes test suite skip some fragile tests. - `TEST_SKIP_FRAGILE` (F) (D): makes test suite skip some fragile tests.
- `TEST_TIMEOUT` (FU) (I): specifies maximum time, in seconds, before the test - `TEST_TIMEOUT` (FU) (I): specifies maximum time, in seconds, before the test

View File

@ -3,7 +3,7 @@ local global_helpers = require('test.helpers')
-- Colors are disabled by default. #15610 -- Colors are disabled by default. #15610
local colors = setmetatable({}, {__index = function() return function(s) return s end end}) local colors = setmetatable({}, {__index = function() return function(s) return s end end})
if os.getenv "NVIM_COLORS" then if os.getenv "TEST_COLORS" then
colors = require 'term.colors' colors = require 'term.colors'
end end