neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit db67607201a55d7a2d578c6c7661c8e6770f5b2f
parent 2f78ff816b03661b5f74d0624e973eaca0d64ef1
Author: Justin M. Keyes <justinkz@gmail.com>
Date:   Sat,  6 Sep 2025 13:49:19 -0400

docs: manpage, keycodes, json

Diffstat:
Mruntime/doc/ft_rust.txt | 2+-
Mruntime/doc/intro.txt | 133++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mruntime/doc/lua.txt | 34+++++++++++++++++++++++++---------
Mruntime/lua/vim/_meta/json.lua | 20++++++++++++++++++--
Mruntime/lua/vim/lsp.lua | 2+-
Mruntime/lua/vim/shared.lua | 19++++++++++---------
Msrc/man/nvim.1 | 4++--
Msrc/nvim/ui_defs.h | 2+-
8 files changed, 125 insertions(+), 91 deletions(-)

diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt @@ -167,7 +167,7 @@ g:rustfmt_detect_version ~ let g:rustfmt_detect_version = 1 < *g:rustfmt_find_toml* -g:rustfmt_emit_files ~ +g:rustfmt_find_toml ~ When set to 1, will try to find "rustfmt.toml" file by searching from current path upwards. Disabled by default for performance reasons >vim let g:rustfmt_find_toml = 1 diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt @@ -237,73 +237,74 @@ These names for keys are used in the documentation. They can also be used with the ":map" command. notation meaning equivalent decimal value(s) ~ -<Nul> zero CTRL-@ 0 (stored as 10) *<Nul>* -<BS> backspace CTRL-H 8 *backspace* -<Tab> tab CTRL-I 9 *tab* *Tab* +<Nul> Zero CTRL-@ 0 (stored as 10) *<Nul>* +<BS> Backspace CTRL-H 8 *backspace* +<Tab> Tab CTRL-I 9 *tab* *Tab* *linefeed* -<NL> linefeed CTRL-J 10 (used for <Nul>) -<CR> carriage return CTRL-M 13 *carriage-return* -<Return> same as <CR> *<Return>* -<Enter> same as <CR> *<Enter>* -<Esc> escape CTRL-[ 27 *escape* *<Esc>* -<Space> space 32 *space* -<lt> less-than < 60 *<lt>* -<Bslash> backslash \ 92 *backslash* *<Bslash>* -<Bar> vertical bar | 124 *<Bar>* -<Del> delete 127 -<CSI> command sequence intro ALT-Esc 155 *<CSI>* - -<EOL> end-of-line (can be <CR>, <NL> or <CR><NL>, - depends on system and 'fileformat') *<EOL>* -<Ignore> cancel wait-for-character *<Ignore>* -<NOP> no-op: do nothing (useful in mappings) *<Nop>* - -<Up> cursor-up *cursor-up* *cursor_up* -<Down> cursor-down *cursor-down* *cursor_down* -<Left> cursor-left *cursor-left* *cursor_left* -<Right> cursor-right *cursor-right* *cursor_right* -<S-Up> shift-cursor-up -<S-Down> shift-cursor-down -<S-Left> shift-cursor-left -<S-Right> shift-cursor-right -<C-Left> control-cursor-left -<C-Right> control-cursor-right -<F1> - <F12> function keys 1 to 12 *function_key* *function-key* -<S-F1> - <S-F12> shift-function keys 1 to 12 *<S-F1>* -<Help> help key -<Undo> undo key -<Find> find key -<Select> select key -<Insert> insert key -<Home> home *home* -<End> end *end* -<PageUp> page-up *page_up* *page-up* -<PageDown> page-down *page_down* *page-down* -<kUp> keypad cursor-up *keypad-cursor-up* -<kDown> keypad cursor-down *keypad-cursor-down* -<kLeft> keypad cursor-left *keypad-cursor-left* -<kRight> keypad cursor-right *keypad-cursor-right* -<kHome> keypad home (upper left) *keypad-home* -<kEnd> keypad end (lower left) *keypad-end* -<kOrigin> keypad origin (middle) *keypad-origin* -<kPageUp> keypad page-up (upper right) *keypad-page-up* -<kPageDown> keypad page-down (lower right) *keypad-page-down* -<kDel> keypad delete *keypad-delete* -<kPlus> keypad + *keypad-plus* -<kMinus> keypad - *keypad-minus* -<kMultiply> keypad * *keypad-multiply* -<kDivide> keypad / *keypad-divide* -<kPoint> keypad . *keypad-point* -<kComma> keypad , *keypad-comma* -<kEqual> keypad = *keypad-equal* -<kEnter> keypad Enter *keypad-enter* -<k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9* -<S-…> shift-key *shift* *<S-* -<C-…> control-key *control* *ctrl* *<C-* -<M-…> alt-key or meta-key *META* *ALT* *<M-* -<A-…> same as <M-…> *<A-* -<T-…> meta-key when it's not alt *<T-* -<D-…> command-key or "super" key *<D-* +<NL> Linefeed CTRL-J 10 (used for <Nul>) +<CR> Carriage return CTRL-M 13 *carriage-return* +<Return> Same as <CR> *<Return>* +<Enter> Same as <CR> *<Enter>* +<Esc> Escape CTRL-[ 27 *escape* *<Esc>* +<Space> Space 32 *space* +<lt> Less-than < 60 *<lt>* +<Bslash> Backslash \ 92 *backslash* *<Bslash>* +<Bar> Vertical bar | 124 *<Bar>* +<Del> Delete 127 +<CSI> Command sequence intro ALT-Esc 155 *<CSI>* + +<EOL> End-of-line (can be <CR>, <NL> or <CR><NL>, + Depends on system and 'fileformat') *<EOL>* +<Ignore> Cancel wait-for-character *<Ignore>* +<NOP> Do nothing (no-op). Useful in mappings. *<Nop>* + <Ignore> is a key, <NOP> is "absence of a key". + +<Up> Cursor-up *cursor-up* *cursor_up* +<Down> Cursor-down *cursor-down* *cursor_down* +<Left> Cursor-left *cursor-left* *cursor_left* +<Right> Cursor-right *cursor-right* *cursor_right* +<S-Up> Shift-cursor-up +<S-Down> Shift-cursor-down +<S-Left> Shift-cursor-left +<S-Right> Shift-cursor-right +<C-Left> Control-cursor-left +<C-Right> Control-cursor-right +<F1> - <F12> Function keys 1 to 12 *function_key* *function-key* +<S-F1> - <S-F12> Shift-function keys 1 to 12 *<S-F1>* +<Help> Help key +<Undo> Undo key +<Find> Find key +<Select> Select key +<Insert> Insert key +<Home> Home *home* +<End> End *end* +<PageUp> Page-up *page_up* *page-up* +<PageDown> Page-down *page_down* *page-down* +<kUp> Keypad cursor-up *keypad-cursor-up* +<kDown> Keypad cursor-down *keypad-cursor-down* +<kLeft> Keypad cursor-left *keypad-cursor-left* +<kRight> Keypad cursor-right *keypad-cursor-right* +<kHome> Keypad home (upper left) *keypad-home* +<kEnd> Keypad end (lower left) *keypad-end* +<kOrigin> Keypad origin (middle) *keypad-origin* +<kPageUp> Keypad page-up (upper right) *keypad-page-up* +<kPageDown> Keypad page-down (lower right) *keypad-page-down* +<kDel> Keypad delete *keypad-delete* +<kPlus> Keypad + *keypad-plus* +<kMinus> Keypad - *keypad-minus* +<kMultiply> Keypad * *keypad-multiply* +<kDivide> Keypad / *keypad-divide* +<kPoint> Keypad . *keypad-point* +<kComma> Keypad , *keypad-comma* +<kEqual> Keypad = *keypad-equal* +<kEnter> Keypad Enter *keypad-enter* +<k0> - <k9> Keypad 0 to 9 *keypad-0* *keypad-9* +<S-…> Shift-key *shift* *<S-* +<C-…> Control-key *control* *ctrl* *<C-* +<M-…> Alt-key or meta-key *META* *ALT* *<M-* +<A-…> Same as <M-…> *<A-* +<T-…> Meta-key, when it's not alt *<T-* +<D-…> Command-key or "super" key *<D-* Note: diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt @@ -2057,12 +2057,12 @@ vim.tbl_extend({behavior}, {...}) *vim.tbl_extend()* See also: ~ • |extend()| -vim.tbl_filter({func}, {t}) *vim.tbl_filter()* +vim.tbl_filter({fn}, {t}) *vim.tbl_filter()* Filter a table using a predicate function Parameters: ~ - • {func} (`function`) Function - • {t} (`table`) Table + • {fn} (`function`) Function + • {t} (`table`) Table Return: ~ (`any[]`) Table of filtered values @@ -2110,12 +2110,14 @@ vim.tbl_keys({t}) *vim.tbl_keys()* • From https://github.com/premake/premake-core/blob/master/src/base/table.lua -vim.tbl_map({func}, {t}) *vim.tbl_map()* - Apply a function to all values of a table. +vim.tbl_map({fn}, {t}) *vim.tbl_map()* + Applies function `fn` to all values of table `t`, in `pairs()` iteration + order (which is not guaranteed to be stable, even when the data doesn't + change). Parameters: ~ - • {func} (`fun(value: T): any`) Function - • {t} (`table<any, T>`) Table + • {fn} (`fun(value: T): any`) Function + • {t} (`table<any, T>`) Table Return: ~ (`table`) Table of transformed values @@ -3342,7 +3344,7 @@ JSON-encoded strings. Supports |vim.NIL| and |vim.empty_dict()|. vim.json.decode({str}, {opts}) *vim.json.decode()* - Decodes (or "unpacks") the JSON-encoded {str} to a Lua object. + Decodes (or "unpacks") stringified JSON to a Lua object. • Decodes JSON "null" as |vim.NIL| (controllable by {opts}, see below). • Decodes empty object as |vim.empty_dict()|. • Decodes empty array as `{}` (empty Lua table). @@ -3365,7 +3367,21 @@ vim.json.decode({str}, {opts}) *vim.json.decode()* (`any`) vim.json.encode({obj}, {opts}) *vim.json.encode()* - Encodes (or "packs") Lua object {obj} as JSON in a Lua string. + Encodes (or "packs") a Lua object to stringified JSON. + + Example: use the `indent` flag to implement a basic 'formatexpr' for JSON, + so you can use |gq| with a motion to format JSON in a buffer. (The motion + must operate on a valid JSON object.) >lua + function _G.fmt_json() + local indent = vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' + local lines = vim.api.nvim_buf_get_lines(0, vim.v.lnum - 1, vim.v.lnum + vim.v.count - 1, true) + local o = vim.json.decode(table.concat(lines, '\n')) + local stringified = vim.json.encode(o, { indent = indent }) + lines = vim.split(stringified, '\n') + vim.api.nvim_buf_set_lines(0, vim.v.lnum - 1, vim.v.count, true, lines) + end + vim.o.formatexpr = 'v:lua.fmt_json()' +< Parameters: ~ • {obj} (`any`) diff --git a/runtime/lua/vim/_meta/json.lua b/runtime/lua/vim/_meta/json.lua @@ -10,7 +10,7 @@ vim.json = {} --- This module provides encoding and decoding of Lua objects to and --- from JSON-encoded strings. Supports |vim.NIL| and |vim.empty_dict()|. ---- Decodes (or "unpacks") the JSON-encoded {str} to a Lua object. +--- Decodes (or "unpacks") stringified JSON to a Lua object. --- --- - Decodes JSON "null" as |vim.NIL| (controllable by {opts}, see below). --- - Decodes empty object as |vim.empty_dict()|. @@ -33,7 +33,23 @@ vim.json = {} ---@return any function vim.json.decode(str, opts) end ---- Encodes (or "packs") Lua object {obj} as JSON in a Lua string. +--- Encodes (or "packs") a Lua object to stringified JSON. +--- +--- Example: use the `indent` flag to implement a basic 'formatexpr' for JSON, so you can use |gq| +--- with a motion to format JSON in a buffer. (The motion must operate on a valid JSON object.) +--- +--- ```lua +--- function _G.fmt_json() +--- local indent = vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' +--- local lines = vim.api.nvim_buf_get_lines(0, vim.v.lnum - 1, vim.v.lnum + vim.v.count - 1, true) +--- local o = vim.json.decode(table.concat(lines, '\n')) +--- local stringified = vim.json.encode(o, { indent = indent }) +--- lines = vim.split(stringified, '\n') +--- vim.api.nvim_buf_set_lines(0, vim.v.lnum - 1, vim.v.count, true, lines) +--- end +--- vim.o.formatexpr = 'v:lua.fmt_json()' +--- ``` +--- ---@param obj any ---@param opts? table<string,any> Options table with keys: --- - escape_slash: (boolean) (default false) Escape slash diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua @@ -50,7 +50,7 @@ lsp._resolve_to_request = { ---@param method (vim.lsp.protocol.Method.ClientToServer) name of the method function lsp._unsupported_method(method) local msg = string.format( - 'method %s is not supported by any of the servers registered for the current buffer', + 'vim.lsp: method %q is not supported by any server activated for this buffer', method ) log.warn(msg) diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua @@ -244,20 +244,21 @@ function vim.tbl_values(t) return values end ---- Apply a function to all values of a table. +--- Applies function `fn` to all values of table `t`, in `pairs()` iteration order (which is not +--- guaranteed to be stable, even when the data doesn't change). --- ---@generic T ----@param func fun(value: T): any Function +---@param fn fun(value: T): any Function ---@param t table<any, T> Table ---@return table : Table of transformed values -function vim.tbl_map(func, t) - vim.validate('func', func, 'callable') +function vim.tbl_map(fn, t) + vim.validate('fn', fn, 'callable') vim.validate('t', t, 'table') --- @cast t table<any,any> local rettab = {} --- @type table<any,any> for k, v in pairs(t) do - rettab[k] = func(v) + rettab[k] = fn(v) end return rettab end @@ -265,17 +266,17 @@ end --- Filter a table using a predicate function --- ---@generic T ----@param func fun(value: T): boolean (function) Function +---@param fn fun(value: T): boolean (function) Function ---@param t table<any, T> (table) Table ---@return T[] : Table of filtered values -function vim.tbl_filter(func, t) - vim.validate('func', func, 'callable') +function vim.tbl_filter(fn, t) + vim.validate('fn', fn, 'callable') vim.validate('t', t, 'table') --- @cast t table<any,any> local rettab = {} --- @type table<any,any> for _, entry in pairs(t) do - if func(entry) then + if fn(entry) then rettab[#rettab + 1] = entry end end diff --git a/src/man/nvim.1 b/src/man/nvim.1 @@ -197,8 +197,8 @@ Skip loading plugins (by setting the \(aqnoloadplugins\(aq option). Implied by .Cm -u NONE . .It Fl -clean -Start Nvim with \(lqfactory defaults\(rq (no user config and plugins, no -shada). +Start Nvim with \(lqfactory defaults\(rq (only builtin plugins, no user +config/plugins, no shada). .Ic ":help --clean" .It Fl o Ns Op Ar N Open diff --git a/src/nvim/ui_defs.h b/src/nvim/ui_defs.h @@ -34,7 +34,7 @@ typedef struct { bool rgb; bool override; ///< Force highest-requested UI capabilities. bool composed; - bool ui_ext[kUIExtCount]; ///< Externalized UI capabilities. + bool ui_ext[kUIExtCount]; ///< UI capabilities/extensions. int width; int height; int pum_nlines; ///< actual nr. lines shown in PUM