]> granicus.if.org Git - vim/commitdiff
patch 8.2.3917: the eval.txt help file is way too big v8.2.3917
authorBram Moolenaar <Bram@vim.org>
Mon, 27 Dec 2021 21:28:34 +0000 (21:28 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 27 Dec 2021 21:28:34 +0000 (21:28 +0000)
Problem:    The eval.txt help file is way too big.
Solution:   Move the builtin function details to a separate file.

runtime/doc/Makefile
runtime/doc/builtin.txt [new file with mode: 0644]
runtime/doc/eval.txt
runtime/doc/help.txt
runtime/doc/remote.txt
src/version.c

index e0c0f841e84fc1f78b5a1540f8e3fc21930b500b..de986a6219f9a3c117709be358a43d1a7c977413 100644 (file)
@@ -16,6 +16,7 @@ include ../../src/auto/config.mk
 DOCS = \
        arabic.txt \
        autocmd.txt \
+       builtin.txt \
        change.txt \
        channel.txt \
        cmdline.txt \
@@ -161,6 +162,7 @@ DOCS = \
 HTMLS = \
        arabic.html \
        autocmd.html \
+       builtin.html \
        change.html \
        channel.html \
        cmdline.html \
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
new file mode 100644 (file)
index 0000000..8855dd0
--- /dev/null
@@ -0,0 +1,10125 @@
+*builtin.txt*  For Vim version 8.2.  Last change: 2021 Dec 27
+
+
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+
+
+Builtin functions                              *builtin-functions*
+
+Note: Expression evaluation can be disabled at compile time.  If this has been
+done, the builtin functions are not available.  See |+eval| and
+|no-eval-feature|.
+
+1. Overview                            |builtin-function-list|
+2. Details                             |builtin-function-details|
+3. Feature list                                |feature-list|
+4. Matching a pattern in a String      |string-match|
+
+==============================================================================
+1. Overview                                    *builtin-function-list*
+
+Use CTRL-] on the function name to jump to the full explanation.
+
+USAGE                          RESULT  DESCRIPTION     ~
+
+abs({expr})                    Float or Number  absolute value of {expr}
+acos({expr})                   Float   arc cosine of {expr}
+add({object}, {item})          List/Blob   append {item} to {object}
+and({expr}, {expr})            Number  bitwise AND
+append({lnum}, {text})         Number  append {text} below line {lnum}
+appendbufline({expr}, {lnum}, {text})
+                               Number  append {text} below line {lnum}
+                                       in buffer {expr}
+argc([{winid}])                        Number  number of files in the argument list
+argidx()                       Number  current index in the argument list
+arglistid([{winnr} [, {tabnr}]]) Number        argument list id
+argv({nr} [, {winid}])         String  {nr} entry of the argument list
+argv([-1, {winid}])            List    the argument list
+asin({expr})                   Float   arc sine of {expr}
+assert_beeps({cmd})            Number  assert {cmd} causes a beep
+assert_equal({exp}, {act} [, {msg}])
+                               Number  assert {exp} is equal to {act}
+assert_equalfile({fname-one}, {fname-two} [, {msg}])
+                               Number  assert file contents are equal
+assert_exception({error} [, {msg}])
+                               Number  assert {error} is in v:exception
+assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
+                               Number  assert {cmd} fails
+assert_false({actual} [, {msg}])
+                               Number  assert {actual} is false
+assert_inrange({lower}, {upper}, {actual} [, {msg}])
+                               Number  assert {actual} is inside the range
+assert_match({pat}, {text} [, {msg}])
+                               Number  assert {pat} matches {text}
+assert_nobeep({cmd})           Number  assert {cmd} does not cause a beep
+assert_notequal({exp}, {act} [, {msg}])
+                               Number  assert {exp} is not equal {act}
+assert_notmatch({pat}, {text} [, {msg}])
+                               Number  assert {pat} not matches {text}
+assert_report({msg})           Number  report a test failure
+assert_true({actual} [, {msg}])        Number  assert {actual} is true
+atan({expr})                   Float   arc tangent of {expr}
+atan2({expr1}, {expr2})                Float   arc tangent of {expr1} / {expr2}
+balloon_gettext()              String  current text in the balloon
+balloon_show({expr})           none    show {expr} inside the balloon
+balloon_split({msg})           List    split {msg} as used for a balloon
+blob2list({blob})              List    convert {blob} into a list of numbers
+browse({save}, {title}, {initdir}, {default})
+                               String  put up a file requester
+browsedir({title}, {initdir})  String  put up a directory requester
+bufadd({name})                 Number  add a buffer to the buffer list
+bufexists({buf})               Number  |TRUE| if buffer {buf} exists
+buflisted({buf})               Number  |TRUE| if buffer {buf} is listed
+bufload({buf})                 Number  load buffer {buf} if not loaded yet
+bufloaded({buf})               Number  |TRUE| if buffer {buf} is loaded
+bufname([{buf}])               String  Name of the buffer {buf}
+bufnr([{buf} [, {create}]])    Number  Number of the buffer {buf}
+bufwinid({buf})                        Number  window ID of buffer {buf}
+bufwinnr({buf})                        Number  window number of buffer {buf}
+byte2line({byte})              Number  line number at byte count {byte}
+byteidx({expr}, {nr})          Number  byte index of {nr}'th char in {expr}
+byteidxcomp({expr}, {nr})      Number  byte index of {nr}'th char in {expr}
+call({func}, {arglist} [, {dict}])
+                               any     call {func} with arguments {arglist}
+ceil({expr})                   Float   round {expr} up
+ch_canread({handle})           Number  check if there is something to read
+ch_close({handle})             none    close {handle}
+ch_close_in({handle})          none    close in part of {handle}
+ch_evalexpr({handle}, {expr} [, {options}])
+                               any     evaluate {expr} on JSON {handle}
+ch_evalraw({handle}, {string} [, {options}])
+                               any     evaluate {string} on raw {handle}
+ch_getbufnr({handle}, {what})  Number  get buffer number for {handle}/{what}
+ch_getjob({channel})           Job     get the Job of {channel}
+ch_info({handle})              String  info about channel {handle}
+ch_log({msg} [, {handle}])     none    write {msg} in the channel log file
+ch_logfile({fname} [, {mode}]) none    start logging channel activity
+ch_open({address} [, {options}])
+                               Channel open a channel to {address}
+ch_read({handle} [, {options}]) String read from {handle}
+ch_readblob({handle} [, {options}])
+                               Blob    read Blob from {handle}
+ch_readraw({handle} [, {options}])
+                               String  read raw from {handle}
+ch_sendexpr({handle}, {expr} [, {options}])
+                               any     send {expr} over JSON {handle}
+ch_sendraw({handle}, {expr} [, {options}])
+                               any     send {expr} over raw {handle}
+ch_setoptions({handle}, {options})
+                               none    set options for {handle}
+ch_status({handle} [, {options}])
+                               String  status of channel {handle}
+changenr()                     Number  current change number
+char2nr({expr} [, {utf8}])     Number  ASCII/UTF-8 value of first char in {expr}
+charclass({string})            Number  character class of {string}
+charcol({expr})                        Number  column number of cursor or mark
+charidx({string}, {idx} [, {countcc}])
+                               Number  char index of byte {idx} in {string}
+chdir({dir})                   String  change current working directory
+cindent({lnum})                        Number  C indent for line {lnum}
+clearmatches([{win}])          none    clear all matches
+col({expr})                    Number  column byte index of cursor or mark
+complete({startcol}, {matches}) none   set Insert mode completion
+complete_add({expr})           Number  add completion match
+complete_check()               Number  check for key typed during completion
+complete_info([{what}])                Dict    get current completion information
+confirm({msg} [, {choices} [, {default} [, {type}]]])
+                               Number  number of choice picked by user
+copy({expr})                   any     make a shallow copy of {expr}
+cos({expr})                    Float   cosine of {expr}
+cosh({expr})                   Float   hyperbolic cosine of {expr}
+count({comp}, {expr} [, {ic} [, {start}]])
+                               Number  count how many {expr} are in {comp}
+cscope_connection([{num}, {dbpath} [, {prepend}]])
+                               Number  checks existence of cscope connection
+cursor({lnum}, {col} [, {off}])
+                               Number  move cursor to {lnum}, {col}, {off}
+cursor({list})                 Number  move cursor to position in {list}
+debugbreak({pid})              Number  interrupt process being debugged
+deepcopy({expr} [, {noref}])   any     make a full copy of {expr}
+delete({fname} [, {flags}])    Number  delete the file or directory {fname}
+deletebufline({buf}, {first} [, {last}])
+                               Number  delete lines from buffer {buf}
+did_filetype()                 Number  |TRUE| if FileType autocmd event used
+diff_filler({lnum})            Number  diff filler lines about {lnum}
+diff_hlID({lnum}, {col})       Number  diff highlighting at {lnum}/{col}
+digraph_get({chars})           String  get the |digraph| of {chars}
+digraph_getlist([{listall}])   List    get all |digraph|s
+digraph_set({chars}, {digraph})        Boolean register |digraph|
+digraph_setlist({digraphlist}) Boolean register multiple |digraph|s
+echoraw({expr})                        none    output {expr} as-is
+empty({expr})                  Number  |TRUE| if {expr} is empty
+environ()                      Dict    return environment variables
+escape({string}, {chars})      String  escape {chars} in {string} with '\'
+eval({string})                 any     evaluate {string} into its value
+eventhandler()                 Number  |TRUE| if inside an event handler
+executable({expr})             Number  1 if executable {expr} exists
+execute({command})             String  execute {command} and get the output
+exepath({expr})                        String  full path of the command {expr}
+exists({expr})                 Number  |TRUE| if {expr} exists
+exists_compiled({expr})                Number  |TRUE| if {expr} exists at compile time
+exp({expr})                    Float   exponential of {expr}
+expand({expr} [, {nosuf} [, {list}]])
+                               any     expand special keywords in {expr}
+expandcmd({expr})              String  expand {expr} like with `:edit`
+extend({expr1}, {expr2} [, {expr3}])
+                               List/Dict insert items of {expr2} into {expr1}
+extendnew({expr1}, {expr2} [, {expr3}])
+                               List/Dict like |extend()| but creates a new
+                                       List or Dictionary
+feedkeys({string} [, {mode}])  Number  add key sequence to typeahead buffer
+filereadable({file})           Number  |TRUE| if {file} is a readable file
+filewritable({file})           Number  |TRUE| if {file} is a writable file
+filter({expr1}, {expr2})       List/Dict/Blob/String
+                                       remove items from {expr1} where
+                                       {expr2} is 0
+finddir({name} [, {path} [, {count}]])
+                               String  find directory {name} in {path}
+findfile({name} [, {path} [, {count}]])
+                               String  find file {name} in {path}
+flatten({list} [, {maxdepth}]) List    flatten {list} up to {maxdepth} levels
+flattennew({list} [, {maxdepth}])
+                               List    flatten a copy of {list}
+float2nr({expr})               Number  convert Float {expr} to a Number
+floor({expr})                  Float   round {expr} down
+fmod({expr1}, {expr2})         Float   remainder of {expr1} / {expr2}
+fnameescape({fname})           String  escape special characters in {fname}
+fnamemodify({fname}, {mods})   String  modify file name
+foldclosed({lnum})             Number  first line of fold at {lnum} if closed
+foldclosedend({lnum})          Number  last line of fold at {lnum} if closed
+foldlevel({lnum})              Number  fold level at {lnum}
+foldtext()                     String  line displayed for closed fold
+foldtextresult({lnum})         String  text for closed fold at {lnum}
+foreground()                   Number  bring the Vim window to the foreground
+fullcommand({name})            String  get full command from {name}
+funcref({name} [, {arglist}] [, {dict}])
+                               Funcref reference to function {name}
+function({name} [, {arglist}] [, {dict}])
+                               Funcref named reference to function {name}
+garbagecollect([{atexit}])     none    free memory, breaking cyclic references
+get({list}, {idx} [, {def}])   any     get item {idx} from {list} or {def}
+get({dict}, {key} [, {def}])   any     get item {key} from {dict} or {def}
+get({func}, {what})            any     get property of funcref/partial {func}
+getbufinfo([{buf}])            List    information about buffers
+getbufline({buf}, {lnum} [, {end}])
+                               List    lines {lnum} to {end} of buffer {buf}
+getbufvar({buf}, {varname} [, {def}])
+                               any     variable {varname} in buffer {buf}
+getchangelist([{buf}])         List    list of change list items
+getchar([expr])                        Number or String
+                                       get one character from the user
+getcharmod()                   Number  modifiers for the last typed character
+getcharpos({expr})             List    position of cursor, mark, etc.
+getcharsearch()                        Dict    last character search
+getcharstr([expr])             String  get one character from the user
+getcmdline()                   String  return the current command-line
+getcmdpos()                    Number  return cursor position in command-line
+getcmdtype()                   String  return current command-line type
+getcmdwintype()                        String  return current command-line window type
+getcompletion({pat}, {type} [, {filtered}])
+                               List    list of cmdline completion matches
+getcurpos([{winnr}])           List    position of the cursor
+getcursorcharpos([{winnr}])    List    character position of the cursor
+getcwd([{winnr} [, {tabnr}]])  String  get the current working directory
+getenv({name})                 String  return environment variable
+getfontname([{name}])          String  name of font being used
+getfperm({fname})              String  file permissions of file {fname}
+getfsize({fname})              Number  size in bytes of file {fname}
+getftime({fname})              Number  last modification time of file
+getftype({fname})              String  description of type of file {fname}
+getimstatus()                  Number  |TRUE| if the IME status is active
+getjumplist([{winnr} [, {tabnr}]])
+                               List    list of jump list items
+getline({lnum})                        String  line {lnum} of current buffer
+getline({lnum}, {end})         List    lines {lnum} to {end} of current buffer
+getloclist({nr})               List    list of location list items
+getloclist({nr}, {what})       Dict    get specific location list properties
+getmarklist([{buf}])           List    list of global/local marks
+getmatches([{win}])            List    list of current matches
+getmousepos()                  Dict    last known mouse position
+getpid()                       Number  process ID of Vim
+getpos({expr})                 List    position of cursor, mark, etc.
+getqflist()                    List    list of quickfix items
+getqflist({what})              Dict    get specific quickfix list properties
+getreg([{regname} [, 1 [, {list}]]])
+                               String or List   contents of a register
+getreginfo([{regname}])                Dict    information about a register
+getregtype([{regname}])                String  type of a register
+gettabinfo([{expr}])           List    list of tab pages
+gettabvar({nr}, {varname} [, {def}])
+                               any     variable {varname} in tab {nr} or {def}
+gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
+                               any     {name} in {winnr} in tab page {tabnr}
+gettagstack([{nr}])            Dict    get the tag stack of window {nr}
+gettext({text})                        String  lookup translation of {text}
+getwininfo([{winid}])          List    list of info about each window
+getwinpos([{timeout}])         List    X and Y coord in pixels of the Vim window
+getwinposx()                   Number  X coord in pixels of the Vim window
+getwinposy()                   Number  Y coord in pixels of the Vim window
+getwinvar({nr}, {varname} [, {def}])
+                               any     variable {varname} in window {nr}
+glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
+                               any     expand file wildcards in {expr}
+glob2regpat({expr})            String  convert a glob pat into a search pat
+globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
+                               String  do glob({expr}) for all dirs in {path}
+has({feature} [, {check}])     Number  |TRUE| if feature {feature} supported
+has_key({dict}, {key})         Number  |TRUE| if {dict} has entry {key}
+haslocaldir([{winnr} [, {tabnr}]])
+                               Number  |TRUE| if the window executed |:lcd|
+                                       or |:tcd|
+hasmapto({what} [, {mode} [, {abbr}]])
+                               Number  |TRUE| if mapping to {what} exists
+histadd({history}, {item})     Number  add an item to a history
+histdel({history} [, {item}])  Number  remove an item from a history
+histget({history} [, {index}]) String  get the item {index} from a history
+histnr({history})              Number  highest index of a history
+hlID({name})                   Number  syntax ID of highlight group {name}
+hlexists({name})               Number  |TRUE| if highlight group {name} exists
+hlget([{name} [, {resolve}]])  List    get highlight group attributes
+hlset({list})                  Number  set highlight group attributes
+hostname()                     String  name of the machine Vim is running on
+iconv({expr}, {from}, {to})    String  convert encoding of {expr}
+indent({lnum})                 Number  indent of line {lnum}
+index({object}, {expr} [, {start} [, {ic}]])
+                               Number  index in {object} where {expr} appears
+input({prompt} [, {text} [, {completion}]])
+                               String  get input from the user
+inputdialog({prompt} [, {text} [, {completion}]])
+                               String  like input() but in a GUI dialog
+inputlist({textlist})          Number  let the user pick from a choice list
+inputrestore()                 Number  restore typeahead
+inputsave()                    Number  save and clear typeahead
+inputsecret({prompt} [, {text}]) String        like input() but hiding the text
+insert({object}, {item} [, {idx}]) List        insert {item} in {object} [before {idx}]
+interrupt()                    none    interrupt script execution
+invert({expr})                 Number  bitwise invert
+isdirectory({directory})       Number  |TRUE| if {directory} is a directory
+isinf({expr})                  Number  determine if {expr} is infinity value
+                                       (positive or negative)
+islocked({expr})               Number  |TRUE| if {expr} is locked
+isnan({expr})                  Number  |TRUE| if {expr} is NaN
+items({dict})                  List    key-value pairs in {dict}
+job_getchannel({job})          Channel get the channel handle for {job}
+job_info([{job}])              Dict    get information about {job}
+job_setoptions({job}, {options}) none  set options for {job}
+job_start({command} [, {options}])
+                               Job     start a job
+job_status({job})              String  get the status of {job}
+job_stop({job} [, {how}])      Number  stop {job}
+join({list} [, {sep}])         String  join {list} items into one String
+js_decode({string})            any     decode JS style JSON
+js_encode({expr})              String  encode JS style JSON
+json_decode({string})          any     decode JSON
+json_encode({expr})            String  encode JSON
+keys({dict})                   List    keys in {dict}
+len({expr})                    Number  the length of {expr}
+libcall({lib}, {func}, {arg})  String  call {func} in library {lib} with {arg}
+libcallnr({lib}, {func}, {arg})        Number  idem, but return a Number
+line({expr} [, {winid}])       Number  line nr of cursor, last line or mark
+line2byte({lnum})              Number  byte count of line {lnum}
+lispindent({lnum})             Number  Lisp indent for line {lnum}
+list2blob({list})              Blob    turn {list} of numbers into a Blob
+list2str({list} [, {utf8}])    String  turn {list} of numbers into a String
+listener_add({callback} [, {buf}])
+                               Number  add a callback to listen to changes
+listener_flush([{buf}])                none    invoke listener callbacks
+listener_remove({id})          none    remove a listener callback
+localtime()                    Number  current time
+log({expr})                    Float   natural logarithm (base e) of {expr}
+log10({expr})                  Float   logarithm of Float {expr} to base 10
+luaeval({expr} [, {expr}])     any     evaluate |Lua| expression
+map({expr1}, {expr2})          List/Dict/Blob/String
+                                       change each item in {expr1} to {expr2}
+maparg({name} [, {mode} [, {abbr} [, {dict}]]])
+                               String or Dict
+                                       rhs of mapping {name} in mode {mode}
+mapcheck({name} [, {mode} [, {abbr}]])
+                               String  check for mappings matching {name}
+mapnew({expr1}, {expr2})       List/Dict/Blob/String
+                                       like |map()| but creates a new List or
+                                       Dictionary
+mapset({mode}, {abbr}, {dict}) none    restore mapping from |maparg()| result
+match({expr}, {pat} [, {start} [, {count}]])
+                               Number  position where {pat} matches in {expr}
+matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
+                               Number  highlight {pattern} with {group}
+matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
+                               Number  highlight positions with {group}
+matcharg({nr})                 List    arguments of |:match|
+matchdelete({id} [, {win}])    Number  delete match identified by {id}
+matchend({expr}, {pat} [, {start} [, {count}]])
+                               Number  position where {pat} ends in {expr}
+matchfuzzy({list}, {str} [, {dict}])
+                               List    fuzzy match {str} in {list}
+matchfuzzypos({list}, {str} [, {dict}])
+                               List    fuzzy match {str} in {list}
+matchlist({expr}, {pat} [, {start} [, {count}]])
+                               List    match and submatches of {pat} in {expr}
+matchstr({expr}, {pat} [, {start} [, {count}]])
+                               String  {count}'th match of {pat} in {expr}
+matchstrpos({expr}, {pat} [, {start} [, {count}]])
+                               List    {count}'th match of {pat} in {expr}
+max({expr})                    Number  maximum value of items in {expr}
+menu_info({name} [, {mode}])   Dict    get menu item information
+min({expr})                    Number  minimum value of items in {expr}
+mkdir({name} [, {path} [, {prot}]])
+                               Number  create directory {name}
+mode([expr])                   String  current editing mode
+mzeval({expr})                 any     evaluate |MzScheme| expression
+nextnonblank({lnum})           Number  line nr of non-blank line >= {lnum}
+nr2char({expr} [, {utf8}])     String  single char with ASCII/UTF-8 value {expr}
+or({expr}, {expr})             Number  bitwise OR
+pathshorten({expr} [, {len}])  String  shorten directory names in a path
+perleval({expr})               any     evaluate |Perl| expression
+popup_atcursor({what}, {options}) Number create popup window near the cursor
+popup_beval({what}, {options}) Number  create popup window for 'ballooneval'
+popup_clear()                  none    close all popup windows
+popup_close({id} [, {result}]) none    close popup window {id}
+popup_create({what}, {options}) Number create a popup window
+popup_dialog({what}, {options}) Number create a popup window used as a dialog
+popup_filter_menu({id}, {key})  Number filter for a menu popup window
+popup_filter_yesno({id}, {key}) Number filter for a dialog popup window
+popup_findinfo()               Number  get window ID of info popup window
+popup_findpreview()            Number  get window ID of preview popup window
+popup_getoptions({id})         Dict    get options of popup window {id}
+popup_getpos({id})             Dict    get position of popup window {id}
+popup_hide({id})               none    hide popup menu {id}
+popup_list()                   List    get a list of window IDs of all popups
+popup_locate({row}, {col})     Number  get window ID of popup at position
+popup_menu({what}, {options})  Number  create a popup window used as a menu
+popup_move({id}, {options})    none    set position of popup window {id}
+popup_notification({what}, {options})
+                               Number  create a notification popup window
+popup_setoptions({id}, {options})
+                               none    set options for popup window {id}
+popup_settext({id}, {text})    none    set the text of popup window {id}
+popup_show({id})               none    unhide popup window {id}
+pow({x}, {y})                  Float   {x} to the power of {y}
+prevnonblank({lnum})           Number  line nr of non-blank line <= {lnum}
+printf({fmt}, {expr1}...)      String  format text
+prompt_getprompt({buf})                String  get prompt text
+prompt_setcallback({buf}, {expr}) none set prompt callback function
+prompt_setinterrupt({buf}, {text}) none        set prompt interrupt function
+prompt_setprompt({buf}, {text}) none   set prompt text
+prop_add({lnum}, {col}, {props})  none add one text property
+prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
+                               none    add multiple text properties
+prop_clear({lnum} [, {lnum-end} [, {props}]])
+                               none    remove all text properties
+prop_find({props} [, {direction}])
+                               Dict    search for a text property
+prop_list({lnum} [, {props}])  List    text properties in {lnum}
+prop_remove({props} [, {lnum} [, {lnum-end}]])
+                               Number  remove a text property
+prop_type_add({name}, {props}) none    define a new property type
+prop_type_change({name}, {props})
+                               none    change an existing property type
+prop_type_delete({name} [, {props}])
+                               none    delete a property type
+prop_type_get({name} [, {props}])
+                               Dict    get property type values
+prop_type_list([{props}])      List    get list of property types
+pum_getpos()                   Dict    position and size of pum if visible
+pumvisible()                   Number  whether popup menu is visible
+py3eval({expr})                        any     evaluate |python3| expression
+pyeval({expr})                 any     evaluate |Python| expression
+pyxeval({expr})                        any     evaluate |python_x| expression
+rand([{expr}])                 Number  get pseudo-random number
+range({expr} [, {max} [, {stride}]])
+                               List    items from {expr} to {max}
+readblob({fname})              Blob    read a |Blob| from {fname}
+readdir({dir} [, {expr} [, {dict}]])
+                               List    file names in {dir} selected by {expr}
+readdirex({dir} [, {expr} [, {dict}]])
+                               List    file info in {dir} selected by {expr}
+readfile({fname} [, {type} [, {max}]])
+                               List    get list of lines from file {fname}
+reduce({object}, {func} [, {initial}])
+                               any     reduce {object} using {func}
+reg_executing()                        String  get the executing register name
+reg_recording()                        String  get the recording register name
+reltime([{start} [, {end}]])   List    get time value
+reltimefloat({time})           Float   turn the time value into a Float
+reltimestr({time})             String  turn time value into a String
+remote_expr({server}, {string} [, {idvar} [, {timeout}]])
+                               String  send expression
+remote_foreground({server})    Number  bring Vim server to the foreground
+remote_peek({serverid} [, {retvar}])
+                               Number  check for reply string
+remote_read({serverid} [, {timeout}])
+                               String  read reply string
+remote_send({server}, {string} [, {idvar}])
+                               String  send key sequence
+remote_startserver({name})     none    become server {name}
+remove({list}, {idx} [, {end}])        any/List
+                                       remove items {idx}-{end} from {list}
+remove({blob}, {idx} [, {end}])        Number/Blob
+                                       remove bytes {idx}-{end} from {blob}
+remove({dict}, {key})          any     remove entry {key} from {dict}
+rename({from}, {to})           Number  rename (move) file from {from} to {to}
+repeat({expr}, {count})                String  repeat {expr} {count} times
+resolve({filename})            String  get filename a shortcut points to
+reverse({list})                        List    reverse {list} in-place
+round({expr})                  Float   round off {expr}
+rubyeval({expr})               any     evaluate |Ruby| expression
+screenattr({row}, {col})       Number  attribute at screen position
+screenchar({row}, {col})       Number  character at screen position
+screenchars({row}, {col})      List    List of characters at screen position
+screencol()                    Number  current cursor column
+screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character
+screenrow()                    Number  current cursor row
+screenstring({row}, {col})     String  characters at screen position
+search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
+                               Number  search for {pattern}
+searchcount([{options}])       Dict    get or update search stats
+searchdecl({name} [, {global} [, {thisblock}]])
+                               Number  search for variable declaration
+searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+                               Number  search for other end of start/end pair
+searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+                               List    search for other end of start/end pair
+searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
+                               List    search for {pattern}
+server2client({clientid}, {string})
+                               Number  send reply string
+serverlist()                   String  get a list of available servers
+setbufline({expr}, {lnum}, {text})
+                               Number  set line {lnum} to {text} in buffer
+                                       {expr}
+setbufvar({buf}, {varname}, {val})
+                               none    set {varname} in buffer {buf} to {val}
+setcellwidths({list})          none    set character cell width overrides
+setcharpos({expr}, {list})     Number  set the {expr} position to {list}
+setcharsearch({dict})          Dict    set character search from {dict}
+setcmdpos({pos})               Number  set cursor position in command-line
+setcursorcharpos({list})       Number  move cursor to position in {list}
+setenv({name}, {val})          none    set environment variable
+setfperm({fname}, {mode})      Number  set {fname} file permissions to {mode}
+setline({lnum}, {line})                Number  set line {lnum} to {line}
+setloclist({nr}, {list} [, {action}])
+                               Number  modify location list using {list}
+setloclist({nr}, {list}, {action}, {what})
+                               Number  modify specific location list props
+setmatches({list} [, {win}])   Number  restore a list of matches
+setpos({expr}, {list})         Number  set the {expr} position to {list}
+setqflist({list} [, {action}]) Number  modify quickfix list using {list}
+setqflist({list}, {action}, {what})
+                               Number  modify specific quickfix list props
+setreg({n}, {v} [, {opt}])     Number  set register to value and type
+settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
+settabwinvar({tabnr}, {winnr}, {varname}, {val})
+                               none    set {varname} in window {winnr} in tab
+                                       page {tabnr} to {val}
+settagstack({nr}, {dict} [, {action}])
+                               Number  modify tag stack using {dict}
+setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val}
+sha256({string})               String  SHA256 checksum of {string}
+shellescape({string} [, {special}])
+                               String  escape {string} for use as shell
+                                       command argument
+shiftwidth([{col}])            Number  effective value of 'shiftwidth'
+sign_define({name} [, {dict}]) Number  define or update a sign
+sign_define({list})            List    define or update a list of signs
+sign_getdefined([{name}])      List    get a list of defined signs
+sign_getplaced([{buf} [, {dict}]])
+                               List    get a list of placed signs
+sign_jump({id}, {group}, {buf})
+                               Number  jump to a sign
+sign_place({id}, {group}, {name}, {buf} [, {dict}])
+                               Number  place a sign
+sign_placelist({list})         List    place a list of signs
+sign_undefine([{name}])                Number  undefine a sign
+sign_undefine({list})          List    undefine a list of signs
+sign_unplace({group} [, {dict}])
+                               Number  unplace a sign
+sign_unplacelist({list})       List    unplace a list of signs
+simplify({filename})           String  simplify filename as much as possible
+sin({expr})                    Float   sine of {expr}
+sinh({expr})                   Float   hyperbolic sine of {expr}
+slice({expr}, {start} [, {end}])  String, List or Blob
+                                       slice of a String, List or Blob
+sort({list} [, {func} [, {dict}]])
+                               List    sort {list}, using {func} to compare
+sound_clear()                  none    stop playing all sounds
+sound_playevent({name} [, {callback}])
+                               Number  play an event sound
+sound_playfile({path} [, {callback}])
+                               Number  play sound file {path}
+sound_stop({id})               none    stop playing sound {id}
+soundfold({word})              String  sound-fold {word}
+spellbadword()                 String  badly spelled word at cursor
+spellsuggest({word} [, {max} [, {capital}]])
+                               List    spelling suggestions
+split({expr} [, {pat} [, {keepempty}]])
+                               List    make |List| from {pat} separated {expr}
+sqrt({expr})                   Float   square root of {expr}
+srand([{expr}])                        List    get seed for |rand()|
+state([{what}])                        String  current state of Vim
+str2float({expr} [, {quoted}]) Float   convert String to Float
+str2list({expr} [, {utf8}])    List    convert each character of {expr} to
+                                       ASCII/UTF-8 value
+str2nr({expr} [, {base} [, {quoted}]])
+                               Number  convert String to Number
+strcharlen({expr})             Number  character length of the String {expr}
+strcharpart({str}, {start} [, {len} [, {skipcc}]])
+                               String  {len} characters of {str} at
+                                       character {start}
+strchars({expr} [, {skipcc}])  Number  character count of the String {expr}
+strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
+strftime({format} [, {time}])  String  format time with a specified format
+strgetchar({str}, {index})     Number  get char {index} from {str}
+stridx({haystack}, {needle} [, {start}])
+                               Number  index of {needle} in {haystack}
+string({expr})                 String  String representation of {expr} value
+strlen({expr})                 Number  length of the String {expr}
+strpart({str}, {start} [, {len} [, {chars}]])
+                               String  {len} bytes/chars of {str} at
+                                       byte {start}
+strptime({format}, {timestring})
+                               Number  Convert {timestring} to unix timestamp
+strridx({haystack}, {needle} [, {start}])
+                               Number  last index of {needle} in {haystack}
+strtrans({expr})               String  translate string to make it printable
+strwidth({expr})               Number  display cell length of the String {expr}
+submatch({nr} [, {list}])      String or List
+                                       specific match in ":s" or substitute()
+substitute({expr}, {pat}, {sub}, {flags})
+                               String  all {pat} in {expr} replaced with {sub}
+swapinfo({fname})              Dict    information about swap file {fname}
+swapname({buf})                        String  swap file of buffer {buf}
+synID({lnum}, {col}, {trans})  Number  syntax ID at {lnum} and {col}
+synIDattr({synID}, {what} [, {mode}])
+                               String  attribute {what} of syntax ID {synID}
+synIDtrans({synID})            Number  translated syntax ID of {synID}
+synconcealed({lnum}, {col})    List    info about concealing
+synstack({lnum}, {col})                List    stack of syntax IDs at {lnum} and {col}
+system({expr} [, {input}])     String  output of shell command/filter {expr}
+systemlist({expr} [, {input}]) List    output of shell command/filter {expr}
+tabpagebuflist([{arg}])                List    list of buffer numbers in tab page
+tabpagenr([{arg}])             Number  number of current or last tab page
+tabpagewinnr({tabarg} [, {arg}]) Number        number of current window in tab page
+tagfiles()                     List    tags files used
+taglist({expr} [, {filename}]) List    list of tags matching {expr}
+tan({expr})                    Float   tangent of {expr}
+tanh({expr})                   Float   hyperbolic tangent of {expr}
+tempname()                     String  name for a temporary file
+term_dumpdiff({filename}, {filename} [, {options}])
+                               Number  display difference between two dumps
+term_dumpload({filename} [, {options}])
+                               Number  displaying a screen dump
+term_dumpwrite({buf}, {filename} [, {options}])
+                               none    dump terminal window contents
+term_getaltscreen({buf})       Number  get the alternate screen flag
+term_getansicolors({buf})      List    get ANSI palette in GUI color mode
+term_getattr({attr}, {what})   Number  get the value of attribute {what}
+term_getcursor({buf})          List    get the cursor position of a terminal
+term_getjob({buf})             Job     get the job associated with a terminal
+term_getline({buf}, {row})     String  get a line of text from a terminal
+term_getscrolled({buf})                Number  get the scroll count of a terminal
+term_getsize({buf})            List    get the size of a terminal
+term_getstatus({buf})          String  get the status of a terminal
+term_gettitle({buf})           String  get the title of a terminal
+term_gettty({buf}, [{input}])  String  get the tty name of a terminal
+term_list()                    List    get the list of terminal buffers
+term_scrape({buf}, {row})      List    get row of a terminal screen
+term_sendkeys({buf}, {keys})   none    send keystrokes to a terminal
+term_setansicolors({buf}, {colors})
+                               none    set ANSI palette in GUI color mode
+term_setapi({buf}, {expr})     none    set |terminal-api| function name prefix
+term_setkill({buf}, {how})     none    set signal to stop job in terminal
+term_setrestore({buf}, {command}) none set command to restore terminal
+term_setsize({buf}, {rows}, {cols})
+                               none    set the size of a terminal
+term_start({cmd} [, {options}])        Number  open a terminal window and run a job
+term_wait({buf} [, {time}])    Number  wait for screen to be updated
+terminalprops()                        Dict    properties of the terminal
+test_alloc_fail({id}, {countdown}, {repeat})
+                               none    make memory allocation fail
+test_autochdir()               none    enable 'autochdir' during startup
+test_feedinput({string})       none    add key sequence to input buffer
+test_garbagecollect_now()      none    free memory right now for testing
+test_garbagecollect_soon()     none    free memory soon for testing
+test_getvalue({string})                any     get value of an internal variable
+test_gui_drop_files({list}, {row}, {col}, {mods})
+                               none    drop a list of files in a window
+test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
+                               none    add a mouse event to the input buffer
+test_ignore_error({expr})      none    ignore a specific error
+test_null_blob()               Blob    null value for testing
+test_null_channel()            Channel null value for testing
+test_null_dict()               Dict    null value for testing
+test_null_function()           Funcref null value for testing
+test_null_job()                        Job     null value for testing
+test_null_list()               List    null value for testing
+test_null_partial()            Funcref null value for testing
+test_null_string()             String  null value for testing
+test_option_not_set({name})    none    reset flag indicating option was set
+test_override({expr}, {val})   none    test with Vim internal overrides
+test_refcount({expr})          Number  get the reference count of {expr}
+test_scrollbar({which}, {value}, {dragging})
+                               none    scroll in the GUI for testing
+test_setmouse({row}, {col})    none    set the mouse position for testing
+test_settime({expr})           none    set current time for testing
+test_srand_seed([seed])                none    set seed for testing srand()
+test_unknown()                 any     unknown value for testing
+test_void()                    any     void value for testing
+timer_info([{id}])             List    information about timers
+timer_pause({id}, {pause})     none    pause or unpause a timer
+timer_start({time}, {callback} [, {options}])
+                               Number  create a timer
+timer_stop({timer})            none    stop a timer
+timer_stopall()                        none    stop all timers
+tolower({expr})                        String  the String {expr} switched to lowercase
+toupper({expr})                        String  the String {expr} switched to uppercase
+tr({src}, {fromstr}, {tostr})  String  translate chars of {src} in {fromstr}
+                                       to chars in {tostr}
+trim({text} [, {mask} [, {dir}]])
+                               String  trim characters in {mask} from {text}
+trunc({expr})                  Float   truncate Float {expr}
+type({expr})                   Number  type of value {expr}
+typename({expr})               String  representation of the type of {expr}
+undofile({name})               String  undo file name for {name}
+undotree()                     List    undo file tree
+uniq({list} [, {func} [, {dict}]])
+                               List    remove adjacent duplicates from a list
+values({dict})                 List    values in {dict}
+virtcol({expr})                        Number  screen column of cursor or mark
+visualmode([expr])             String  last visual mode used
+wildmenumode()                 Number  whether 'wildmenu' mode is active
+win_execute({id}, {command} [, {silent}])
+                               String  execute {command} in window {id}
+win_findbuf({bufnr})           List    find windows containing {bufnr}
+win_getid([{win} [, {tab}]])   Number  get window ID for {win} in {tab}
+win_gettype([{nr}])            String  type of window {nr}
+win_gotoid({expr})             Number  go to window with ID {expr}
+win_id2tabwin({expr})          List    get tab and window nr from window ID
+win_id2win({expr})             Number  get window nr from window ID
+win_screenpos({nr})            List    get screen position of window {nr}
+win_splitmove({nr}, {target} [, {options}])
+                               Number  move window {nr} to split of {target}
+winbufnr({nr})                 Number  buffer number of window {nr}
+wincol()                       Number  window column of the cursor
+windowsversion()               String  MS-Windows OS version
+winheight({nr})                        Number  height of window {nr}
+winlayout([{tabnr}])           List    layout of windows in tab {tabnr}
+winline()                      Number  window line of the cursor
+winnr([{expr}])                        Number  number of current window
+winrestcmd()                   String  returns command to restore window sizes
+winrestview({dict})            none    restore view of current window
+winsaveview()                  Dict    save view of current window
+winwidth({nr})                 Number  width of window {nr}
+wordcount()                    Dict    get byte/char/word statistics
+writefile({object}, {fname} [, {flags}])
+                               Number  write |Blob| or |List| of lines to file
+xor({expr}, {expr})            Number  bitwise XOR
+
+==============================================================================
+2. Details                                     *builtin-function-details*
+
+Not all functions are here, some have been moved to a help file covering the
+specific functionality.
+
+abs({expr})                                                    *abs()*
+               Return the absolute value of {expr}.  When {expr} evaluates to
+               a |Float| abs() returns a |Float|.  When {expr} can be
+               converted to a |Number| abs() returns a |Number|.  Otherwise
+               abs() gives an error message and returns -1.
+               Examples: >
+                       echo abs(1.456)
+<                      1.456  >
+                       echo abs(-5.456)
+<                      5.456  >
+                       echo abs(-4)
+<                      4
+
+               Can also be used as a |method|: >
+                       Compute()->abs()
+
+<              {only available when compiled with the |+float| feature}
+
+
+acos({expr})                                                   *acos()*
+               Return the arc cosine of {expr} measured in radians, as a
+               |Float| in the range of [0, pi].
+               {expr} must evaluate to a |Float| or a |Number| in the range
+               [-1, 1].
+               Examples: >
+                       :echo acos(0)
+<                      1.570796 >
+                       :echo acos(-0.5)
+<                      2.094395
+
+               Can also be used as a |method|: >
+                       Compute()->acos()
+
+<              {only available when compiled with the |+float| feature}
+
+
+add({object}, {expr})                                  *add()*
+               Append the item {expr} to |List| or |Blob| {object}.  Returns
+               the resulting |List| or |Blob|.  Examples: >
+                       :let alist = add([1, 2, 3], item)
+                       :call add(mylist, "woodstock")
+<              Note that when {expr} is a |List| it is appended as a single
+               item.  Use |extend()| to concatenate |Lists|.
+               When {object} is a |Blob| then  {expr} must be a number.
+               Use |insert()| to add an item at another position.
+
+               Can also be used as a |method|: >
+                       mylist->add(val1)->add(val2)
+
+
+and({expr}, {expr})                                    *and()*
+               Bitwise AND on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let flag = and(bits, 0x80)
+<              Can also be used as a |method|: >
+                       :let flag = bits->and(0x80)
+
+
+append({lnum}, {text})                                 *append()*
+               When {text} is a |List|: Append each item of the |List| as a
+               text line below line {lnum} in the current buffer.
+               Otherwise append {text} as one text line below line {lnum} in
+               the current buffer.
+               Any type of item is accepted and converted to a String.
+               {lnum} can be zero to insert a line before the first one.
+               {lnum} is used like with |getline()|.
+               Returns 1 for failure ({lnum} out of range or out of memory),
+               0 for success.  In |Vim9| script an invalid argument or
+               negative number results in an error.  Example: >
+                       :let failed = append(line('$'), "# THE END")
+                       :let failed = append(0, ["Chapter 1", "the beginning"])
+
+<              Can also be used as a |method| after a List, the base is
+               passed as the second argument: >
+                       mylist->append(lnum)
+
+
+appendbufline({buf}, {lnum}, {text})                   *appendbufline()*
+               Like |append()| but append the text in buffer {buf}.
+
+               This function works only for loaded buffers. First call
+               |bufload()| if needed.
+
+               For the use of {buf}, see |bufname()|.
+
+               {lnum} is used like with |append()|.  Note that using |line()|
+               would use the current buffer, not the one appending to.
+               Use "$" to append at the end of the buffer.
+
+               On success 0 is returned, on failure 1 is returned.
+               In |Vim9| script an error is given for an invalid {lnum}.
+
+               If {buf} is not a valid buffer or {lnum} is not valid, an
+               error message is given. Example: >
+                       :let failed = appendbufline(13, 0, "# THE START")
+<
+               Can also be used as a |method| after a List, the base is
+               passed as the second argument: >
+                       mylist->appendbufline(buf, lnum)
+
+
+argc([{winid}])                                        *argc()*
+               The result is the number of files in the argument list.  See
+               |arglist|.
+               If {winid} is not supplied, the argument list of the current
+               window is used.
+               If {winid} is -1, the global argument list is used.
+               Otherwise {winid} specifies the window of which the argument
+               list is used: either the window number or the window ID.
+               Returns -1 if the {winid} argument is invalid.
+
+                                                       *argidx()*
+argidx()       The result is the current index in the argument list.  0 is
+               the first file.  argc() - 1 is the last one.  See |arglist|.
+
+                                                       *arglistid()*
+arglistid([{winnr} [, {tabnr}]])
+               Return the argument list ID.  This is a number which
+               identifies the argument list being used.  Zero is used for the
+               global argument list.  See |arglist|.
+               Returns -1 if the arguments are invalid.
+
+               Without arguments use the current window.
+               With {winnr} only use this window in the current tab page.
+               With {winnr} and {tabnr} use the window in the specified tab
+               page.
+               {winnr} can be the window number or the |window-ID|.
+
+                                                       *argv()*
+argv([{nr} [, {winid}]])
+               The result is the {nr}th file in the argument list.  See
+               |arglist|.  "argv(0)" is the first one.  Example: >
+       :let i = 0
+       :while i < argc()
+       :  let f = escape(fnameescape(argv(i)), '.')
+       :  exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
+       :  let i = i + 1
+       :endwhile
+<              Without the {nr} argument, or when {nr} is -1, a |List| with
+               the whole |arglist| is returned.
+
+               The {winid} argument specifies the window ID, see |argc()|.
+               For the Vim command line arguments see |v:argv|.
+
+asin({expr})                                           *asin()*
+               Return the arc sine of {expr} measured in radians, as a |Float|
+               in the range of [-pi/2, pi/2].
+               {expr} must evaluate to a |Float| or a |Number| in the range
+               [-1, 1].
+               Examples: >
+                       :echo asin(0.8)
+<                      0.927295 >
+                       :echo asin(-0.5)
+<                      -0.523599
+
+               Can also be used as a |method|: >
+                       Compute()->asin()
+<
+               {only available when compiled with the |+float| feature}
+
+
+assert_ functions are documented here: |assert-functions-details|
+
+
+
+atan({expr})                                           *atan()*
+               Return the principal value of the arc tangent of {expr}, in
+               the range [-pi/2, +pi/2] radians, as a |Float|.
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo atan(100)
+<                      1.560797 >
+                       :echo atan(-4.01)
+<                      -1.326405
+
+               Can also be used as a |method|: >
+                       Compute()->atan()
+<
+               {only available when compiled with the |+float| feature}
+
+
+atan2({expr1}, {expr2})                                        *atan2()*
+               Return the arc tangent of {expr1} / {expr2}, measured in
+               radians, as a |Float| in the range [-pi, pi].
+               {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo atan2(-1, 1)
+<                      -0.785398 >
+                       :echo atan2(1, -1)
+<                      2.356194
+
+               Can also be used as a |method|: >
+                       Compute()->atan2(1)
+<
+               {only available when compiled with the |+float| feature}
+
+balloon_gettext()                                      *balloon_gettext()*
+               Return the current text in the balloon.  Only for the string,
+               not used for the List.
+
+balloon_show({expr})                                   *balloon_show()*
+               Show {expr} inside the balloon.  For the GUI {expr} is used as
+               a string.  For a terminal {expr} can be a list, which contains
+               the lines of the balloon.  If {expr} is not a list it will be
+               split with |balloon_split()|.
+               If {expr} is an empty string any existing balloon is removed.
+
+               Example: >
+                       func GetBalloonContent()
+                          " ... initiate getting the content
+                          return ''
+                       endfunc
+                       set balloonexpr=GetBalloonContent()
+
+                       func BalloonCallback(result)
+                         call balloon_show(a:result)
+                       endfunc
+<              Can also be used as a |method|: >
+                       GetText()->balloon_show()
+<
+               The intended use is that fetching the content of the balloon
+               is initiated from 'balloonexpr'.  It will invoke an
+               asynchronous method, in which a callback invokes
+               balloon_show().  The 'balloonexpr' itself can return an
+               empty string or a placeholder.
+
+               When showing a balloon is not possible nothing happens, no
+               error message.
+               {only available when compiled with the |+balloon_eval| or
+               |+balloon_eval_term| feature}
+
+balloon_split({msg})                                   *balloon_split()*
+               Split String {msg} into lines to be displayed in a balloon.
+               The splits are made for the current window size and optimize
+               to show debugger output.
+               Returns a |List| with the split lines.
+               Can also be used as a |method|: >
+                       GetText()->balloon_split()->balloon_show()
+
+<              {only available when compiled with the |+balloon_eval_term|
+               feature}
+
+blob2list({blob})                                      *blob2list()*
+               Return a List containing the number value of each byte in Blob
+               {blob}.  Examples: >
+                       blob2list(0z0102.0304)  returns [1, 2, 3, 4]
+                       blob2list(0z)           returns []
+<              Returns an empty List on error.  |list2blob()| does the
+               opposite.
+
+               Can also be used as a |method|: >
+                       GetBlob()->blob2list()
+
+                                                       *browse()*
+browse({save}, {title}, {initdir}, {default})
+               Put up a file requester.  This only works when "has("browse")"
+               returns |TRUE| (only in some GUI versions).
+               The input fields are:
+                   {save}      when |TRUE|, select file to write
+                   {title}     title for the requester
+                   {initdir}   directory to start browsing in
+                   {default}   default file name
+               An empty string is returned when the "Cancel" button is hit,
+               something went wrong, or browsing is not possible.
+
+                                                       *browsedir()*
+browsedir({title}, {initdir})
+               Put up a directory requester.  This only works when
+               "has("browse")" returns |TRUE| (only in some GUI versions).
+               On systems where a directory browser is not supported a file
+               browser is used.  In that case: select a file in the directory
+               to be used.
+               The input fields are:
+                   {title}     title for the requester
+                   {initdir}   directory to start browsing in
+               When the "Cancel" button is hit, something went wrong, or
+               browsing is not possible, an empty string is returned.
+
+bufadd({name})                                         *bufadd()*
+               Add a buffer to the buffer list with String {name}.
+               If a buffer for file {name} already exists, return that buffer
+               number.  Otherwise return the buffer number of the newly
+               created buffer.  When {name} is an empty string then a new
+               buffer is always created.
+               The buffer will not have 'buflisted' set and not be loaded
+               yet.  To add some text to the buffer use this: >
+                       let bufnr = bufadd('someName')
+                       call bufload(bufnr)
+                       call setbufline(bufnr, 1, ['some', 'text'])
+<              Can also be used as a |method|: >
+                       let bufnr = 'somename'->bufadd()
+
+bufexists({buf})                                       *bufexists()*
+               The result is a Number, which is |TRUE| if a buffer called
+               {buf} exists.
+               If the {buf} argument is a number, buffer numbers are used.
+               Number zero is the alternate buffer for the current window.
+
+               If the {buf} argument is a string it must match a buffer name
+               exactly.  The name can be:
+               - Relative to the current directory.
+               - A full path.
+               - The name of a buffer with 'buftype' set to "nofile".
+               - A URL name.
+               Unlisted buffers will be found.
+               Note that help files are listed by their short name in the
+               output of |:buffers|, but bufexists() requires using their
+               long name to be able to find them.
+               bufexists() may report a buffer exists, but to use the name
+               with a |:buffer| command you may need to use |expand()|.  Esp
+               for MS-Windows 8.3 names in the form "c:\DOCUME~1"
+               Use "bufexists(0)" to test for the existence of an alternate
+               file name.
+
+               Can also be used as a |method|: >
+                       let exists = 'somename'->bufexists()
+<
+               Obsolete name: buffer_exists().         *buffer_exists()*
+
+buflisted({buf})                                       *buflisted()*
+               The result is a Number, which is |TRUE| if a buffer called
+               {buf} exists and is listed (has the 'buflisted' option set).
+               The {buf} argument is used like with |bufexists()|.
+
+               Can also be used as a |method|: >
+                       let listed = 'somename'->buflisted()
+
+bufload({buf})                                         *bufload()*
+               Ensure the buffer {buf} is loaded.  When the buffer name
+               refers to an existing file then the file is read.  Otherwise
+               the buffer will be empty.  If the buffer was already loaded
+               then there is no change.
+               If there is an existing swap file for the file of the buffer,
+               there will be no dialog, the buffer will be loaded anyway.
+               The {buf} argument is used like with |bufexists()|.
+
+               Can also be used as a |method|: >
+                       eval 'somename'->bufload()
+
+bufloaded({buf})                                       *bufloaded()*
+               The result is a Number, which is |TRUE| if a buffer called
+               {buf} exists and is loaded (shown in a window or hidden).
+               The {buf} argument is used like with |bufexists()|.
+
+               Can also be used as a |method|: >
+                       let loaded = 'somename'->bufloaded()
+
+bufname([{buf}])                                       *bufname()*
+               The result is the name of a buffer.  Mostly as it is displayed
+               by the `:ls` command, but not using special names such as
+               "[No Name]".
+               If {buf} is omitted the current buffer is used.
+               If {buf} is a Number, that buffer number's name is given.
+               Number zero is the alternate buffer for the current window.
+               If {buf} is a String, it is used as a |file-pattern| to match
+               with the buffer names.  This is always done like 'magic' is
+               set and 'cpoptions' is empty.  When there is more than one
+               match an empty string is returned.
+               "" or "%" can be used for the current buffer, "#" for the
+               alternate buffer.
+               A full match is preferred, otherwise a match at the start, end
+               or middle of the buffer name is accepted.  If you only want a
+               full match then put "^" at the start and "$" at the end of the
+               pattern.
+               Listed buffers are found first.  If there is a single match
+               with a listed buffer, that one is returned.  Next unlisted
+               buffers are searched for.
+               If the {buf} is a String, but you want to use it as a buffer
+               number, force it to be a Number by adding zero to it: >
+                       :echo bufname("3" + 0)
+<              Can also be used as a |method|: >
+                       echo bufnr->bufname()
+
+<              If the buffer doesn't exist, or doesn't have a name, an empty
+               string is returned. >
+       bufname("#")            alternate buffer name
+       bufname(3)              name of buffer 3
+       bufname("%")            name of current buffer
+       bufname("file2")        name of buffer where "file2" matches.
+<                                                      *buffer_name()*
+               Obsolete name: buffer_name().
+
+                                                       *bufnr()*
+bufnr([{buf} [, {create}]])
+               The result is the number of a buffer, as it is displayed by
+               the `:ls` command.  For the use of {buf}, see |bufname()|
+               above.
+
+               If the buffer doesn't exist, -1 is returned.  Or, if the
+               {create} argument is present and TRUE, a new, unlisted,
+               buffer is created and its number is returned.  Example: >
+                       let newbuf = bufnr('Scratch001', 1)
+<              Using an empty name uses the current buffer. To create a new
+               buffer with an empty name use |bufadd()|.
+
+               bufnr("$") is the last buffer: >
+                       :let last_buffer = bufnr("$")
+<              The result is a Number, which is the highest buffer number
+               of existing buffers.  Note that not all buffers with a smaller
+               number necessarily exist, because ":bwipeout" may have removed
+               them.  Use bufexists() to test for the existence of a buffer.
+
+               Can also be used as a |method|: >
+                       echo bufref->bufnr()
+<
+               Obsolete name: buffer_number().         *buffer_number()*
+                                                       *last_buffer_nr()*
+               Obsolete name for bufnr("$"): last_buffer_nr().
+
+bufwinid({buf})                                                *bufwinid()*
+               The result is a Number, which is the |window-ID| of the first
+               window associated with buffer {buf}.  For the use of {buf},
+               see |bufname()| above.  If buffer {buf} doesn't exist or
+               there is no such window, -1 is returned.  Example: >
+
+       echo "A window containing buffer 1 is " . (bufwinid(1))
+<
+               Only deals with the current tab page.
+
+               Can also be used as a |method|: >
+                       FindBuffer()->bufwinid()
+
+bufwinnr({buf})                                                *bufwinnr()*
+               Like |bufwinid()| but return the window number instead of the
+               |window-ID|.
+               If buffer {buf} doesn't exist or there is no such window, -1
+               is returned.  Example: >
+
+       echo "A window containing buffer 1 is " . (bufwinnr(1))
+
+<              The number can be used with |CTRL-W_w| and ":wincmd w"
+               |:wincmd|.
+
+               Can also be used as a |method|: >
+                       FindBuffer()->bufwinnr()
+
+byte2line({byte})                                      *byte2line()*
+               Return the line number that contains the character at byte
+               count {byte} in the current buffer.  This includes the
+               end-of-line character, depending on the 'fileformat' option
+               for the current buffer.  The first character has byte count
+               one.
+               Also see |line2byte()|, |go| and |:goto|.
+
+               Can also be used as a |method|: >
+                       GetOffset()->byte2line()
+
+<              {not available when compiled without the |+byte_offset|
+               feature}
+
+byteidx({expr}, {nr})                                  *byteidx()*
+               Return byte index of the {nr}'th character in the String
+               {expr}.  Use zero for the first character, it then returns
+               zero.
+               If there are no multibyte characters the returned value is
+               equal to {nr}.
+               Composing characters are not counted separately, their byte
+               length is added to the preceding base character.  See
+               |byteidxcomp()| below for counting composing characters
+               separately.
+               Example : >
+                       echo matchstr(str, ".", byteidx(str, 3))
+<              will display the fourth character.  Another way to do the
+               same: >
+                       let s = strpart(str, byteidx(str, 3))
+                       echo strpart(s, 0, byteidx(s, 1))
+<              Also see |strgetchar()| and |strcharpart()|.
+
+               If there are less than {nr} characters -1 is returned.
+               If there are exactly {nr} characters the length of the string
+               in bytes is returned.
+
+               Can also be used as a |method|: >
+                       GetName()->byteidx(idx)
+
+byteidxcomp({expr}, {nr})                                      *byteidxcomp()*
+               Like byteidx(), except that a composing character is counted
+               as a separate character.  Example: >
+                       let s = 'e' . nr2char(0x301)
+                       echo byteidx(s, 1)
+                       echo byteidxcomp(s, 1)
+                       echo byteidxcomp(s, 2)
+<              The first and third echo result in 3 ('e' plus composing
+               character is 3 bytes), the second echo results in 1 ('e' is
+               one byte).
+               Only works differently from byteidx() when 'encoding' is set
+               to a Unicode encoding.
+
+               Can also be used as a |method|: >
+                       GetName()->byteidxcomp(idx)
+
+call({func}, {arglist} [, {dict}])                     *call()* *E699*
+               Call function {func} with the items in |List| {arglist} as
+               arguments.
+               {func} can either be a |Funcref| or the name of a function.
+               a:firstline and a:lastline are set to the cursor line.
+               Returns the return value of the called function.
+               {dict} is for functions with the "dict" attribute.  It will be
+               used to set the local variable "self". |Dictionary-function|
+
+               Can also be used as a |method|: >
+                       GetFunc()->call([arg, arg], dict)
+
+ceil({expr})                                                   *ceil()*
+               Return the smallest integral value greater than or equal to
+               {expr} as a |Float| (round up).
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       echo ceil(1.456)
+<                      2.0  >
+                       echo ceil(-5.456)
+<                      -5.0  >
+                       echo ceil(4.0)
+<                      4.0
+
+               Can also be used as a |method|: >
+                       Compute()->ceil()
+<
+               {only available when compiled with the |+float| feature}
+
+
+ch_ functions are documented here: |channel-functions-details|
+
+
+changenr()                                             *changenr()*
+               Return the number of the most recent change.  This is the same
+               number as what is displayed with |:undolist| and can be used
+               with the |:undo| command.
+               When a change was made it is the number of that change.  After
+               redo it is the number of the redone change.  After undo it is
+               one less than the number of the undone change.
+
+char2nr({string} [, {utf8}])                                   *char2nr()*
+               Return number value of the first char in {string}.
+               Examples: >
+                       char2nr(" ")            returns 32
+                       char2nr("ABC")          returns 65
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
+                       char2nr("á")           returns 225
+                       char2nr("á"[0])                returns 195
+<              When {utf8} is TRUE, always treat as UTF-8 characters.
+               A combining character is a separate character.
+               |nr2char()| does the opposite.
+               To turn a string into a list of character numbers: >
+                   let str = "ABC"
+                   let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
+<              Result: [65, 66, 67]
+
+               Can also be used as a |method|: >
+                       GetChar()->char2nr()
+
+
+charclass({string})                                    *charclass()*
+               Return the character class of the first character in {string}.
+               The character class is one of:
+                       0       blank
+                       1       punctuation
+                       2       word character
+                       3       emoji
+                       other   specific Unicode class
+               The class is used in patterns and word motions.
+
+
+charcol({expr})                                                *charcol()*
+               Same as |col()| but returns the character index of the column
+               position given with {expr} instead of the byte position.
+
+               Example:
+               With the cursor on '세' in line 5 with text "여보세요": >
+                       charcol('.')            returns 3
+                       col('.')                returns 7
+
+<              Can also be used as a |method|: >
+                       GetPos()->col()
+<
+                                                       *charidx()*
+charidx({string}, {idx} [, {countcc}])
+               Return the character index of the byte at {idx} in {string}.
+               The index of the first character is zero.
+               If there are no multibyte characters the returned value is
+               equal to {idx}.
+               When {countcc} is omitted or |FALSE|, then composing characters
+               are not counted separately, their byte length is
+               added to the preceding base character.
+               When {countcc} is |TRUE|, then composing characters are
+               counted as separate characters.
+               Returns -1 if the arguments are invalid or if {idx} is greater
+               than the index of the last byte in {string}.  An error is
+               given if the first argument is not a string, the second
+               argument is not a number or when the third argument is present
+               and is not zero or one.
+               See |byteidx()| and |byteidxcomp()| for getting the byte index
+               from the character index.
+               Examples: >
+                       echo charidx('áb́ć', 3)            returns 1
+                       echo charidx('áb́ć', 6, 1) returns 4
+                       echo charidx('áb́ć', 16)           returns -1
+<
+               Can also be used as a |method|: >
+                       GetName()->charidx(idx)
+
+chdir({dir})                                           *chdir()*
+               Change the current working directory to {dir}.  The scope of
+               the directory change depends on the directory of the current
+               window:
+                       - If the current window has a window-local directory
+                         (|:lcd|), then changes the window local directory.
+                       - Otherwise, if the current tabpage has a local
+                         directory (|:tcd|) then changes the tabpage local
+                         directory.
+                       - Otherwise, changes the global directory.
+               {dir} must be a String.
+               If successful, returns the previous working directory.  Pass
+               this to another chdir() to restore the directory.
+               On failure, returns an empty string.
+
+               Example: >
+                       let save_dir = chdir(newdir)
+                       if save_dir != ""
+                          " ... do some work
+                          call chdir(save_dir)
+                       endif
+
+<              Can also be used as a |method|: >
+                       GetDir()->chdir()
+<
+cindent({lnum})                                                *cindent()*
+               Get the amount of indent for line {lnum} according the C
+               indenting rules, as with 'cindent'.
+               The indent is counted in spaces, the value of 'tabstop' is
+               relevant.  {lnum} is used just like in |getline()|.
+               When {lnum} is invalid or Vim was not compiled the |+cindent|
+               feature, -1 is returned.
+               See |C-indenting|.
+
+               Can also be used as a |method|: >
+                       GetLnum()->cindent()
+
+clearmatches([{win}])                                  *clearmatches()*
+               Clears all matches previously defined for the current window
+               by |matchadd()| and the |:match| commands.
+               If {win} is specified, use the window with this number or
+               window ID instead of the current window.
+
+               Can also be used as a |method|: >
+                       GetWin()->clearmatches()
+<
+                                                       *col()*
+col({expr})    The result is a Number, which is the byte index of the column
+               position given with {expr}.  The accepted positions are:
+                   .       the cursor position
+                   $       the end of the cursor line (the result is the
+                           number of bytes in the cursor line plus one)
+                   'x      position of mark x (if the mark is not set, 0 is
+                           returned)
+                   v       In Visual mode: the start of the Visual area (the
+                           cursor is the end).  When not in Visual mode
+                           returns the cursor position.  Differs from |'<| in
+                           that it's updated right away.
+               Additionally {expr} can be [lnum, col]: a |List| with the line
+               and column number. Most useful when the column is "$", to get
+               the last column of a specific line.  When "lnum" or "col" is
+               out of range then col() returns zero.
+               To get the line number use |line()|.  To get both use
+               |getpos()|.
+               For the screen column position use |virtcol()|.  For the
+               character position use |charcol()|.
+               Note that only marks in the current file can be used.
+               Examples: >
+                       col(".")                column of cursor
+                       col("$")                length of cursor line plus one
+                       col("'t")               column of mark t
+                       col("'" . markname)     column of mark markname
+<              The first column is 1.  0 is returned for an error.
+               For an uppercase mark the column may actually be in another
+               buffer.
+               For the cursor position, when 'virtualedit' is active, the
+               column is one higher if the cursor is after the end of the
+               line.  This can be used to obtain the column in Insert mode: >
+                       :imap <F2> <C-O>:let save_ve = &ve<CR>
+                               \<C-O>:set ve=all<CR>
+                               \<C-O>:echo col(".") . "\n" <Bar>
+                               \let &ve = save_ve<CR>
+
+<              Can also be used as a |method|: >
+                       GetPos()->col()
+<
+
+complete({startcol}, {matches})                        *complete()* *E785*
+               Set the matches for Insert mode completion.
+               Can only be used in Insert mode.  You need to use a mapping
+               with CTRL-R = (see |i_CTRL-R|).  It does not work after CTRL-O
+               or with an expression mapping.
+               {startcol} is the byte offset in the line where the completed
+               text start.  The text up to the cursor is the original text
+               that will be replaced by the matches.  Use col('.') for an
+               empty string.  "col('.') - 1" will replace one character by a
+               match.
+               {matches} must be a |List|.  Each |List| item is one match.
+               See |complete-items| for the kind of items that are possible.
+               "longest" in 'completeopt' is ignored.
+               Note that the after calling this function you need to avoid
+               inserting anything that would cause completion to stop.
+               The match can be selected with CTRL-N and CTRL-P as usual with
+               Insert mode completion.  The popup menu will appear if
+               specified, see |ins-completion-menu|.
+               Example: >
+       inoremap <F5> <C-R>=ListMonths()<CR>
+
+       func! ListMonths()
+         call complete(col('.'), ['January', 'February', 'March',
+               \ 'April', 'May', 'June', 'July', 'August', 'September',
+               \ 'October', 'November', 'December'])
+         return ''
+       endfunc
+<              This isn't very useful, but it shows how it works.  Note that
+               an empty string is returned to avoid a zero being inserted.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetMatches()->complete(col('.'))
+
+complete_add({expr})                           *complete_add()*
+               Add {expr} to the list of matches.  Only to be used by the
+               function specified with the 'completefunc' option.
+               Returns 0 for failure (empty string or out of memory),
+               1 when the match was added, 2 when the match was already in
+               the list.
+               See |complete-functions| for an explanation of {expr}.  It is
+               the same as one item in the list that 'omnifunc' would return.
+
+               Can also be used as a |method|: >
+                       GetMoreMatches()->complete_add()
+
+complete_check()                               *complete_check()*
+               Check for a key typed while looking for completion matches.
+               This is to be used when looking for matches takes some time.
+               Returns |TRUE| when searching for matches is to be aborted,
+               zero otherwise.
+               Only to be used by the function specified with the
+               'completefunc' option.
+
+
+complete_info([{what}])                                *complete_info()*
+               Returns a |Dictionary| with information about Insert mode
+               completion.  See |ins-completion|.
+               The items are:
+                  mode         Current completion mode name string.
+                               See |complete_info_mode| for the values.
+                  pum_visible  |TRUE| if popup menu is visible.
+                               See |pumvisible()|.
+                  items        List of completion matches.  Each item is a
+                               dictionary containing the entries "word",
+                               "abbr", "menu", "kind", "info" and "user_data".
+                               See |complete-items|.
+                  selected     Selected item index.  First index is zero.
+                               Index is -1 if no item is selected (showing
+                               typed text only, or the last completion after
+                               no item is selected when using the <Up> or
+                               <Down> keys)
+                  inserted     Inserted string. [NOT IMPLEMENT YET]
+
+                                                       *complete_info_mode*
+               mode values are:
+                  ""                Not in completion mode
+                  "keyword"         Keyword completion |i_CTRL-X_CTRL-N|
+                  "ctrl_x"          Just pressed CTRL-X |i_CTRL-X|
+                  "scroll"          Scrolling with |i_CTRL-X_CTRL-E| or
+                                    |i_CTRL-X_CTRL-Y|
+                  "whole_line"      Whole lines |i_CTRL-X_CTRL-L|
+                  "files"           File names |i_CTRL-X_CTRL-F|
+                  "tags"            Tags |i_CTRL-X_CTRL-]|
+                  "path_defines"    Definition completion |i_CTRL-X_CTRL-D|
+                  "path_patterns"   Include completion |i_CTRL-X_CTRL-I|
+                  "dictionary"      Dictionary |i_CTRL-X_CTRL-K|
+                  "thesaurus"       Thesaurus |i_CTRL-X_CTRL-T|
+                  "cmdline"         Vim Command line |i_CTRL-X_CTRL-V|
+                  "function"        User defined completion |i_CTRL-X_CTRL-U|
+                  "omni"            Omni completion |i_CTRL-X_CTRL-O|
+                  "spell"           Spelling suggestions |i_CTRL-X_s|
+                  "eval"            |complete()| completion
+                  "unknown"         Other internal modes
+
+               If the optional {what} list argument is supplied, then only
+               the items listed in {what} are returned.  Unsupported items in
+               {what} are silently ignored.
+
+               To get the position and size of the popup menu, see
+               |pum_getpos()|. It's also available in |v:event| during the
+               |CompleteChanged| event.
+
+               Examples: >
+                       " Get all items
+                       call complete_info()
+                       " Get only 'mode'
+                       call complete_info(['mode'])
+                       " Get only 'mode' and 'pum_visible'
+                       call complete_info(['mode', 'pum_visible'])
+
+<              Can also be used as a |method|: >
+                       GetItems()->complete_info()
+<
+                                               *confirm()*
+confirm({msg} [, {choices} [, {default} [, {type}]]])
+               confirm() offers the user a dialog, from which a choice can be
+               made.  It returns the number of the choice.  For the first
+               choice this is 1.
+               Note: confirm() is only supported when compiled with dialog
+               support, see |+dialog_con| and |+dialog_gui|.
+
+               {msg} is displayed in a |dialog| with {choices} as the
+               alternatives.  When {choices} is missing or empty, "&OK" is
+               used (and translated).
+               {msg} is a String, use '\n' to include a newline.  Only on
+               some systems the string is wrapped when it doesn't fit.
+
+               {choices} is a String, with the individual choices separated
+               by '\n', e.g. >
+                       confirm("Save changes?", "&Yes\n&No\n&Cancel")
+<              The letter after the '&' is the shortcut key for that choice.
+               Thus you can type 'c' to select "Cancel".  The shortcut does
+               not need to be the first letter: >
+                       confirm("file has been modified", "&Save\nSave &All")
+<              For the console, the first letter of each choice is used as
+               the default shortcut key.  Case is ignored.
+
+               The optional {default} argument is the number of the choice
+               that is made if the user hits <CR>.  Use 1 to make the first
+               choice the default one.  Use 0 to not set a default.  If
+               {default} is omitted, 1 is used.
+
+               The optional {type} String argument gives the type of dialog.
+               This is only used for the icon of the GTK, Mac, Motif and
+               Win32 GUI.  It can be one of these values: "Error",
+               "Question", "Info", "Warning" or "Generic".  Only the first
+               character is relevant.  When {type} is omitted, "Generic" is
+               used.
+
+               If the user aborts the dialog by pressing <Esc>, CTRL-C,
+               or another valid interrupt key, confirm() returns 0.
+
+               An example: >
+   :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
+   :if choice == 0
+   :   echo "make up your mind!"
+   :elseif choice == 3
+   :   echo "tasteful"
+   :else
+   :   echo "I prefer bananas myself."
+   :endif
+<              In a GUI dialog, buttons are used.  The layout of the buttons
+               depends on the 'v' flag in 'guioptions'.  If it is included,
+               the buttons are always put vertically.  Otherwise,  confirm()
+               tries to put the buttons in one horizontal line.  If they
+               don't fit, a vertical layout is used anyway.  For some systems
+               the horizontal layout is always used.
+
+               Can also be used as a |method|in: >
+                       BuildMessage()->confirm("&Yes\n&No")
+<
+                                                       *copy()*
+copy({expr})   Make a copy of {expr}.  For Numbers and Strings this isn't
+               different from using {expr} directly.
+               When {expr} is a |List| a shallow copy is created.  This means
+               that the original |List| can be changed without changing the
+               copy, and vice versa.  But the items are identical, thus
+               changing an item changes the contents of both |Lists|.
+               A |Dictionary| is copied in a similar way as a |List|.
+               Also see |deepcopy()|.
+               Can also be used as a |method|: >
+                       mylist->copy()
+
+cos({expr})                                            *cos()*
+               Return the cosine of {expr}, measured in radians, as a |Float|.
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo cos(100)
+<                      0.862319 >
+                       :echo cos(-4.01)
+<                      -0.646043
+
+               Can also be used as a |method|: >
+                       Compute()->cos()
+<
+               {only available when compiled with the |+float| feature}
+
+
+cosh({expr})                                           *cosh()*
+               Return the hyperbolic cosine of {expr} as a |Float| in the range
+               [1, inf].
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo cosh(0.5)
+<                      1.127626 >
+                       :echo cosh(-0.5)
+<                      -1.127626
+
+               Can also be used as a |method|: >
+                       Compute()->cosh()
+<
+               {only available when compiled with the |+float| feature}
+
+
+count({comp}, {expr} [, {ic} [, {start}]])                     *count()*
+               Return the number of times an item with value {expr} appears
+               in |String|, |List| or |Dictionary| {comp}.
+
+               If {start} is given then start with the item with this index.
+               {start} can only be used with a |List|.
+
+               When {ic} is given and it's |TRUE| then case is ignored.
+
+               When {comp} is a string then the number of not overlapping
+               occurrences of {expr} is returned. Zero is returned when
+               {expr} is an empty string.
+
+               Can also be used as a |method|: >
+                       mylist->count(val)
+<
+                                                       *cscope_connection()*
+cscope_connection([{num} , {dbpath} [, {prepend}]])
+               Checks for the existence of a |cscope| connection.  If no
+               parameters are specified, then the function returns:
+                       0, if cscope was not available (not compiled in), or
+                          if there are no cscope connections;
+                       1, if there is at least one cscope connection.
+
+               If parameters are specified, then the value of {num}
+               determines how existence of a cscope connection is checked:
+
+               {num}   Description of existence check
+               -----   ------------------------------
+               0       Same as no parameters (e.g., "cscope_connection()").
+               1       Ignore {prepend}, and use partial string matches for
+                       {dbpath}.
+               2       Ignore {prepend}, and use exact string matches for
+                       {dbpath}.
+               3       Use {prepend}, use partial string matches for both
+                       {dbpath} and {prepend}.
+               4       Use {prepend}, use exact string matches for both
+                       {dbpath} and {prepend}.
+
+               Note: All string comparisons are case sensitive!
+
+               Examples.  Suppose we had the following (from ":cs show"): >
+
+  # pid    database name                       prepend path
+  0 27664  cscope.out                          /usr/local
+<
+               Invocation                                      Return Val ~
+               ----------                                      ---------- >
+               cscope_connection()                                     1
+               cscope_connection(1, "out")                             1
+               cscope_connection(2, "out")                             0
+               cscope_connection(3, "out")                             0
+               cscope_connection(3, "out", "local")                    1
+               cscope_connection(4, "out")                             0
+               cscope_connection(4, "out", "local")                    0
+               cscope_connection(4, "cscope.out", "/usr/local")        1
+<
+cursor({lnum}, {col} [, {off}])                                *cursor()*
+cursor({list})
+               Positions the cursor at the column (byte count) {col} in the
+               line {lnum}.  The first column is one.
+
+               When there is one argument {list} this is used as a |List|
+               with two, three or four item:
+                       [{lnum}, {col}]
+                       [{lnum}, {col}, {off}]
+                       [{lnum}, {col}, {off}, {curswant}]
+               This is like the return value of |getpos()| or |getcurpos()|,
+               but without the first item.
+
+               To position the cursor using the character count, use
+               |setcursorcharpos()|.
+
+               Does not change the jumplist.
+               {lnum} is used like with |getline()|.
+               If {lnum} is greater than the number of lines in the buffer,
+               the cursor will be positioned at the last line in the buffer.
+               If {lnum} is zero, the cursor will stay in the current line.
+               If {col} is greater than the number of bytes in the line,
+               the cursor will be positioned at the last character in the
+               line.
+               If {col} is zero, the cursor will stay in the current column.
+               If {curswant} is given it is used to set the preferred column
+               for vertical movement.  Otherwise {col} is used.
+
+               When 'virtualedit' is used {off} specifies the offset in
+               screen columns from the start of the character.  E.g., a
+               position within a <Tab> or after the last character.
+               Returns 0 when the position could be set, -1 otherwise.
+
+               Can also be used as a |method|: >
+                       GetCursorPos()->cursor()
+
+debugbreak({pid})                                      *debugbreak()*
+               Specifically used to interrupt a program being debugged.  It
+               will cause process {pid} to get a SIGTRAP.  Behavior for other
+               processes is undefined. See |terminal-debugger|.
+               {only available on MS-Windows}
+
+               Can also be used as a |method|: >
+                       GetPid()->debugbreak()
+
+deepcopy({expr} [, {noref}])                           *deepcopy()* *E698*
+               Make a copy of {expr}.  For Numbers and Strings this isn't
+               different from using {expr} directly.
+               When {expr} is a |List| a full copy is created.  This means
+               that the original |List| can be changed without changing the
+               copy, and vice versa.  When an item is a |List| or
+               |Dictionary|, a copy for it is made, recursively.  Thus
+               changing an item in the copy does not change the contents of
+               the original |List|.
+               A |Dictionary| is copied in a similar way as a |List|.
+
+               When {noref} is omitted or zero a contained |List| or
+               |Dictionary| is only copied once.  All references point to
+               this single copy.  With {noref} set to 1 every occurrence of a
+               |List| or |Dictionary| results in a new copy.  This also means
+               that a cyclic reference causes deepcopy() to fail.
+                                                               *E724*
+               Nesting is possible up to 100 levels.  When there is an item
+               that refers back to a higher level making a deep copy with
+               {noref} set to 1 will fail.
+               Also see |copy()|.
+
+               Can also be used as a |method|: >
+                       GetObject()->deepcopy()
+
+delete({fname} [, {flags}])                            *delete()*
+               Without {flags} or with {flags} empty: Deletes the file by the
+               name {fname}.  This also works when {fname} is a symbolic link.
+
+               When {flags} is "d": Deletes the directory by the name
+               {fname}.  This fails when directory {fname} is not empty.
+
+               When {flags} is "rf": Deletes the directory by the name
+               {fname} and everything in it, recursively.  BE CAREFUL!
+               Note: on MS-Windows it is not possible to delete a directory
+               that is being used.
+
+               A symbolic link itself is deleted, not what it points to.
+
+               The result is a Number, which is 0/false if the delete
+               operation was successful and -1/true when the deletion failed
+               or partly failed.
+
+               Use |remove()| to delete an item from a |List|.
+               To delete a line from the buffer use |:delete| or
+               |deletebufline()|.
+
+               Can also be used as a |method|: >
+                       GetName()->delete()
+
+deletebufline({buf}, {first} [, {last}])               *deletebufline()*
+               Delete lines {first} to {last} (inclusive) from buffer {buf}.
+               If {last} is omitted then delete line {first} only.
+               On success 0 is returned, on failure 1 is returned.
+
+               This function works only for loaded buffers. First call
+               |bufload()| if needed.
+
+               For the use of {buf}, see |bufname()| above.
+
+               {first} and {last} are used like with |getline()|. Note that
+               when using |line()| this refers to the current buffer. Use "$"
+               to refer to the last line in buffer {buf}.
+
+               Can also be used as a |method|: >
+                       GetBuffer()->deletebufline(1)
+<
+                                                       *did_filetype()*
+did_filetype() Returns |TRUE| when autocommands are being executed and the
+               FileType event has been triggered at least once.  Can be used
+               to avoid triggering the FileType event again in the scripts
+               that detect the file type. |FileType|
+               Returns |FALSE| when `:setf FALLBACK` was used.
+               When editing another file, the counter is reset, thus this
+               really checks if the FileType event has been triggered for the
+               current buffer.  This allows an autocommand that starts
+               editing another buffer to set 'filetype' and load a syntax
+               file.
+
+diff_filler({lnum})                                    *diff_filler()*
+               Returns the number of filler lines above line {lnum}.
+               These are the lines that were inserted at this point in
+               another diff'ed window.  These filler lines are shown in the
+               display but don't exist in the buffer.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+               Returns 0 if the current window is not in diff mode.
+
+               Can also be used as a |method|: >
+                       GetLnum()->diff_filler()
+
+diff_hlID({lnum}, {col})                               *diff_hlID()*
+               Returns the highlight ID for diff mode at line {lnum} column
+               {col} (byte index).  When the current line does not have a
+               diff change zero is returned.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+               {col} is 1 for the leftmost column, {lnum} is 1 for the first
+               line.
+               The highlight ID can be used with |synIDattr()| to obtain
+               syntax information about the highlighting.
+
+               Can also be used as a |method|: >
+                       GetLnum()->diff_hlID(col)
+<
+
+digraph_get({chars})                                   *digraph_get()* *E1214*
+               Return the digraph of {chars}.  This should be a string with
+               exactly two characters.  If {chars} are not just two
+               characters, or the digraph of {chars} does not exist, an error
+               is given and an empty string is returned.
+
+               The character will be converted from Unicode to 'encoding'
+               when needed.  This does require the conversion to be
+               available, it might fail.
+
+               Also see |digraph_getlist()|.
+
+               Examples: >
+               " Get a built-in digraph
+               :echo digraph_get('00')         " Returns '∞'
+
+               " Get a user-defined digraph
+               :call digraph_set('aa', 'あ')
+               :echo digraph_get('aa')         " Returns 'あ'
+<
+               Can also be used as a |method|: >
+                       GetChars()->digraph_get()
+<
+               This function works only when compiled with the |+digraphs|
+               feature.  If this feature is disabled, this function will
+               display an error message.
+
+
+digraph_getlist([{listall}])                           *digraph_getlist()*
+               Return a list of digraphs.  If the {listall} argument is given
+               and it is TRUE, return all digraphs, including the default
+               digraphs.  Otherwise, return only user-defined digraphs.
+
+               The characters will be converted from Unicode to 'encoding'
+               when needed.  This does require the conservation to be
+               available, it might fail.
+
+               Also see |digraph_get()|.
+
+               Examples: >
+               " Get user-defined digraphs
+               :echo digraph_getlist()
+
+               " Get all the digraphs, including default digraphs
+               :echo digraph_getlist(1)
+<
+               Can also be used as a |method|: >
+                       GetNumber()->digraph_getlist()
+<
+               This function works only when compiled with the |+digraphs|
+               feature.  If this feature is disabled, this function will
+               display an error message.
+
+
+digraph_set({chars}, {digraph})                                *digraph_set()* *E1205*
+               Add digraph {chars} to the list.  {chars} must be a string
+               with two characters.  {digraph} is a string with one UTF-8
+               encoded character. Be careful, composing characters are NOT
+               ignored.  This function is similar to |:digraphs| command, but
+               useful to add digraphs start with a white space.
+
+               The function result is v:true if |digraph| is registered.  If
+               this fails an error message is given and v:false is returned.
+
+               If you want to define multiple digraphs at once, you can use
+               |digraph_setlist()|.
+
+               Example: >
+                       call digraph_set('  ', 'あ')
+<
+               Can be used as a |method|: >
+                       GetString()->digraph_set('あ')
+<
+               This function works only when compiled with the |+digraphs|
+               feature.  If this feature is disabled, this function will
+               display an error message.
+
+
+digraph_setlist({digraphlist})                         *digraph_setlist()*
+               Similar to |digraph_set()| but this function can add multiple
+               digraphs at once.  {digraphlist} is a list composed of lists,
+               where each list contains two strings with {chars} and
+               {digraph} as in |digraph_set()|.
+               Example: >
+                   call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
+<
+               It is similar to the following: >
+                   for [chars, digraph] in [['aa', 'あ'], ['ii', 'い']]
+                         call digraph_set(chars, digraph)
+                   endfor
+<              Except that the function returns after the first error,
+               following digraphs will not be added.
+
+               Can be used as a |method|: >
+                   GetList()->digraph_setlist()
+<
+               This function works only when compiled with the |+digraphs|
+               feature.  If this feature is disabled, this function will
+               display an error message.
+
+
+echoraw({string})                                      *echoraw()*
+               Output {string} as-is, including unprintable characters.
+               This can be used to output a terminal code. For example, to
+               disable modifyOtherKeys: >
+                       call echoraw(&t_TE)
+<              and to enable it again: >
+                       call echoraw(&t_TI)
+<              Use with care, you can mess up the terminal this way.
+
+
+empty({expr})                                          *empty()*
+               Return the Number 1 if {expr} is empty, zero otherwise.
+               - A |List| or |Dictionary| is empty when it does not have any
+                 items.
+               - A |String| is empty when its length is zero.
+               - A |Number| and |Float| are empty when their value is zero.
+               - |v:false|, |v:none| and |v:null| are empty, |v:true| is not.
+               - A |Job| is empty when it failed to start.
+               - A |Channel| is empty when it is closed.
+               - A |Blob| is empty when its length is zero.
+
+               For a long |List| this is much faster than comparing the
+               length with zero.
+
+               Can also be used as a |method|: >
+                       mylist->empty()
+
+environ()                                              *environ()*
+               Return all of environment variables as dictionary. You can
+               check if an environment variable exists like this: >
+                       :echo has_key(environ(), 'HOME')
+<              Note that the variable name may be CamelCase; to ignore case
+               use this: >
+                       :echo index(keys(environ()), 'HOME', 0, 1) != -1
+
+escape({string}, {chars})                              *escape()*
+               Escape the characters in {chars} that occur in {string} with a
+               backslash.  Example: >
+                       :echo escape('c:\program files\vim', ' \')
+<              results in: >
+                       c:\\program\ files\\vim
+<              Also see |shellescape()| and |fnameescape()|.
+
+               Can also be used as a |method|: >
+                       GetText()->escape(' \')
+<
+                                                       *eval()*
+eval({string}) Evaluate {string} and return the result.  Especially useful to
+               turn the result of |string()| back into the original value.
+               This works for Numbers, Floats, Strings, Blobs and composites
+               of them.  Also works for |Funcref|s that refer to existing
+               functions.
+
+               Can also be used as a |method|: >
+                       argv->join()->eval()
+
+eventhandler()                                         *eventhandler()*
+               Returns 1 when inside an event handler.  That is that Vim got
+               interrupted while waiting for the user to type a character,
+               e.g., when dropping a file on Vim.  This means interactive
+               commands cannot be used.  Otherwise zero is returned.
+
+executable({expr})                                     *executable()*
+               This function checks if an executable with the name {expr}
+               exists.  {expr} must be the name of the program without any
+               arguments.
+               executable() uses the value of $PATH and/or the normal
+               searchpath for programs.                *PATHEXT*
+               On MS-Windows the ".exe", ".bat", etc. can optionally be
+               included.  Then the extensions in $PATHEXT are tried.  Thus if
+               "foo.exe" does not exist, "foo.exe.bat" can be found.  If
+               $PATHEXT is not set then ".com;.exe;.bat;.cmd" is used.  A dot
+               by itself can be used in $PATHEXT to try using the name
+               without an extension.  When 'shell' looks like a Unix shell,
+               then the name is also tried without adding an extension.
+               On MS-Windows it only checks if the file exists and is not a
+               directory, not if it's really executable.
+               On MS-Windows an executable in the same directory as Vim is
+               always found.  Since this directory is added to $PATH it
+               should also work to execute it |win32-PATH|.
+               The result is a Number:
+                       1       exists
+                       0       does not exist
+                       -1      not implemented on this system
+               |exepath()| can be used to get the full path of an executable.
+
+               Can also be used as a |method|: >
+                       GetCommand()->executable()
+
+execute({command} [, {silent}])                                        *execute()*
+               Execute an Ex command or commands and return the output as a
+               string.
+               {command} can be a string or a List.  In case of a List the
+               lines are executed one by one.
+               This is equivalent to: >
+                       redir => var
+                       {command}
+                       redir END
+<
+               The optional {silent} argument can have these values:
+                       ""              no `:silent` used
+                       "silent"        `:silent` used
+                       "silent!"       `:silent!` used
+               The default is "silent".  Note that with "silent!", unlike
+               `:redir`, error messages are dropped.  When using an external
+               command the screen may be messed up, use `system()` instead.
+                                                       *E930*
+               It is not possible to use `:redir` anywhere in {command}.
+
+               To get a list of lines use |split()| on the result: >
+                       split(execute('args'), "\n")
+
+<              To execute a command in another window than the current one
+               use `win_execute()`.
+
+               When used recursively the output of the recursive call is not
+               included in the output of the higher level call.
+
+               Can also be used as a |method|: >
+                       GetCommand()->execute()
+
+exepath({expr})                                                *exepath()*
+               If {expr} is an executable and is either an absolute path, a
+               relative path or found in $PATH, return the full path.
+               Note that the current directory is used when {expr} starts
+               with "./", which may be a problem for Vim: >
+                       echo exepath(v:progpath)
+<              If {expr} cannot be found in $PATH or is not executable then
+               an empty string is returned.
+
+               Can also be used as a |method|: >
+                       GetCommand()->exepath()
+<
+                                                       *exists()*
+exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
+               zero otherwise.
+
+               Note: In a compiled |:def| function the evaluation is done at
+               runtime.  Use `exists_compiled()` to evaluate the expression
+               at compile time.
+
+               For checking for a supported feature use |has()|.
+               For checking if a file exists use |filereadable()|.
+
+               The {expr} argument is a string, which contains one of these:
+                       &option-name    Vim option (only checks if it exists,
+                                       not if it really works)
+                       +option-name    Vim option that works.
+                       $ENVNAME        environment variable (could also be
+                                       done by comparing with an empty
+                                       string)
+                       *funcname       built-in function (see |functions|)
+                                       or user defined function (see
+                                       |user-functions|) that is implemented.
+                                       Also works for a variable that is a
+                                       Funcref.
+                       ?funcname       built-in function that could be
+                                       implemented; to be used to check if
+                                       "funcname" is valid
+                       varname         internal variable (see
+                                       |internal-variables|).  Also works
+                                       for |curly-braces-names|, |Dictionary|
+                                       entries, |List| items, etc.
+                                       Does not work for local variables in a
+                                       compiled `:def` function.
+                                       Beware that evaluating an index may
+                                       cause an error message for an invalid
+                                       expression.  E.g.: >
+                                          :let l = [1, 2, 3]
+                                          :echo exists("l[5]")
+<                                         0 >
+                                          :echo exists("l[xx]")
+<                                         E121: Undefined variable: xx
+                                          0
+                       :cmdname        Ex command: built-in command, user
+                                       command or command modifier |:command|.
+                                       Returns:
+                                       1  for match with start of a command
+                                       2  full match with a command
+                                       3  matches several user commands
+                                       To check for a supported command
+                                       always check the return value to be 2.
+                       :2match         The |:2match| command.
+                       :3match         The |:3match| command.
+                       #event          autocommand defined for this event
+                       #event#pattern  autocommand defined for this event and
+                                       pattern (the pattern is taken
+                                       literally and compared to the
+                                       autocommand patterns character by
+                                       character)
+                       #group          autocommand group exists
+                       #group#event    autocommand defined for this group and
+                                       event.
+                       #group#event#pattern
+                                       autocommand defined for this group,
+                                       event and pattern.
+                       ##event         autocommand for this event is
+                                       supported.
+
+               Examples: >
+                       exists("&shortname")
+                       exists("$HOSTNAME")
+                       exists("*strftime")
+                       exists("*s:MyFunc")
+                       exists("bufcount")
+                       exists(":Make")
+                       exists("#CursorHold")
+                       exists("#BufReadPre#*.gz")
+                       exists("#filetypeindent")
+                       exists("#filetypeindent#FileType")
+                       exists("#filetypeindent#FileType#*")
+                       exists("##ColorScheme")
+<              There must be no space between the symbol (&/$/*/#) and the
+               name.
+               There must be no extra characters after the name, although in
+               a few cases this is ignored.  That may become more strict in
+               the future, thus don't count on it!
+               Working example: >
+                       exists(":make")
+<              NOT working example: >
+                       exists(":make install")
+
+<              Note that the argument must be a string, not the name of the
+               variable itself.  For example: >
+                       exists(bufcount)
+<              This doesn't check for existence of the "bufcount" variable,
+               but gets the value of "bufcount", and checks if that exists.
+
+               Can also be used as a |method|: >
+                       Varname()->exists()
+<
+
+exists_compiled({expr})                                        *exists_compiled()*
+               Like `exists()` but evaluated at compile time.  This is useful
+               to skip a block where a function is used that would otherwise
+               give an error: >
+                       if exists_compiled('*ThatFunction')
+                          ThatFunction('works')
+                       endif
+<              If `exists()` were used then a compilation error would be
+               given if ThatFunction() is not defined.
+
+               {expr} must be a literal string. *E1232*
+               Can only be used in a |:def| function. *E1233*
+               This does not work to check for arguments or local variables.
+
+
+exp({expr})                                                    *exp()*
+               Return the exponential of {expr} as a |Float| in the range
+               [0, inf].
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo exp(2)
+<                      7.389056 >
+                       :echo exp(-1)
+<                      0.367879
+
+               Can also be used as a |method|: >
+                       Compute()->exp()
+<
+               {only available when compiled with the |+float| feature}
+
+
+expand({string} [, {nosuf} [, {list}]])                                *expand()*
+               Expand wildcards and the following special keywords in
+               {string}.  'wildignorecase' applies.
+
+               If {list} is given and it is |TRUE|, a List will be returned.
+               Otherwise the result is a String and when there are several
+               matches, they are separated by <NL> characters.  [Note: in
+               version 5.0 a space was used, which caused problems when a
+               file name contains a space]
+
+               If the expansion fails, the result is an empty string.  A name
+               for a non-existing file is not included, unless {string} does
+               not start with '%', '#' or '<', see below.
+
+               When {string} starts with '%', '#' or '<', the expansion is
+               done like for the |cmdline-special| variables with their
+               associated modifiers.  Here is a short overview:
+
+                       %               current file name
+                       #               alternate file name
+                       #n              alternate file name n
+                       <cfile>         file name under the cursor
+                       <afile>         autocmd file name
+                       <abuf>          autocmd buffer number (as a String!)
+                       <amatch>        autocmd matched name
+                       <cexpr>         C expression under the cursor
+                       <sfile>         sourced script file or function name
+                       <slnum>         sourced script line number or function
+                                       line number
+                       <sflnum>        script file line number, also when in
+                                       a function
+                       <SID>           "<SNR>123_"  where "123" is the
+                                       current script ID  |<SID>|
+                       <stack>         call stack
+                       <cword>         word under the cursor
+                       <cWORD>         WORD under the cursor
+                       <client>        the {clientid} of the last received
+                                       message |server2client()|
+               Modifiers:
+                       :p              expand to full path
+                       :h              head (last path component removed)
+                       :t              tail (last path component only)
+                       :r              root (one extension removed)
+                       :e              extension only
+
+               Example: >
+                       :let &tags = expand("%:p:h") . "/tags"
+<              Note that when expanding a string that starts with '%', '#' or
+               '<', any following text is ignored.  This does NOT work: >
+                       :let doesntwork = expand("%:h.bak")
+<              Use this: >
+                       :let doeswork = expand("%:h") . ".bak"
+<              Also note that expanding "<cfile>" and others only returns the
+               referenced file name without further expansion.  If "<cfile>"
+               is "~/.cshrc", you need to do another expand() to have the
+               "~/" expanded into the path of the home directory: >
+                       :echo expand(expand("<cfile>"))
+<
+               There cannot be white space between the variables and the
+               following modifier.  The |fnamemodify()| function can be used
+               to modify normal file names.
+
+               When using '%' or '#', and the current or alternate file name
+               is not defined, an empty string is used.  Using "%:p" in a
+               buffer with no name, results in the current directory, with a
+               '/' added.
+
+               When {string} does not start with '%', '#' or '<', it is
+               expanded like a file name is expanded on the command line.
+               'suffixes' and 'wildignore' are used, unless the optional
+               {nosuf} argument is given and it is |TRUE|.
+               Names for non-existing files are included.  The "**" item can
+               be used to search in a directory tree.  For example, to find
+               all "README" files in the current directory and below: >
+                       :echo expand("**/README")
+<
+               expand() can also be used to expand variables and environment
+               variables that are only known in a shell.  But this can be
+               slow, because a shell may be used to do the expansion.  See
+               |expr-env-expand|.
+               The expanded variable is still handled like a list of file
+               names.  When an environment variable cannot be expanded, it is
+               left unchanged.  Thus ":echo expand('$FOOBAR')" results in
+               "$FOOBAR".
+
+               See |glob()| for finding existing files.  See |system()| for
+               getting the raw output of an external command.
+
+               Can also be used as a |method|: >
+                       Getpattern()->expand()
+
+expandcmd({string})                                    *expandcmd()*
+               Expand special items in String {string} like what is done for
+               an Ex command such as `:edit`.  This expands special keywords,
+               like with |expand()|, and environment variables, anywhere in
+               {string}.  "~user" and "~/path" are only expanded at the
+               start.
+               Returns the expanded string.  Example: >
+                       :echo expandcmd('make %<.o')
+
+<              Can also be used as a |method|: >
+                       GetCommand()->expandcmd()
+<
+extend({expr1}, {expr2} [, {expr3}])                   *extend()*
+               {expr1} and {expr2} must be both |Lists| or both
+               |Dictionaries|.
+
+               If they are |Lists|: Append {expr2} to {expr1}.
+               If {expr3} is given insert the items of {expr2} before the
+               item with index {expr3} in {expr1}.  When {expr3} is zero
+               insert before the first item.  When {expr3} is equal to
+               len({expr1}) then {expr2} is appended.
+               Examples: >
+                       :echo sort(extend(mylist, [7, 5]))
+                       :call extend(mylist, [2, 3], 1)
+<              When {expr1} is the same List as {expr2} then the number of
+               items copied is equal to the original length of the List.
+               E.g., when {expr3} is 1 you get N new copies of the first item
+               (where N is the original length of the List).
+               Use |add()| to concatenate one item to a list.  To concatenate
+               two lists into a new list use the + operator: >
+                       :let newlist = [1, 2, 3] + [4, 5]
+<
+               If they are |Dictionaries|:
+               Add all entries from {expr2} to {expr1}.
+               If a key exists in both {expr1} and {expr2} then {expr3} is
+               used to decide what to do:
+               {expr3} = "keep": keep the value of {expr1}
+               {expr3} = "force": use the value of {expr2}
+               {expr3} = "error": give an error message                *E737*
+               When {expr3} is omitted then "force" is assumed.
+
+               {expr1} is changed when {expr2} is not empty.  If necessary
+               make a copy of {expr1} first.
+               {expr2} remains unchanged.
+               When {expr1} is locked and {expr2} is not empty the operation
+               fails.
+               Returns {expr1}.
+
+               Can also be used as a |method|: >
+                       mylist->extend(otherlist)
+
+
+extendnew({expr1}, {expr2} [, {expr3}])                        *extendnew()*
+               Like |extend()| but instead of adding items to {expr1} a new
+               List or Dictionary is created and returned.  {expr1} remains
+               unchanged.  Items can still be changed by {expr2}, if you
+               don't want that use |deepcopy()| first.
+
+
+feedkeys({string} [, {mode}])                          *feedkeys()*
+               Characters in {string} are queued for processing as if they
+               come from a mapping or were typed by the user.
+
+               By default the string is added to the end of the typeahead
+               buffer, thus if a mapping is still being executed the
+               characters come after them.  Use the 'i' flag to insert before
+               other characters, they will be executed next, before any
+               characters from a mapping.
+
+               The function does not wait for processing of keys contained in
+               {string}.
+
+               To include special keys into {string}, use double-quotes
+               and "\..." notation |expr-quote|. For example,
+               feedkeys("\<CR>") simulates pressing of the <Enter> key. But
+               feedkeys('\<CR>') pushes 5 characters.
+               A special code that might be useful is <Ignore>, it exits the
+               wait for a character without doing anything.  *<Ignore>*
+
+               {mode} is a String, which can contain these character flags:
+               'm'     Remap keys. This is default.  If {mode} is absent,
+                       keys are remapped.
+               'n'     Do not remap keys.
+               't'     Handle keys as if typed; otherwise they are handled as
+                       if coming from a mapping.  This matters for undo,
+                       opening folds, etc.
+               'L'     Lowlevel input.  Only works for Unix or when using the
+                       GUI. Keys are used as if they were coming from the
+                       terminal.  Other flags are not used.  *E980*
+                       When a CTRL-C interrupts and 't' is included it sets
+                       the internal "got_int" flag.
+               'i'     Insert the string instead of appending (see above).
+               'x'     Execute commands until typeahead is empty.  This is
+                       similar to using ":normal!".  You can call feedkeys()
+                       several times without 'x' and then one time with 'x'
+                       (possibly with an empty {string}) to execute all the
+                       typeahead.  Note that when Vim ends in Insert mode it
+                       will behave as if <Esc> is typed, to avoid getting
+                       stuck, waiting for a character to be typed before the
+                       script continues.
+                       Note that if you manage to call feedkeys() while
+                       executing commands, thus calling it recursively, then
+                       all typeahead will be consumed by the last call.
+               '!'     When used with 'x' will not end Insert mode. Can be
+                       used in a test when a timer is set to exit Insert mode
+                       a little later.  Useful for testing CursorHoldI.
+
+               Return value is always 0.
+
+               Can also be used as a |method|: >
+                       GetInput()->feedkeys()
+
+filereadable({file})                                   *filereadable()*
+               The result is a Number, which is |TRUE| when a file with the
+               name {file} exists, and can be read.  If {file} doesn't exist,
+               or is a directory, the result is |FALSE|.  {file} is any
+               expression, which is used as a String.
+               If you don't care about the file being readable you can use
+               |glob()|.
+               {file} is used as-is, you may want to expand wildcards first: >
+                       echo filereadable('~/.vimrc')
+                       0
+                       echo filereadable(expand('~/.vimrc'))
+                       1
+
+<              Can also be used as a |method|: >
+                       GetName()->filereadable()
+<                                                      *file_readable()*
+               Obsolete name: file_readable().
+
+
+filewritable({file})                                   *filewritable()*
+               The result is a Number, which is 1 when a file with the
+               name {file} exists, and can be written.  If {file} doesn't
+               exist, or is not writable, the result is 0.  If {file} is a
+               directory, and we can write to it, the result is 2.
+
+               Can also be used as a |method|: >
+                       GetName()->filewritable()
+
+
+filter({expr1}, {expr2})                               *filter()*
+               {expr1} must be a |List|, |String|, |Blob| or |Dictionary|.
+               For each item in {expr1} evaluate {expr2} and when the result
+               is zero or false remove the item from the |List| or
+               |Dictionary|.  Similarly for each byte in a |Blob| and each
+               charactor in a |String|.
+
+               {expr2} must be a |string| or |Funcref|.
+
+               If {expr2} is a |string|, inside {expr2} |v:val| has the value
+               of the current item.  For a |Dictionary| |v:key| has the key
+               of the current item and for a |List| |v:key| has the index of
+               the current item.  For a |Blob| |v:key| has the index of the
+               current byte. For a |String| |v:key| has the index of the
+               current character.
+               Examples: >
+                       call filter(mylist, 'v:val !~ "OLD"')
+<              Removes the items where "OLD" appears. >
+                       call filter(mydict, 'v:key >= 8')
+<              Removes the items with a key below 8. >
+                       call filter(var, 0)
+<              Removes all the items, thus clears the |List| or |Dictionary|.
+
+               Note that {expr2} is the result of expression and is then
+               used as an expression again.  Often it is good to use a
+               |literal-string| to avoid having to double backslashes.
+
+               If {expr2} is a |Funcref| it must take two arguments:
+                       1. the key or the index of the current item.
+                       2. the value of the current item.
+               The function must return |TRUE| if the item should be kept.
+               Example that keeps the odd items of a list: >
+                       func Odd(idx, val)
+                         return a:idx % 2 == 1
+                       endfunc
+                       call filter(mylist, function('Odd'))
+<              It is shorter when using a |lambda|: >
+                       call filter(myList, {idx, val -> idx * val <= 42})
+<              If you do not use "val" you can leave it out: >
+                       call filter(myList, {idx -> idx % 2 == 1})
+<
+               In |Vim9| script the result must be true, false, zero or one.
+               Other values will result in a type error.
+
+               For a |List| and a |Dictionary| the operation is done
+               in-place.  If you want it to remain unmodified make a copy
+               first: >
+                       :let l = filter(copy(mylist), 'v:val =~ "KEEP"')
+
+<              Returns {expr1}, the |List| or |Dictionary| that was filtered,
+               or a new |Blob| or |String|. 
+               When an error is encountered while evaluating {expr2} no
+               further items in {expr1} are processed.
+               When {expr2} is a Funcref errors inside a function are ignored,
+               unless it was defined with the "abort" flag.
+
+               Can also be used as a |method|: >
+                       mylist->filter(expr2)
+
+finddir({name} [, {path} [, {count}]])                         *finddir()*
+               Find directory {name} in {path}.  Supports both downwards and
+               upwards recursive directory searches.  See |file-searching|
+               for the syntax of {path}.
+
+               Returns the path of the first found match.  When the found
+               directory is below the current directory a relative path is
+               returned.  Otherwise a full path is returned.
+               If {path} is omitted or empty then 'path' is used.
+
+               If the optional {count} is given, find {count}'s occurrence of
+               {name} in {path} instead of the first one.
+               When {count} is negative return all the matches in a |List|.
+
+               This is quite similar to the ex-command `:find`.
+               {only available when compiled with the |+file_in_path|
+               feature}
+
+               Can also be used as a |method|: >
+                       GetName()->finddir()
+
+findfile({name} [, {path} [, {count}]])                                *findfile()*
+               Just like |finddir()|, but find a file instead of a directory.
+               Uses 'suffixesadd'.
+               Example: >
+                       :echo findfile("tags.vim", ".;")
+<              Searches from the directory of the current file upwards until
+               it finds the file "tags.vim".
+
+               Can also be used as a |method|: >
+                       GetName()->findfile()
+
+flatten({list} [, {maxdepth}])                                 *flatten()*
+               Flatten {list} up to {maxdepth} levels.  Without {maxdepth}
+               the result is a |List| without nesting, as if {maxdepth} is
+               a very large number.
+               The {list} is changed in place, use |flattennew()| if you do
+               not want that.
+               In Vim9 script flatten() cannot be used, you must always use
+               |flattennew()|.
+                                                               *E900*
+               {maxdepth} means how deep in nested lists changes are made.
+               {list} is not modified when {maxdepth} is 0.
+               {maxdepth} must be positive number.
+
+               If there is an error the number zero is returned.
+
+               Example: >
+                       :echo flatten([1, [2, [3, 4]], 5])
+<                      [1, 2, 3, 4, 5] >
+                       :echo flatten([1, [2, [3, 4]], 5], 1)
+<                      [1, 2, [3, 4], 5]
+
+               Can also be used as a |method|: >
+                       mylist->flatten()
+<
+flattennew({list} [, {maxdepth}])                      *flattennew()*
+               Like |flatten()| but first make a copy of {list}.
+
+
+float2nr({expr})                                       *float2nr()*
+               Convert {expr} to a Number by omitting the part after the
+               decimal point.
+               {expr} must evaluate to a |Float| or a Number.
+               When the value of {expr} is out of range for a |Number| the
+               result is truncated to 0x7fffffff or -0x7fffffff (or when
+               64-bit Number support is enabled, 0x7fffffffffffffff or
+               -0x7fffffffffffffff).  NaN results in -0x80000000 (or when
+               64-bit Number support is enabled, -0x8000000000000000).
+               Examples: >
+                       echo float2nr(3.95)
+<                      3  >
+                       echo float2nr(-23.45)
+<                      -23  >
+                       echo float2nr(1.0e100)
+<                      2147483647  (or 9223372036854775807) >
+                       echo float2nr(-1.0e150)
+<                      -2147483647 (or -9223372036854775807) >
+                       echo float2nr(1.0e-100)
+<                      0
+
+               Can also be used as a |method|: >
+                       Compute()->float2nr()
+<
+               {only available when compiled with the |+float| feature}
+
+
+floor({expr})                                                  *floor()*
+               Return the largest integral value less than or equal to
+               {expr} as a |Float| (round down).
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       echo floor(1.856)
+<                      1.0  >
+                       echo floor(-5.456)
+<                      -6.0  >
+                       echo floor(4.0)
+<                      4.0
+
+               Can also be used as a |method|: >
+                       Compute()->floor()
+<
+               {only available when compiled with the |+float| feature}
+
+
+fmod({expr1}, {expr2})                                 *fmod()*
+               Return the remainder of {expr1} / {expr2}, even if the
+               division is not representable.  Returns {expr1} - i * {expr2}
+               for some integer i such that if {expr2} is non-zero, the
+               result has the same sign as {expr1} and magnitude less than
+               the magnitude of {expr2}.  If {expr2} is zero, the value
+               returned is zero.  The value returned is a |Float|.
+               {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo fmod(12.33, 1.22)
+<                      0.13 >
+                       :echo fmod(-12.33, 1.22)
+<                      -0.13
+
+               Can also be used as a |method|: >
+                       Compute()->fmod(1.22)
+<
+               {only available when compiled with |+float| feature}
+
+
+fnameescape({string})                                  *fnameescape()*
+               Escape {string} for use as file name command argument.  All
+               characters that have a special meaning, such as '%' and '|'
+               are escaped with a backslash.
+               For most systems the characters escaped are
+               " \t\n*?[{`$\\%#'\"|!<".  For systems where a backslash
+               appears in a filename, it depends on the value of 'isfname'.
+               A leading '+' and '>' is also escaped (special after |:edit|
+               and |:write|).  And a "-" by itself (special after |:cd|).
+               Example: >
+                       :let fname = '+some str%nge|name'
+                       :exe "edit " . fnameescape(fname)
+<              results in executing: >
+                       edit \+some\ str\%nge\|name
+<
+               Can also be used as a |method|: >
+                       GetName()->fnameescape()
+
+fnamemodify({fname}, {mods})                           *fnamemodify()*
+               Modify file name {fname} according to {mods}.  {mods} is a
+               string of characters like it is used for file names on the
+               command line.  See |filename-modifiers|.
+               Example: >
+                       :echo fnamemodify("main.c", ":p:h")
+<              results in: >
+                       /home/mool/vim/vim/src
+<              If {mods} is empty then {fname} is returned.
+               Note: Environment variables don't work in {fname}, use
+               |expand()| first then.
+
+               Can also be used as a |method|: >
+                       GetName()->fnamemodify(':p:h')
+
+foldclosed({lnum})                                     *foldclosed()*
+               The result is a Number.  If the line {lnum} is in a closed
+               fold, the result is the number of the first line in that fold.
+               If the line {lnum} is not in a closed fold, -1 is returned.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+
+               Can also be used as a |method|: >
+                       GetLnum()->foldclosed()
+
+foldclosedend({lnum})                                  *foldclosedend()*
+               The result is a Number.  If the line {lnum} is in a closed
+               fold, the result is the number of the last line in that fold.
+               If the line {lnum} is not in a closed fold, -1 is returned.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+
+               Can also be used as a |method|: >
+                       GetLnum()->foldclosedend()
+
+foldlevel({lnum})                                      *foldlevel()*
+               The result is a Number, which is the foldlevel of line {lnum}
+               in the current buffer.  For nested folds the deepest level is
+               returned.  If there is no fold at line {lnum}, zero is
+               returned.  It doesn't matter if the folds are open or closed.
+               When used while updating folds (from 'foldexpr') -1 is
+               returned for lines where folds are still to be updated and the
+               foldlevel is unknown.  As a special case the level of the
+               previous line is usually available.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+
+               Can also be used as a |method|: >
+                       GetLnum()->foldlevel()
+<
+                                                       *foldtext()*
+foldtext()     Returns a String, to be displayed for a closed fold.  This is
+               the default function used for the 'foldtext' option and should
+               only be called from evaluating 'foldtext'.  It uses the
+               |v:foldstart|, |v:foldend| and |v:folddashes| variables.
+               The returned string looks like this: >
+                       +-- 45 lines: abcdef
+<              The number of leading dashes depends on the foldlevel.  The
+               "45" is the number of lines in the fold.  "abcdef" is the text
+               in the first non-blank line of the fold.  Leading white space,
+               "//" or "/*" and the text from the 'foldmarker' and
+               'commentstring' options is removed.
+               When used to draw the actual foldtext, the rest of the line
+               will be filled with the fold char from the 'fillchars'
+               setting.
+               {not available when compiled without the |+folding| feature}
+
+foldtextresult({lnum})                                 *foldtextresult()*
+               Returns the text that is displayed for the closed fold at line
+               {lnum}.  Evaluates 'foldtext' in the appropriate context.
+               When there is no closed fold at {lnum} an empty string is
+               returned.
+               {lnum} is used like with |getline()|.  Thus "." is the current
+               line, "'m" mark m, etc.
+               Useful when exporting folded text, e.g., to HTML.
+               {not available when compiled without the |+folding| feature}
+
+
+               Can also be used as a |method|: >
+                       GetLnum()->foldtextresult()
+<
+                                                       *foreground()*
+foreground()   Move the Vim window to the foreground.  Useful when sent from
+               a client to a Vim server. |remote_send()|
+               On Win32 systems this might not work, the OS does not always
+               allow a window to bring itself to the foreground.  Use
+               |remote_foreground()| instead.
+               {only in the Win32, Athena, Motif and GTK GUI versions and the
+               Win32 console version}
+
+fullcommand({name})                                            *fullcommand()*
+               Get the full command name from a short abbreviated command
+               name; see |20.2| for details on command abbreviations.
+
+               The string argument {name} may start with a `:` and can
+               include a [range], these are skipped and not returned.
+               Returns an empty string if a command doesn't exist or if it's
+               ambiguous (for user-defined commands).
+
+               For example `fullcommand('s')`, `fullcommand('sub')`,
+               `fullcommand(':%substitute')` all return "substitute".
+
+               Can also be used as a |method|: >
+                       GetName()->fullcommand()
+<
+                                               *funcref()*
+funcref({name} [, {arglist}] [, {dict}])
+               Just like |function()|, but the returned Funcref will lookup
+               the function by reference, not by name.  This matters when the
+               function {name} is redefined later.
+
+               Unlike |function()|, {name} must be an existing user function.
+               Also for autoloaded functions. {name} cannot be a builtin
+               function.
+
+               Can also be used as a |method|: >
+                       GetFuncname()->funcref([arg])
+<
+                               *function()* *partial* *E700* *E922* *E923*
+function({name} [, {arglist}] [, {dict}])
+               Return a |Funcref| variable that refers to function {name}.
+               {name} can be the name of a user defined function or an
+               internal function.
+
+               {name} can also be a Funcref or a partial.  When it is a
+               partial the dict stored in it will be used and the {dict}
+               argument is not allowed. E.g.: >
+                       let FuncWithArg = function(dict.Func, [arg])
+                       let Broken = function(dict.Func, [arg], dict)
+<
+               When using the Funcref the function will be found by {name},
+               also when it was redefined later.  Use |funcref()| to keep the
+               same function.
+
+               When {arglist} or {dict} is present this creates a partial.
+               That means the argument list and/or the dictionary is stored in
+               the Funcref and will be used when the Funcref is called.
+
+               The arguments are passed to the function in front of other
+               arguments, but after any argument from |method|.  Example: >
+                       func Callback(arg1, arg2, name)
+                       ...
+                       let Partial = function('Callback', ['one', 'two'])
+                       ...
+                       call Partial('name')
+<              Invokes the function as with: >
+                       call Callback('one', 'two', 'name')
+
+<              With a |method|: >
+                       func Callback(one, two, three)
+                       ...
+                       let Partial = function('Callback', ['two'])
+                       ...
+                       eval 'one'->Partial('three')
+<              Invokes the function as with: >
+                       call Callback('one', 'two', 'three')
+
+<              The function() call can be nested to add more arguments to the
+               Funcref.  The extra arguments are appended to the list of
+               arguments.  Example: >
+                       func Callback(arg1, arg2, name)
+                       ...
+                       let Func = function('Callback', ['one'])
+                       let Func2 = function(Func, ['two'])
+                       ...
+                       call Func2('name')
+<              Invokes the function as with: >
+                       call Callback('one', 'two', 'name')
+
+<              The Dictionary is only useful when calling a "dict" function.
+               In that case the {dict} is passed in as "self". Example: >
+                       function Callback() dict
+                          echo "called for " . self.name
+                       endfunction
+                       ...
+                       let context = {"name": "example"}
+                       let Func = function('Callback', context)
+                       ...
+                       call Func()     " will echo: called for example
+<              The use of function() is not needed when there are no extra
+               arguments, these two are equivalent: >
+                       let Func = function('Callback', context)
+                       let Func = context.Callback
+
+<              The argument list and the Dictionary can be combined: >
+                       function Callback(arg1, count) dict
+                       ...
+                       let context = {"name": "example"}
+                       let Func = function('Callback', ['one'], context)
+                       ...
+                       call Func(500)
+<              Invokes the function as with: >
+                       call context.Callback('one', 500)
+<
+               Can also be used as a |method|: >
+                       GetFuncname()->function([arg])
+
+
+garbagecollect([{atexit}])                             *garbagecollect()*
+               Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs|
+               that have circular references.
+
+               There is hardly ever a need to invoke this function, as it is
+               automatically done when Vim runs out of memory or is waiting
+               for the user to press a key after 'updatetime'.  Items without
+               circular references are always freed when they become unused.
+               This is useful if you have deleted a very big |List| and/or
+               |Dictionary| with circular references in a script that runs
+               for a long time.
+
+               When the optional {atexit} argument is one, garbage
+               collection will also be done when exiting Vim, if it wasn't
+               done before.  This is useful when checking for memory leaks.
+
+               The garbage collection is not done immediately but only when
+               it's safe to perform.  This is when waiting for the user to
+               type a character.  To force garbage collection immediately use
+               |test_garbagecollect_now()|.
+
+get({list}, {idx} [, {default}])                       *get()*
+               Get item {idx} from |List| {list}.  When this item is not
+               available return {default}.  Return zero when {default} is
+               omitted.
+               Preferably used as a |method|: >
+                       mylist->get(idx)
+get({blob}, {idx} [, {default}])
+               Get byte {idx} from |Blob| {blob}.  When this byte is not
+               available return {default}.  Return -1 when {default} is
+               omitted.
+               Preferably used as a |method|: >
+                       myblob->get(idx)
+get({dict}, {key} [, {default}])
+               Get item with key {key} from |Dictionary| {dict}.  When this
+               item is not available return {default}.  Return zero when
+               {default} is omitted.  Useful example: >
+                       let val = get(g:, 'var_name', 'default')
+<              This gets the value of g:var_name if it exists, and uses
+               'default' when it does not exist.
+               Preferably used as a |method|: >
+                       mydict->get(key)
+get({func}, {what})
+               Get an item with from Funcref {func}.  Possible values for
+               {what} are:
+                       "name"  The function name
+                       "func"  The function
+                       "dict"  The dictionary
+                       "args"  The list with arguments
+               Preferably used as a |method|: >
+                       myfunc->get(what)
+<
+                                                       *getbufinfo()*
+getbufinfo([{buf}])
+getbufinfo([{dict}])
+               Get information about buffers as a List of Dictionaries.
+
+               Without an argument information about all the buffers is
+               returned.
+
+               When the argument is a |Dictionary| only the buffers matching
+               the specified criteria are returned.  The following keys can
+               be specified in {dict}:
+                       buflisted       include only listed buffers.
+                       bufloaded       include only loaded buffers.
+                       bufmodified     include only modified buffers.
+
+               Otherwise, {buf} specifies a particular buffer to return
+               information for.  For the use of {buf}, see |bufname()|
+               above.  If the buffer is found the returned List has one item.
+               Otherwise the result is an empty list.
+
+               Each returned List item is a dictionary with the following
+               entries:
+                       bufnr           Buffer number.
+                       changed         TRUE if the buffer is modified.
+                       changedtick     Number of changes made to the buffer.
+                       hidden          TRUE if the buffer is hidden.
+                       lastused        Timestamp in seconds, like
+                                       |localtime()|, when the buffer was
+                                       last used.
+                                       {only with the |+viminfo| feature}
+                       listed          TRUE if the buffer is listed.
+                       lnum            Line number used for the buffer when
+                                       opened in the current window.
+                                       Only valid if the buffer has been
+                                       displayed in the window in the past.
+                                       If you want the line number of the
+                                       last known cursor position in a given
+                                       window, use |line()|: >
+                                               :echo line('.', {winid})
+<
+                       linecount       Number of lines in the buffer (only
+                                       valid when loaded)
+                       loaded          TRUE if the buffer is loaded.
+                       name            Full path to the file in the buffer.
+                       signs           List of signs placed in the buffer.
+                                       Each list item is a dictionary with
+                                       the following fields:
+                                           id    sign identifier
+                                           lnum  line number
+                                           name  sign name
+                       variables       A reference to the dictionary with
+                                       buffer-local variables.
+                       windows         List of |window-ID|s that display this
+                                       buffer
+                       popups          List of popup |window-ID|s that
+                                       display this buffer
+
+               Examples: >
+                       for buf in getbufinfo()
+                           echo buf.name
+                       endfor
+                       for buf in getbufinfo({'buflisted':1})
+                           if buf.changed
+                               ....
+                           endif
+                       endfor
+<
+               To get buffer-local options use: >
+                       getbufvar({bufnr}, '&option_name')
+<
+               Can also be used as a |method|: >
+                       GetBufnr()->getbufinfo()
+<
+
+                                                       *getbufline()*
+getbufline({buf}, {lnum} [, {end}])
+               Return a |List| with the lines starting from {lnum} to {end}
+               (inclusive) in the buffer {buf}.  If {end} is omitted, a
+               |List| with only the line {lnum} is returned.
+
+               For the use of {buf}, see |bufname()| above.
+
+               For {lnum} and {end} "$" can be used for the last line of the
+               buffer.  Otherwise a number must be used.
+
+               When {lnum} is smaller than 1 or bigger than the number of
+               lines in the buffer, an empty |List| is returned.
+
+               When {end} is greater than the number of lines in the buffer,
+               it is treated as {end} is set to the number of lines in the
+               buffer.  When {end} is before {lnum} an empty |List| is
+               returned.
+
+               This function works only for loaded buffers.  For unloaded and
+               non-existing buffers, an empty |List| is returned.
+
+               Example: >
+                       :let lines = getbufline(bufnr("myfile"), 1, "$")
+
+<              Can also be used as a |method|: >
+                       GetBufnr()->getbufline(lnum)
+
+getbufvar({buf}, {varname} [, {def}])                          *getbufvar()*
+               The result is the value of option or local buffer variable
+               {varname} in buffer {buf}.  Note that the name without "b:"
+               must be used.
+               The {varname} argument is a string.
+               When {varname} is empty returns a |Dictionary| with all the
+               buffer-local variables.
+               When {varname} is equal to "&" returns a |Dictionary| with all
+               the buffer-local options.
+               Otherwise, when {varname} starts with "&" returns the value of
+               a buffer-local option.
+               This also works for a global or buffer-local option, but it
+               doesn't work for a global variable, window-local variable or
+               window-local option.
+               For the use of {buf}, see |bufname()| above.
+               When the buffer or variable doesn't exist {def} or an empty
+               string is returned, there is no error message.
+               Examples: >
+                       :let bufmodified = getbufvar(1, "&mod")
+                       :echo "todo myvar = " . getbufvar("todo", "myvar")
+
+<              Can also be used as a |method|: >
+                       GetBufnr()->getbufvar(varname)
+<
+getchangelist([{buf}])                                 *getchangelist()*
+               Returns the |changelist| for the buffer {buf}. For the use
+               of {buf}, see |bufname()| above. If buffer {buf} doesn't
+               exist, an empty list is returned.
+
+               The returned list contains two entries: a list with the change
+               locations and the current position in the list.  Each
+               entry in the change list is a dictionary with the following
+               entries:
+                       col             column number
+                       coladd          column offset for 'virtualedit'
+                       lnum            line number
+               If buffer {buf} is the current buffer, then the current
+               position refers to the position in the list. For other
+               buffers, it is set to the length of the list.
+
+               Can also be used as a |method|: >
+                       GetBufnr()->getchangelist()
+
+getchar([expr])                                                *getchar()*
+               Get a single character from the user or input stream.
+               If [expr] is omitted, wait until a character is available.
+               If [expr] is 0, only get a character when one is available.
+                       Return zero otherwise.
+               If [expr] is 1, only check if a character is available, it is
+                       not consumed.  Return zero if no character available.
+               If you prefer always getting a string use |getcharstr()|.
+
+               Without [expr] and when [expr] is 0 a whole character or
+               special key is returned.  If it is a single character, the
+               result is a number.  Use nr2char() to convert it to a String.
+               Otherwise a String is returned with the encoded character.
+               For a special key it's a String with a sequence of bytes
+               starting with 0x80 (decimal: 128).  This is the same value as
+               the String "\<Key>", e.g., "\<Left>".  The returned value is
+               also a String when a modifier (shift, control, alt) was used
+               that is not included in the character.
+
+               When [expr] is 0 and Esc is typed, there will be a short delay
+               while Vim waits to see if this is the start of an escape
+               sequence.
+
+               When [expr] is 1 only the first byte is returned.  For a
+               one-byte character it is the character itself as a number.
+               Use nr2char() to convert it to a String.
+
+               Use getcharmod() to obtain any additional modifiers.
+
+               When the user clicks a mouse button, the mouse event will be
+               returned.  The position can then be found in |v:mouse_col|,
+               |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
+               |getmousepos()| can also be used.  Mouse move events will be
+               ignored.
+               This example positions the mouse as it would normally happen: >
+                       let c = getchar()
+                       if c == "\<LeftMouse>" && v:mouse_win > 0
+                         exe v:mouse_win . "wincmd w"
+                         exe v:mouse_lnum
+                         exe "normal " . v:mouse_col . "|"
+                       endif
+<
+               When using bracketed paste only the first character is
+               returned, the rest of the pasted text is dropped.
+               |xterm-bracketed-paste|.
+
+               There is no prompt, you will somehow have to make clear to the
+               user that a character has to be typed.  The screen is not
+               redrawn, e.g. when resizing the window.  When using a popup
+               window it should work better with a |popup-filter|.
+
+               There is no mapping for the character.
+               Key codes are replaced, thus when the user presses the <Del>
+               key you get the code for the <Del> key, not the raw character
+               sequence.  Examples: >
+                       getchar() == "\<Del>"
+                       getchar() == "\<S-Left>"
+<              This example redefines "f" to ignore case: >
+                       :nmap f :call FindChar()<CR>
+                       :function FindChar()
+                       :  let c = nr2char(getchar())
+                       :  while col('.') < col('$') - 1
+                       :    normal l
+                       :    if getline('.')[col('.') - 1] ==? c
+                       :      break
+                       :    endif
+                       :  endwhile
+                       :endfunction
+<
+               You may also receive synthetic characters, such as
+               |<CursorHold>|. Often you will want to ignore this and get
+               another character: >
+                       :function GetKey()
+                       :  let c = getchar()
+                       :  while c == "\<CursorHold>"
+                       :    let c = getchar()
+                       :  endwhile
+                       :  return c
+                       :endfunction
+
+getcharmod()                                           *getcharmod()*
+               The result is a Number which is the state of the modifiers for
+               the last obtained character with getchar() or in another way.
+               These values are added together:
+                       2       shift
+                       4       control
+                       8       alt (meta)
+                       16      meta (when it's different from ALT)
+                       32      mouse double click
+                       64      mouse triple click
+                       96      mouse quadruple click (== 32 + 64)
+                       128     command (Macintosh only)
+               Only the modifiers that have not been included in the
+               character itself are obtained.  Thus Shift-a results in "A"
+               without a modifier.
+
+                                                       *getcharpos()*
+getcharpos({expr})
+               Get the position for String {expr}. Same as |getpos()| but the
+               column number in the returned List is a character index
+               instead of a byte index.
+               If |getpos()| returns a very large column number, such as
+               2147483647, then getcharpos() will return the character index
+               of the last character.
+
+               Example:
+               With the cursor on '세' in line 5 with text "여보세요": >
+                       getcharpos('.')         returns [0, 5, 3, 0]
+                       getpos('.')             returns [0, 5, 7, 0]
+<
+               Can also be used as a |method|: >
+                       GetMark()->getcharpos()
+
+getcharsearch()                                                *getcharsearch()*
+               Return the current character search information as a {dict}
+               with the following entries:
+
+                   char        character previously used for a character
+                               search (|t|, |f|, |T|, or |F|); empty string
+                               if no character search has been performed
+                   forward     direction of character search; 1 for forward,
+                               0 for backward
+                   until       type of character search; 1 for a |t| or |T|
+                               character search, 0 for an |f| or |F|
+                               character search
+
+               This can be useful to always have |;| and |,| search
+               forward/backward regardless of the direction of the previous
+               character search: >
+                       :nnoremap <expr> ; getcharsearch().forward ? ';' : ','
+                       :nnoremap <expr> , getcharsearch().forward ? ',' : ';'
+<              Also see |setcharsearch()|.
+
+
+getcharstr([expr])                                     *getcharstr()*
+               Get a single character from the user or input stream as a
+               string.
+               If [expr] is omitted, wait until a character is available.
+               If [expr] is 0 or false, only get a character when one is
+                       available.  Return an empty string otherwise.
+               If [expr] is 1 or true, only check if a character is
+                       available, it is not consumed.  Return an empty string
+                       if no character is available.
+               Otherwise this works like |getchar()|, except that a number
+               result is converted to a string.
+
+
+getcmdline()                                           *getcmdline()*
+               Return the current command-line.  Only works when the command
+               line is being edited, thus requires use of |c_CTRL-\_e| or
+               |c_CTRL-R_=|.
+               Example: >
+                       :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
+<              Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
+               Returns an empty string when entering a password or using
+               |inputsecret()|.
+
+getcmdpos()                                            *getcmdpos()*
+               Return the position of the cursor in the command line as a
+               byte count.  The first column is 1.
+               Only works when editing the command line, thus requires use of
+               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+               Returns 0 otherwise.
+               Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
+
+getcmdtype()                                           *getcmdtype()*
+               Return the current command-line type. Possible return values
+               are:
+                   :   normal Ex command
+                   >   debug mode command |debug-mode|
+                   /   forward search command
+                   ?   backward search command
+                   @   |input()| command
+                   -   |:insert| or |:append| command
+                   =   |i_CTRL-R_=|
+               Only works when editing the command line, thus requires use of
+               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+               Returns an empty string otherwise.
+               Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
+
+getcmdwintype()                                                *getcmdwintype()*
+               Return the current |command-line-window| type. Possible return
+               values are the same as |getcmdtype()|. Returns an empty string
+               when not in the command-line window.
+
+getcompletion({pat}, {type} [, {filtered}])            *getcompletion()*
+               Return a list of command-line completion matches. The String
+               {type} argument specifies what for.  The following completion
+               types are supported:
+
+               arglist         file names in argument list
+               augroup         autocmd groups
+               buffer          buffer names
+               behave          :behave suboptions
+               color           color schemes
+               command         Ex command
+               cmdline         |cmdline-completion| result
+               compiler        compilers
+               cscope          |:cscope| suboptions
+               diff_buffer     |:diffget| and |:diffput| completion
+               dir             directory names
+               environment     environment variable names
+               event           autocommand events
+               expression      Vim expression
+               file            file and directory names
+               file_in_path    file and directory names in |'path'|
+               filetype        filetype names |'filetype'|
+               function        function name
+               help            help subjects
+               highlight       highlight groups
+               history         :history suboptions
+               locale          locale names (as output of locale -a)
+               mapclear        buffer argument
+               mapping         mapping name
+               menu            menus
+               messages        |:messages| suboptions
+               option          options
+               packadd         optional package |pack-add| names
+               shellcmd        Shell command
+               sign            |:sign| suboptions
+               syntax          syntax file names |'syntax'|
+               syntime         |:syntime| suboptions
+               tag             tags
+               tag_listfiles   tags, file names
+               user            user names
+               var             user variables
+
+               If {pat} is an empty string, then all the matches are
+               returned.  Otherwise only items matching {pat} are returned.
+               See |wildcards| for the use of special characters in {pat}.
+
+               If the optional {filtered} flag is set to 1, then 'wildignore'
+               is applied to filter the results.  Otherwise all the matches
+               are returned. The 'wildignorecase' option always applies.
+
+               If {type} is "cmdline", then the |cmdline-completion| result is
+               returned.  For example, to complete the possible values after
+               a ":call" command: >
+                       echo getcompletion('call ', 'cmdline')
+<
+               If there are no matches, an empty list is returned.  An
+               invalid value for {type} produces an error.
+
+               Can also be used as a |method|: >
+                       GetPattern()->getcompletion('color')
+<
+                                                       *getcurpos()*
+getcurpos([{winid}])
+               Get the position of the cursor.  This is like getpos('.'), but
+               includes an extra "curswant" item in the list:
+                   [0, lnum, col, off, curswant] ~
+               The "curswant" number is the preferred column when moving the
+               cursor vertically.  Also see |getcursorcharpos()| and
+               |getpos()|.
+               The first "bufnum" item is always zero. The byte position of
+               the cursor is returned in 'col'. To get the character
+               position, use |getcursorcharpos()|.
+
+               The optional {winid} argument can specify the window.  It can
+               be the window number or the |window-ID|.  The last known
+               cursor position is returned, this may be invalid for the
+               current value of the buffer if it is not the current window.
+               If {winid} is invalid a list with zeroes is returned.
+
+               This can be used to save and restore the cursor position: >
+                       let save_cursor = getcurpos()
+                       MoveTheCursorAround
+                       call setpos('.', save_cursor)
+<              Note that this only works within the window.  See
+               |winrestview()| for restoring more state.
+
+               Can also be used as a |method|: >
+                       GetWinid()->getcurpos()
+<
+                                                       *getcursorcharpos()*
+getcursorcharpos([{winid}])
+               Same as |getcurpos()| but the column number in the returned
+               List is a character index instead of a byte index.
+
+               Example:
+               With the cursor on '보' in line 3 with text "여보세요": >
+                       getcursorcharpos()      returns [0, 3, 2, 0, 3]
+                       getcurpos()             returns [0, 3, 4, 0, 3]
+<
+               Can also be used as a |method|: >
+                       GetWinid()->getcursorcharpos()
+
+<                                                      *getcwd()*
+getcwd([{winnr} [, {tabnr}]])
+               The result is a String, which is the name of the current
+               working directory.  'autochdir' is ignored.
+
+               With {winnr} return the local current directory of this window
+               in the current tab page.  {winnr} can be the window number or
+               the |window-ID|.
+               If {winnr} is -1 return the name of the global working
+               directory.  See also |haslocaldir()|.
+
+               With {winnr} and {tabnr} return the local current directory of
+               the window in the specified tab page. If {winnr} is -1 return
+               the working directory of the tabpage.
+               If {winnr} is zero use the current window, if {tabnr} is zero
+               use the current tabpage.
+               Without any arguments, return the actual working directory of
+               the current window.
+               Return an empty string if the arguments are invalid.
+
+               Examples: >
+                       " Get the working directory of the current window
+                       :echo getcwd()
+                       :echo getcwd(0)
+                       :echo getcwd(0, 0)
+                       " Get the working directory of window 3 in tabpage 2
+                       :echo getcwd(3, 2)
+                       " Get the global working directory
+                       :echo getcwd(-1)
+                       " Get the working directory of tabpage 3
+                       :echo getcwd(-1, 3)
+                       " Get the working directory of current tabpage
+                       :echo getcwd(-1, 0)
+
+<              Can also be used as a |method|: >
+                       GetWinnr()->getcwd()
+
+getenv({name})                                         *getenv()*
+               Return the value of environment variable {name}.  The {name}
+               argument is a string, without a leading '$'.  Example: >
+                       myHome = getenv('HOME')
+
+<              When the variable does not exist |v:null| is returned.  That
+               is different from a variable set to an empty string, although
+               some systems interpret the empty value as the variable being
+               deleted.  See also |expr-env|.
+
+               Can also be used as a |method|: >
+                       GetVarname()->getenv()
+
+getfontname([{name}])                                  *getfontname()*
+               Without an argument returns the name of the normal font being
+               used.  Like what is used for the Normal highlight group
+               |hl-Normal|.
+               With an argument a check is done whether String {name} is a
+               valid font name.  If not then an empty string is returned.
+               Otherwise the actual font name is returned, or {name} if the
+               GUI does not support obtaining the real name.
+               Only works when the GUI is running, thus not in your vimrc or
+               gvimrc file.  Use the |GUIEnter| autocommand to use this
+               function just after the GUI has started.
+               Note that the GTK GUI accepts any font name, thus checking for
+               a valid name does not work.
+
+getfperm({fname})                                      *getfperm()*
+               The result is a String, which is the read, write, and execute
+               permissions of the given file {fname}.
+               If {fname} does not exist or its directory cannot be read, an
+               empty string is returned.
+               The result is of the form "rwxrwxrwx", where each group of
+               "rwx" flags represent, in turn, the permissions of the owner
+               of the file, the group the file belongs to, and other users.
+               If a user does not have a given permission the flag for this
+               is replaced with the string "-".  Examples: >
+                       :echo getfperm("/etc/passwd")
+                       :echo getfperm(expand("~/.vimrc"))
+<              This will hopefully (from a security point of view) display
+               the string "rw-r--r--" or even "rw-------".
+
+               Can also be used as a |method|: >
+                       GetFilename()->getfperm()
+<
+               For setting permissions use |setfperm()|.
+
+getfsize({fname})                                      *getfsize()*
+               The result is a Number, which is the size in bytes of the
+               given file {fname}.
+               If {fname} is a directory, 0 is returned.
+               If the file {fname} can't be found, -1 is returned.
+               If the size of {fname} is too big to fit in a Number then -2
+               is returned.
+
+               Can also be used as a |method|: >
+                       GetFilename()->getfsize()
+
+getftime({fname})                                      *getftime()*
+               The result is a Number, which is the last modification time of
+               the given file {fname}.  The value is measured as seconds
+               since 1st Jan 1970, and may be passed to strftime().  See also
+               |localtime()| and |strftime()|.
+               If the file {fname} can't be found -1 is returned.
+
+               Can also be used as a |method|: >
+                       GetFilename()->getftime()
+
+getftype({fname})                                      *getftype()*
+               The result is a String, which is a description of the kind of
+               file of the given file {fname}.
+               If {fname} does not exist an empty string is returned.
+               Here is a table over different kinds of files and their
+               results:
+                       Normal file             "file"
+                       Directory               "dir"
+                       Symbolic link           "link"
+                       Block device            "bdev"
+                       Character device        "cdev"
+                       Socket                  "socket"
+                       FIFO                    "fifo"
+                       All other               "other"
+               Example: >
+                       getftype("/home")
+<              Note that a type such as "link" will only be returned on
+               systems that support it.  On some systems only "dir" and
+               "file" are returned.  On MS-Windows a symbolic link to a
+               directory returns "dir" instead of "link".
+
+               Can also be used as a |method|: >
+                       GetFilename()->getftype()
+
+getimstatus()                                          *getimstatus()*
+               The result is a Number, which is |TRUE| when the IME status is
+               active.
+               See 'imstatusfunc'.
+
+getjumplist([{winnr} [, {tabnr}]])                     *getjumplist()*
+               Returns the |jumplist| for the specified window.
+
+               Without arguments use the current window.
+               With {winnr} only use this window in the current tab page.
+               {winnr} can also be a |window-ID|.
+               With {winnr} and {tabnr} use the window in the specified tab
+               page.
+
+               The returned list contains two entries: a list with the jump
+               locations and the last used jump position number in the list.
+               Each entry in the jump location list is a dictionary with
+               the following entries:
+                       bufnr           buffer number
+                       col             column number
+                       coladd          column offset for 'virtualedit'
+                       filename        filename if available
+                       lnum            line number
+
+               Can also be used as a |method|: >
+                       GetWinnr()->getjumplist()
+
+<                                                      *getline()*
+getline({lnum} [, {end}])
+               Without {end} the result is a String, which is line {lnum}
+               from the current buffer.  Example: >
+                       getline(1)
+<              When {lnum} is a String that doesn't start with a
+               digit, |line()| is called to translate the String into a Number.
+               To get the line under the cursor: >
+                       getline(".")
+<              When {lnum} is a number smaller than 1 or bigger than the
+               number of lines in the buffer, an empty string is returned.
+
+               When {end} is given the result is a |List| where each item is
+               a line from the current buffer in the range {lnum} to {end},
+               including line {end}.
+               {end} is used in the same way as {lnum}.
+               Non-existing lines are silently omitted.
+               When {end} is before {lnum} an empty |List| is returned.
+               Example: >
+                       :let start = line('.')
+                       :let end = search("^$") - 1
+                       :let lines = getline(start, end)
+
+<              Can also be used as a |method|: >
+                       ComputeLnum()->getline()
+
+<              To get lines from another buffer see |getbufline()|
+
+getloclist({nr} [, {what}])                            *getloclist()*
+               Returns a |List| with all the entries in the location list for
+               window {nr}.  {nr} can be the window number or the |window-ID|.
+               When {nr} is zero the current window is used.
+
+               For a location list window, the displayed location list is
+               returned.  For an invalid window number {nr}, an empty list is
+               returned. Otherwise, same as |getqflist()|.
+
+               If the optional {what} dictionary argument is supplied, then
+               returns the items listed in {what} as a dictionary. Refer to
+               |getqflist()| for the supported items in {what}.
+
+               In addition to the items supported by |getqflist()| in {what},
+               the following item is supported by |getloclist()|:
+
+                       filewinid       id of the window used to display files
+                                       from the location list. This field is
+                                       applicable only when called from a
+                                       location list window. See
+                                       |location-list-file-window| for more
+                                       details.
+
+               Returns a |Dictionary| with default values if there is no
+               location list for the window {nr}.
+               Returns an empty Dictionary if window {nr} does not exist.
+
+               Examples (See also |getqflist-examples|): >
+                       :echo getloclist(3, {'all': 0})
+                       :echo getloclist(5, {'filewinid': 0})
+
+
+getmarklist([{buf}])                                   *getmarklist()*
+               Without the {buf} argument returns a |List| with information
+               about all the global marks. |mark|
+
+               If the optional {buf} argument is specified, returns the
+               local marks defined in buffer {buf}.  For the use of {buf},
+               see |bufname()|.
+
+               Each item in the returned List is a |Dict| with the following:
+                   mark   name of the mark prefixed by "'"
+                   pos    a |List| with the position of the mark:
+                               [bufnum, lnum, col, off]
+                          Refer to |getpos()| for more information.
+                   file   file name
+
+               Refer to |getpos()| for getting information about a specific
+               mark.
+
+               Can also be used as a |method|: >
+                       GetBufnr()->getmarklist()
+
+getmatches([{win}])                                    *getmatches()*
+               Returns a |List| with all matches previously defined for the
+               current window by |matchadd()| and the |:match| commands.
+               |getmatches()| is useful in combination with |setmatches()|,
+               as |setmatches()| can restore a list of matches saved by
+               |getmatches()|.
+               If {win} is specified, use the window with this number or
+               window ID instead of the current window.
+               Example: >
+                       :echo getmatches()
+<                      [{'group': 'MyGroup1', 'pattern': 'TODO',
+                       'priority': 10, 'id': 1}, {'group': 'MyGroup2',
+                       'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
+                       :let m = getmatches()
+                       :call clearmatches()
+                       :echo getmatches()
+<                      [] >
+                       :call setmatches(m)
+                       :echo getmatches()
+<                      [{'group': 'MyGroup1', 'pattern': 'TODO',
+                       'priority': 10, 'id': 1}, {'group': 'MyGroup2',
+                       'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
+                       :unlet m
+<
+getmousepos()                                          *getmousepos()*
+               Returns a |Dictionary| with the last known position of the
+               mouse.  This can be used in a mapping for a mouse click or in
+               a filter of a popup window.  The items are:
+                       screenrow       screen row
+                       screencol       screen column
+                       winid           Window ID of the click
+                       winrow          row inside "winid"
+                       wincol          column inside "winid"
+                       line            text line inside "winid"
+                       column          text column inside "winid"
+               All numbers are 1-based.
+
+               If not over a window, e.g. when in the command line, then only
+               "screenrow" and "screencol" are valid, the others are zero.
+
+               When on the status line below a window or the vertical
+               separator right of a window, the "line" and "column" values
+               are zero.
+
+               When the position is after the text then "column" is the
+               length of the text in bytes plus one.
+
+               If the mouse is over a popup window then that window is used.
+
+               When using |getchar()| the Vim variables |v:mouse_lnum|,
+               |v:mouse_col| and |v:mouse_winid| also provide these values.
+
+                                                       *getpid()*
+getpid()       Return a Number which is the process ID of the Vim process.
+               On Unix and MS-Windows this is a unique number, until Vim
+               exits.
+
+                                                       *getpos()*
+getpos({expr}) Get the position for String {expr}.  For possible values of
+               {expr} see |line()|.  For getting the cursor position see
+               |getcurpos()|.
+               The result is a |List| with four numbers:
+                   [bufnum, lnum, col, off]
+               "bufnum" is zero, unless a mark like '0 or 'A is used, then it
+               is the buffer number of the mark.
+               "lnum" and "col" are the position in the buffer.  The first
+               column is 1.
+               The "off" number is zero, unless 'virtualedit' is used.  Then
+               it is the offset in screen columns from the start of the
+               character.  E.g., a position within a <Tab> or after the last
+               character.
+               Note that for '< and '> Visual mode matters: when it is "V"
+               (visual line mode) the column of '< is zero and the column of
+               '> is a large number.
+               The column number in the returned List is the byte position
+               within the line. To get the character position in the line,
+               use |getcharpos()|.
+               The column number can be very large, e.g. 2147483647, in which
+               case it means "after the end of the line".
+               This can be used to save and restore the position of a mark: >
+                       let save_a_mark = getpos("'a")
+                       ...
+                       call setpos("'a", save_a_mark)
+<              Also see |getcharpos()|, |getcurpos()| and |setpos()|.
+
+               Can also be used as a |method|: >
+                       GetMark()->getpos()
+
+getqflist([{what}])                                    *getqflist()*
+               Returns a |List| with all the current quickfix errors.  Each
+               list item is a dictionary with these entries:
+                       bufnr   number of buffer that has the file name, use
+                               bufname() to get the name
+                       module  module name
+                       lnum    line number in the buffer (first line is 1)
+                       end_lnum
+                               end of line number if the item is multiline
+                       col     column number (first column is 1)
+                       end_col end of column number if the item has range
+                       vcol    |TRUE|: "col" is visual column
+                               |FALSE|: "col" is byte index
+                       nr      error number
+                       pattern search pattern used to locate the error
+                       text    description of the error
+                       type    type of the error, 'E', '1', etc.
+                       valid   |TRUE|: recognized error message
+
+               When there is no error list or it's empty, an empty list is
+               returned. Quickfix list entries with a non-existing buffer
+               number are returned with "bufnr" set to zero (Note: some
+               functions accept buffer number zero for the alternate buffer,
+               you may need to explicitly check for zero).
+
+               Useful application: Find pattern matches in multiple files and
+               do something with them: >
+                       :vimgrep /theword/jg *.c
+                       :for d in getqflist()
+                       :   echo bufname(d.bufnr) ':' d.lnum '=' d.text
+                       :endfor
+<
+               If the optional {what} dictionary argument is supplied, then
+               returns only the items listed in {what} as a dictionary. The
+               following string items are supported in {what}:
+                       changedtick     get the total number of changes made
+                                       to the list |quickfix-changedtick|
+                       context get the |quickfix-context|
+                       efm     errorformat to use when parsing "lines". If
+                               not present, then the 'errorformat' option
+                               value is used.
+                       id      get information for the quickfix list with
+                               |quickfix-ID|; zero means the id for the
+                               current list or the list specified by "nr"
+                       idx     get information for the quickfix entry at this
+                               index in the list specified by 'id' or 'nr'.
+                               If set to zero, then uses the current entry.
+                               See |quickfix-index|
+                       items   quickfix list entries
+                       lines   parse a list of lines using 'efm' and return
+                               the resulting entries.  Only a |List| type is
+                               accepted.  The current quickfix list is not
+                               modified. See |quickfix-parse|.
+                       nr      get information for this quickfix list; zero
+                               means the current quickfix list and "$" means
+                               the last quickfix list
+                       qfbufnr number of the buffer displayed in the quickfix
+                               window. Returns 0 if the quickfix buffer is
+                               not present. See |quickfix-buffer|.
+                       size    number of entries in the quickfix list
+                       title   get the list title |quickfix-title|
+                       winid   get the quickfix |window-ID|
+                       all     all of the above quickfix properties
+               Non-string items in {what} are ignored. To get the value of a
+               particular item, set it to zero.
+               If "nr" is not present then the current quickfix list is used.
+               If both "nr" and a non-zero "id" are specified, then the list
+               specified by "id" is used.
+               To get the number of lists in the quickfix stack, set "nr" to
+               "$" in {what}. The "nr" value in the returned dictionary
+               contains the quickfix stack size.
+               When "lines" is specified, all the other items except "efm"
+               are ignored.  The returned dictionary contains the entry
+               "items" with the list of entries.
+
+               The returned dictionary contains the following entries:
+                       changedtick     total number of changes made to the
+                                       list |quickfix-changedtick|
+                       context quickfix list context. See |quickfix-context|
+                               If not present, set to "".
+                       id      quickfix list ID |quickfix-ID|. If not
+                               present, set to 0.
+                       idx     index of the quickfix entry in the list. If not
+                               present, set to 0.
+                       items   quickfix list entries. If not present, set to
+                               an empty list.
+                       nr      quickfix list number. If not present, set to 0
+                       qfbufnr number of the buffer displayed in the quickfix
+                               window. If not present, set to 0.
+                       size    number of entries in the quickfix list. If not
+                               present, set to 0.
+                       title   quickfix list title text. If not present, set
+                               to "".
+                       winid   quickfix |window-ID|. If not present, set to 0
+
+               Examples (See also |getqflist-examples|): >
+                       :echo getqflist({'all': 1})
+                       :echo getqflist({'nr': 2, 'title': 1})
+                       :echo getqflist({'lines' : ["F1:10:L10"]})
+<
+getreg([{regname} [, 1 [, {list}]]])                   *getreg()*
+               The result is a String, which is the contents of register
+               {regname}.  Example: >
+                       :let cliptext = getreg('*')
+<              When register {regname} was not set the result is an empty
+               string.
+               The {regname} argument must be a string.
+
+               getreg('=') returns the last evaluated value of the expression
+               register.  (For use in maps.)
+               getreg('=', 1) returns the expression itself, so that it can
+               be restored with |setreg()|.  For other registers the extra
+               argument is ignored, thus you can always give it.
+
+               If {list} is present and |TRUE|, the result type is changed
+               to |List|. Each list item is one text line. Use it if you care
+               about zero bytes possibly present inside register: without
+               third argument both NLs and zero bytes are represented as NLs
+               (see |NL-used-for-Nul|).
+               When the register was not set an empty list is returned.
+
+               If {regname} is "", the unnamed register '"' is used.
+               If {regname} is not specified, |v:register| is used.
+               In |Vim9-script| {regname} must be one character.
+
+               Can also be used as a |method|: >
+                       GetRegname()->getreg()
+
+getreginfo([{regname}])                                        *getreginfo()*
+               Returns detailed information about register {regname} as a
+               Dictionary with the following entries:
+                       regcontents     List of lines contained in register
+                                       {regname}, like
+                                       |getreg|({regname}, 1, 1).
+                       regtype         the type of register {regname}, as in
+                                       |getregtype()|.
+                       isunnamed       Boolean flag, v:true if this register
+                                       is currently pointed to by the unnamed
+                                       register.
+                       points_to       for the unnamed register, gives the
+                                       single letter name of the register
+                                       currently pointed to (see |quotequote|).
+                                       For example, after deleting a line
+                                       with `dd`, this field will be "1",
+                                       which is the register that got the
+                                       deleted text.
+
+               The {regname} argument is a string.  If {regname} is invalid
+               or not set, an empty Dictionary will be returned.
+               If {regname} is "" or "@", the unnamed register '"' is used.
+               If {regname} is not specified, |v:register| is used.
+               The returned Dictionary can be passed to |setreg()|.
+               In |Vim9-script| {regname} must be one character.
+
+               Can also be used as a |method|: >
+                       GetRegname()->getreginfo()
+
+getregtype([{regname}])                                        *getregtype()*
+               The result is a String, which is type of register {regname}.
+               The value will be one of:
+                   "v"                 for |characterwise| text
+                   "V"                 for |linewise| text
+                   "<CTRL-V>{width}"   for |blockwise-visual| text
+                   ""                  for an empty or unknown register
+               <CTRL-V> is one character with value 0x16.
+               The {regname} argument is a string.  If {regname} is "", the
+               unnamed register '"' is used.  If {regname} is not specified,
+               |v:register| is used.
+               In |Vim9-script| {regname} must be one character.
+
+               Can also be used as a |method|: >
+                       GetRegname()->getregtype()
+
+gettabinfo([{tabnr}])                                  *gettabinfo()*
+               If {tabnr} is not specified, then information about all the
+               tab pages is returned as a |List|. Each List item is a
+               |Dictionary|.  Otherwise, {tabnr} specifies the tab page
+               number and information about that one is returned.  If the tab
+               page does not exist an empty List is returned.
+
+               Each List item is a |Dictionary| with the following entries:
+                       tabnr           tab page number.
+                       variables       a reference to the dictionary with
+                                       tabpage-local variables
+                       windows         List of |window-ID|s in the tab page.
+
+               Can also be used as a |method|: >
+                       GetTabnr()->gettabinfo()
+
+gettabvar({tabnr}, {varname} [, {def}])                                *gettabvar()*
+               Get the value of a tab-local variable {varname} in tab page
+               {tabnr}. |t:var|
+               Tabs are numbered starting with one.
+               The {varname} argument is a string.  When {varname} is empty a
+               dictionary with all tab-local variables is returned.
+               Note that the name without "t:" must be used.
+               When the tab or variable doesn't exist {def} or an empty
+               string is returned, there is no error message.
+
+               Can also be used as a |method|: >
+                       GetTabnr()->gettabvar(varname)
+
+gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])            *gettabwinvar()*
+               Get the value of window-local variable {varname} in window
+               {winnr} in tab page {tabnr}.
+               The {varname} argument is a string.  When {varname} is empty a
+               dictionary with all window-local variables is returned.
+               When {varname} is equal to "&" get the values of all
+               window-local options in a |Dictionary|.
+               Otherwise, when {varname} starts with "&" get the value of a
+               window-local option.
+               Note that {varname} must be the name without "w:".
+               Tabs are numbered starting with one.  For the current tabpage
+               use |getwinvar()|.
+               {winnr} can be the window number or the |window-ID|.
+               When {winnr} is zero the current window is used.
+               This also works for a global option, buffer-local option and
+               window-local option, but it doesn't work for a global variable
+               or buffer-local variable.
+               When the tab, window or variable doesn't exist {def} or an
+               empty string is returned, there is no error message.
+               Examples: >
+                       :let list_is_on = gettabwinvar(1, 2, '&list')
+                       :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
+<
+               To obtain all window-local variables use: >
+                       gettabwinvar({tabnr}, {winnr}, '&')
+
+<              Can also be used as a |method|: >
+                       GetTabnr()->gettabwinvar(winnr, varname)
+
+gettagstack([{winnr}])                                 *gettagstack()*
+               The result is a Dict, which is the tag stack of window {winnr}.
+               {winnr} can be the window number or the |window-ID|.
+               When {winnr} is not specified, the current window is used.
+               When window {winnr} doesn't exist, an empty Dict is returned.
+
+               The returned dictionary contains the following entries:
+                       curidx          Current index in the stack. When at
+                                       top of the stack, set to (length + 1).
+                                       Index of bottom of the stack is 1.
+                       items           List of items in the stack. Each item
+                                       is a dictionary containing the
+                                       entries described below.
+                       length          Number of entries in the stack.
+
+               Each item in the stack is a dictionary with the following
+               entries:
+                       bufnr           buffer number of the current jump
+                       from            cursor position before the tag jump.
+                                       See |getpos()| for the format of the
+                                       returned list.
+                       matchnr         current matching tag number. Used when
+                                       multiple matching tags are found for a
+                                       name.
+                       tagname         name of the tag
+
+               See |tagstack| for more information about the tag stack.
+
+               Can also be used as a |method|: >
+                       GetWinnr()->gettagstack()
+
+
+gettext({text})                                                *gettext()*
+               Translate String {text} if possible.
+               This is mainly for use in the distributed Vim scripts.  When
+               generating message translations the {text} is extracted by
+               xgettext, the translator can add the translated message in the
+               .po file and Vim will lookup the translation when gettext() is
+               called.
+               For {text} double quoted strings are preferred, because
+               xgettext does not understand escaping in single quoted
+               strings.
+
+
+getwininfo([{winid}])                                  *getwininfo()*
+               Returns information about windows as a |List| with Dictionaries.
+
+               If {winid} is given Information about the window with that ID
+               is returned, as a |List| with one item.  If the window does not
+               exist the result is an empty list.
+
+               Without {winid} information about all the windows in all the
+               tab pages is returned.
+
+               Each List item is a |Dictionary| with the following entries:
+                       botline         last complete displayed buffer line
+                       bufnr           number of buffer in the window
+                       height          window height (excluding winbar)
+                       loclist         1 if showing a location list
+                                       {only with the +quickfix feature}
+                       quickfix        1 if quickfix or location list window
+                                       {only with the +quickfix feature}
+                       terminal        1 if a terminal window
+                                       {only with the +terminal feature}
+                       tabnr           tab page number
+                       topline         first displayed buffer line
+                       variables       a reference to the dictionary with
+                                       window-local variables
+                       width           window width
+                       winbar          1 if the window has a toolbar, 0
+                                       otherwise
+                       wincol          leftmost screen column of the window;
+                                       "col" from |win_screenpos()|
+                       textoff         number of columns occupied by any
+                                       'foldcolumn', 'signcolumn' and line
+                                       number in front of the text
+                       winid           |window-ID|
+                       winnr           window number
+                       winrow          topmost screen line of the window;
+                                       "row" from |win_screenpos()|
+
+               Can also be used as a |method|: >
+                       GetWinnr()->getwininfo()
+
+getwinpos([{timeout}])                                 *getwinpos()*
+               The result is a |List| with two numbers, the result of
+               |getwinposx()| and |getwinposy()| combined:
+                       [x-pos, y-pos]
+               {timeout} can be used to specify how long to wait in msec for
+               a response from the terminal.  When omitted 100 msec is used.
+               Use a longer time for a remote terminal.
+               When using a value less than 10 and no response is received
+               within that time, a previously reported position is returned,
+               if available.  This can be used to poll for the position and
+               do some work in the meantime: >
+                       while 1
+                         let res = getwinpos(1)
+                         if res[0] >= 0
+                           break
+                         endif
+                         " Do some work here
+                       endwhile
+<
+
+               Can also be used as a |method|: >
+                       GetTimeout()->getwinpos()
+<
+                                                       *getwinposx()*
+getwinposx()   The result is a Number, which is the X coordinate in pixels of
+               the left hand side of the GUI Vim window. Also works for an
+               xterm (uses a timeout of 100 msec).
+               The result will be -1 if the information is not available.
+               The value can be used with `:winpos`.
+
+                                                       *getwinposy()*
+getwinposy()   The result is a Number, which is the Y coordinate in pixels of
+               the top of the GUI Vim window.  Also works for an xterm (uses
+               a timeout of 100 msec).
+               The result will be -1 if the information is not available.
+               The value can be used with `:winpos`.
+
+getwinvar({winnr}, {varname} [, {def}])                                *getwinvar()*
+               Like |gettabwinvar()| for the current tabpage.
+               Examples: >
+                       :let list_is_on = getwinvar(2, '&list')
+                       :echo "myvar = " . getwinvar(1, 'myvar')
+
+<              Can also be used as a |method|: >
+                       GetWinnr()->getwinvar(varname)
+<
+glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])             *glob()*
+               Expand the file wildcards in {expr}.  See |wildcards| for the
+               use of special characters.
+
+               Unless the optional {nosuf} argument is given and is |TRUE|,
+               the 'suffixes' and 'wildignore' options apply: Names matching
+               one of the patterns in 'wildignore' will be skipped and
+               'suffixes' affect the ordering of matches.
+               'wildignorecase' always applies.
+
+               When {list} is present and it is |TRUE| the result is a |List|
+               with all matching files. The advantage of using a List is,
+               you also get filenames containing newlines correctly.
+               Otherwise the result is a String and when there are several
+               matches, they are separated by <NL> characters.
+
+               If the expansion fails, the result is an empty String or List.
+
+               You can also use |readdir()| if you need to do complicated
+               things, such as limiting the number of matches.
+
+               A name for a non-existing file is not included.  A symbolic
+               link is only included if it points to an existing file.
+               However, when the {alllinks} argument is present and it is
+               |TRUE| then all symbolic links are included.
+
+               For most systems backticks can be used to get files names from
+               any external command.  Example: >
+                       :let tagfiles = glob("`find . -name tags -print`")
+                       :let &tags = substitute(tagfiles, "\n", ",", "g")
+<              The result of the program inside the backticks should be one
+               item per line.  Spaces inside an item are allowed.
+
+               See |expand()| for expanding special Vim variables.  See
+               |system()| for getting the raw output of an external command.
+
+               Can also be used as a |method|: >
+                       GetExpr()->glob()
+
+glob2regpat({string})                                   *glob2regpat()*
+               Convert a file pattern, as used by glob(), into a search
+               pattern.  The result can be used to match with a string that
+               is a file name.  E.g. >
+                       if filename =~ glob2regpat('Make*.mak')
+<              This is equivalent to: >
+                       if filename =~ '^Make.*\.mak$'
+<              When {string} is an empty string the result is "^$", match an
+               empty string.
+               Note that the result depends on the system.  On MS-Windows
+               a backslash usually means a path separator.
+
+               Can also be used as a |method|: >
+                       GetExpr()->glob2regpat()
+<                                                              *globpath()*
+globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
+               Perform glob() for String {expr} on all directories in {path}
+               and concatenate the results.  Example: >
+                       :echo globpath(&rtp, "syntax/c.vim")
+<
+               {path} is a comma-separated list of directory names.  Each
+               directory name is prepended to {expr} and expanded like with
+               |glob()|.  A path separator is inserted when needed.
+               To add a comma inside a directory name escape it with a
+               backslash.  Note that on MS-Windows a directory may have a
+               trailing backslash, remove it if you put a comma after it.
+               If the expansion fails for one of the directories, there is no
+               error message.
+
+               Unless the optional {nosuf} argument is given and is |TRUE|,
+               the 'suffixes' and 'wildignore' options apply: Names matching
+               one of the patterns in 'wildignore' will be skipped and
+               'suffixes' affect the ordering of matches.
+
+               When {list} is present and it is |TRUE| the result is a |List|
+               with all matching files. The advantage of using a List is, you
+               also get filenames containing newlines correctly. Otherwise
+               the result is a String and when there are several matches,
+               they are separated by <NL> characters.  Example: >
+                       :echo globpath(&rtp, "syntax/c.vim", 0, 1)
+<
+               {alllinks} is used as with |glob()|.
+
+               The "**" item can be used to search in a directory tree.
+               For example, to find all "README.txt" files in the directories
+               in 'runtimepath' and below: >
+                       :echo globpath(&rtp, "**/README.txt")
+<              Upwards search and limiting the depth of "**" is not
+               supported, thus using 'path' will not always work properly.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetExpr()->globpath(&rtp)
+<
+                                                       *has()*
+has({feature} [, {check}])
+               When {check} is omitted or is zero: The result is a Number,
+               which is 1 if the feature {feature} is supported, zero
+               otherwise.  The {feature} argument is a string, case is
+               ignored.  See |feature-list| below.
+
+               When {check} is present and not zero: The result is a Number,
+               which is 1 if the feature {feature} could ever be supported,
+               zero otherwise.  This is useful to check for a typo in
+               {feature} and to detect dead code.  Keep in mind that an older
+               Vim version will not know about a feature added later and
+               features that have been abandoned will not be known by the
+               current Vim version.
+
+               Also see |exists()| and |exists_compiled()|.
+
+               Note that to skip code that has a syntax error when the
+               feature is not available, Vim may skip the rest of the line
+               and miss a following `endif`.  Therefore put the `endif` on a
+               separate line: >
+                       if has('feature')
+                         let x = this->breaks->without->the->feature
+                       endif
+<              If the `endif` would be moved to the second line as "| endif" it
+               would not be found.
+
+
+has_key({dict}, {key})                                 *has_key()*
+               The result is a Number, which is TRUE if |Dictionary| {dict}
+               has an entry with key {key}.  FALSE otherwise. The {key}
+               argument is a string.
+
+               Can also be used as a |method|: >
+                       mydict->has_key(key)
+
+haslocaldir([{winnr} [, {tabnr}]])                     *haslocaldir()*
+               The result is a Number:
+                   1   when the window has set a local directory via |:lcd|
+                   2   when the tab-page has set a local directory via |:tcd|
+                   0   otherwise.
+
+               Without arguments use the current window.
+               With {winnr} use this window in the current tab page.
+               With {winnr} and {tabnr} use the window in the specified tab
+               page.
+               {winnr} can be the window number or the |window-ID|.
+               If {winnr} is -1 it is ignored and only the tabpage is used.
+               Return 0 if the arguments are invalid.
+               Examples: >
+                       if haslocaldir() == 1
+                         " window local directory case
+                       elseif haslocaldir() == 2
+                         " tab-local directory case
+                       else
+                         " global directory case
+                       endif
+
+                       " current window
+                       :echo haslocaldir()
+                       :echo haslocaldir(0)
+                       :echo haslocaldir(0, 0)
+                       " window n in current tab page
+                       :echo haslocaldir(n)
+                       :echo haslocaldir(n, 0)
+                       " window n in tab page m
+                       :echo haslocaldir(n, m)
+                       " tab page m
+                       :echo haslocaldir(-1, m)
+<
+               Can also be used as a |method|: >
+                       GetWinnr()->haslocaldir()
+
+hasmapto({what} [, {mode} [, {abbr}]])                 *hasmapto()*
+               The result is a Number, which is TRUE if there is a mapping
+               that contains {what} in somewhere in the rhs (what it is
+               mapped to) and this mapping exists in one of the modes
+               indicated by {mode}.
+               The arguments {what} and {mode} are strings.
+               When {abbr} is there and it is |TRUE| use abbreviations
+               instead of mappings.  Don't forget to specify Insert and/or
+               Command-line mode.
+               Both the global mappings and the mappings local to the current
+               buffer are checked for a match.
+               If no matching mapping is found FALSE is returned.
+               The following characters are recognized in {mode}:
+                       n       Normal mode
+                       v       Visual and Select mode
+                       x       Visual mode
+                       s       Select mode
+                       o       Operator-pending mode
+                       i       Insert mode
+                       l       Language-Argument ("r", "f", "t", etc.)
+                       c       Command-line mode
+               When {mode} is omitted, "nvo" is used.
+
+               This function is useful to check if a mapping already exists
+               to a function in a Vim script.  Example: >
+                       :if !hasmapto('\ABCdoit')
+                       :   map <Leader>d \ABCdoit
+                       :endif
+<              This installs the mapping to "\ABCdoit" only if there isn't
+               already a mapping to "\ABCdoit".
+
+               Can also be used as a |method|: >
+                       GetRHS()->hasmapto()
+
+histadd({history}, {item})                             *histadd()*
+               Add the String {item} to the history {history} which can be
+               one of:                                 *hist-names*
+                       "cmd"    or ":"   command line history
+                       "search" or "/"   search pattern history
+                       "expr"   or "="   typed expression history
+                       "input"  or "@"   input line history
+                       "debug"  or ">"   debug command history
+                       empty             the current or last used history
+               The {history} string does not need to be the whole name, one
+               character is sufficient.
+               If {item} does already exist in the history, it will be
+               shifted to become the newest entry.
+               The result is a Number: TRUE if the operation was successful,
+               otherwise FALSE is returned.
+
+               Example: >
+                       :call histadd("input", strftime("%Y %b %d"))
+                       :let date=input("Enter date: ")
+<              This function is not available in the |sandbox|.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetHistory()->histadd('search')
+
+histdel({history} [, {item}])                          *histdel()*
+               Clear {history}, i.e. delete all its entries.  See |hist-names|
+               for the possible values of {history}.
+
+               If the parameter {item} evaluates to a String, it is used as a
+               regular expression.  All entries matching that expression will
+               be removed from the history (if there are any).
+               Upper/lowercase must match, unless "\c" is used |/\c|.
+               If {item} evaluates to a Number, it will be interpreted as
+               an index, see |:history-indexing|.  The respective entry will
+               be removed if it exists.
+
+               The result is TRUE for a successful operation, otherwise FALSE
+               is returned.
+
+               Examples:
+               Clear expression register history: >
+                       :call histdel("expr")
+<
+               Remove all entries starting with "*" from the search history: >
+                       :call histdel("/", '^\*')
+<
+               The following three are equivalent: >
+                       :call histdel("search", histnr("search"))
+                       :call histdel("search", -1)
+                       :call histdel("search", '^'.histget("search", -1).'$')
+<
+               To delete the last search pattern and use the last-but-one for
+               the "n" command and 'hlsearch': >
+                       :call histdel("search", -1)
+                       :let @/ = histget("search", -1)
+<
+               Can also be used as a |method|: >
+                       GetHistory()->histdel()
+
+histget({history} [, {index}])                         *histget()*
+               The result is a String, the entry with Number {index} from
+               {history}.  See |hist-names| for the possible values of
+               {history}, and |:history-indexing| for {index}.  If there is
+               no such entry, an empty String is returned.  When {index} is
+               omitted, the most recent item from the history is used.
+
+               Examples:
+               Redo the second last search from history. >
+                       :execute '/' . histget("search", -2)
+
+<              Define an Ex command ":H {num}" that supports re-execution of
+               the {num}th entry from the output of |:history|. >
+                       :command -nargs=1 H execute histget("cmd", 0+<args>)
+<
+               Can also be used as a |method|: >
+                       GetHistory()->histget()
+
+histnr({history})                                      *histnr()*
+               The result is the Number of the current entry in {history}.
+               See |hist-names| for the possible values of {history}.
+               If an error occurred, -1 is returned.
+
+               Example: >
+                       :let inp_index = histnr("expr")
+
+<              Can also be used as a |method|: >
+                       GetHistory()->histnr()
+<
+hlexists({name})                                       *hlexists()*
+               The result is a Number, which is TRUE if a highlight group
+               called {name} exists.  This is when the group has been
+               defined in some way.  Not necessarily when highlighting has
+               been defined for it, it may also have been used for a syntax
+               item.
+                                                       *highlight_exists()*
+               Obsolete name: highlight_exists().
+
+               Can also be used as a |method|: >
+                       GetName()->hlexists()
+<
+hlget([{name} [, {resolve}]])                          *hlget()*
+               Returns a List of all the highlight group attributes.  If the
+               optional {name} is specified, then returns a List with only
+               the attributes of the specified highlight group.  Returns an
+               empty List if the highlight group {name} is not present.
+
+               If the optional {resolve} argument is set to v:true and the
+               highlight group {name} is linked to another group, then the
+               link is resolved recursively and the attributes of the
+               resolved highlight group are returned.
+
+               Each entry in the returned List is a Dictionary with the
+               following items:
+                       cleared boolean flag, set to v:true if the highlight
+                               group attributes are cleared or not yet
+                               specified.  See |highlight-clear|.
+                       cterm   cterm attributes. See |highlight-cterm|.
+                       ctermbg cterm background color.
+                               See |highlight-ctermbg|.
+                       ctermfg cterm foreground color.
+                               See |highlight-ctermfg|.
+                       ctermul cterm underline color.  See |highlight-ctermul|.
+                       default boolean flag, set to v:true if the highlight
+                               group link is a default link. See
+                               |highlight-default|.
+                       font    highlight group font.  See |highlight-font|.
+                       gui     gui attributes. See |highlight-gui|.
+                       guibg   gui background color.  See |highlight-guibg|.
+                       guifg   gui foreground color.  See |highlight-guifg|.
+                       guisp   gui special color.  See |highlight-guisp|.
+                       id      highlight group ID.
+                       linksto linked highlight group name.
+                               See |:highlight-link|.
+                       name    highlight group name. See |group-name|.
+                       start   start terminal keycode.  See |highlight-start|.
+                       stop    stop terminal keycode.  See |highlight-stop|.
+                       term    term attributes.  See |highlight-term|.
+
+               The 'term', 'cterm' and 'gui' items in the above Dictionary
+               have a dictionary value with the following optional boolean
+               items: 'bold', 'standout', 'underline', 'undercurl', 'italic',
+               'reverse', 'inverse' and 'strikethrough'.
+
+               Example(s): >
+                       :echo hlget()
+                       :echo hlget('ModeMsg')
+                       :echo hlget('Number', v:true)
+<
+               Can also be used as a |method|: >
+                       GetName()->hlget()
+<
+hlset({list})                                          *hlset()*
+               Creates or modifies the attributes of a List of highlight
+               groups.  Each item in {list} is a dictionary containing the
+               attributes of a highlight group. See |hlget()| for the list of
+               supported items in this dictionary.
+
+               In addition to the items described in |hlget()|, the following
+               additional items are supported in the dictionary:
+
+                       force           boolean flag to force the creation of
+                                       a link for an existing highlight group
+                                       with attributes.
+
+               The highlight group is identified using the 'name' item and
+               the 'id' item (if supplied) is ignored.  If a highlight group
+               with a specified name doesn't exist, then it is created.
+               Otherwise the attributes of an existing highlight group are
+               modified.
+
+               If an empty dictionary value is used for the 'term' or 'cterm'
+               or 'gui' entries, then the corresponding attributes are
+               cleared.  If the 'cleared' item is set to v:true, then all the
+               attributes of the highlight group are cleared.
+
+               The 'linksto' item can be used to link a highlight group to
+               another highlight group.  See |:highlight-link|.
+
+               Returns zero for success, -1 for failure.
+
+               Example(s): >
+                       " add bold attribute to the Visual highlight group
+                       :call hlset([#{name: 'Visual',
+                                       \ term: #{reverse: 1 , bold: 1}}])
+                       :call hlset([#{name: 'Type', guifg: 'DarkGreen'}])
+                       :let l = hlget()
+                       :call hlset(l)
+                       " clear the Search highlight group
+                       :call hlset([#{name: 'Search', cleared: v:true}])
+                       " clear the 'term' attributes for a highlight group
+                       :call hlset([#{name: 'Title', term: {}}])
+                       " create the MyHlg group linking it to DiffAdd
+                       :call hlset([#{name: 'MyHlg', linksto: 'DiffAdd'}])
+                       " remove the MyHlg group link
+                       :call hlset([#{name: 'MyHlg', linksto: 'NONE'}])
+                       " clear the attributes and a link
+                       :call hlset([#{name: 'MyHlg', cleared: v:true,
+                                       \ linksto: 'NONE'}])
+<
+               Can also be used as a |method|: >
+                       GetAttrList()->hlset()
+<
+                                                       *hlID()*
+hlID({name})   The result is a Number, which is the ID of the highlight group
+               with name {name}.  When the highlight group doesn't exist,
+               zero is returned.
+               This can be used to retrieve information about the highlight
+               group.  For example, to get the background color of the
+               "Comment" group: >
+       :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
+<                                                      *highlightID()*
+               Obsolete name: highlightID().
+
+               Can also be used as a |method|: >
+                       GetName()->hlID()
+
+hostname()                                             *hostname()*
+               The result is a String, which is the name of the machine on
+               which Vim is currently running.  Machine names greater than
+               256 characters long are truncated.
+
+iconv({string}, {from}, {to})                          *iconv()*
+               The result is a String, which is the text {string} converted
+               from encoding {from} to encoding {to}.
+               When the conversion completely fails an empty string is
+               returned.  When some characters could not be converted they
+               are replaced with "?".
+               The encoding names are whatever the iconv() library function
+               can accept, see ":!man 3 iconv".
+               Most conversions require Vim to be compiled with the |+iconv|
+               feature.  Otherwise only UTF-8 to latin1 conversion and back
+               can be done.
+               This can be used to display messages with special characters,
+               no matter what 'encoding' is set to.  Write the message in
+               UTF-8 and use: >
+                       echo iconv(utf8_str, "utf-8", &enc)
+<              Note that Vim uses UTF-8 for all Unicode encodings, conversion
+               from/to UCS-2 is automatically changed to use UTF-8.  You
+               cannot use UCS-2 in a string anyway, because of the NUL bytes.
+
+               Can also be used as a |method|: >
+                       GetText()->iconv('latin1', 'utf-8')
+<
+                                                       *indent()*
+indent({lnum}) The result is a Number, which is indent of line {lnum} in the
+               current buffer.  The indent is counted in spaces, the value
+               of 'tabstop' is relevant.  {lnum} is used just like in
+               |getline()|.
+               When {lnum} is invalid -1 is returned.  In |Vim9| script an
+               error is given.
+
+               Can also be used as a |method|: >
+                       GetLnum()->indent()
+
+index({object}, {expr} [, {start} [, {ic}]])                   *index()*
+               If {object} is a |List| return the lowest index where the item
+               has a value equal to {expr}.  There is no automatic
+               conversion, so the String "4" is different from the Number 4.
+               And the number 4 is different from the Float 4.0.  The value
+               of 'ignorecase' is not used here, case always matters.
+
+               If {object} is |Blob| return the lowest index where the byte
+               value is equal to {expr}.
+
+               If {start} is given then start looking at the item with index
+               {start} (may be negative for an item relative to the end).
+               When {ic} is given and it is |TRUE|, ignore case.  Otherwise
+               case must match.
+               -1 is returned when {expr} is not found in {object}.
+               Example: >
+                       :let idx = index(words, "the")
+                       :if index(numbers, 123) >= 0
+
+<              Can also be used as a |method|: >
+                       GetObject()->index(what)
+
+input({prompt} [, {text} [, {completion}]])            *input()*
+               The result is a String, which is whatever the user typed on
+               the command-line.  The {prompt} argument is either a prompt
+               string, or a blank string (for no prompt).  A '\n' can be used
+               in the prompt to start a new line.
+               The highlighting set with |:echohl| is used for the prompt.
+               The input is entered just like a command-line, with the same
+               editing commands and mappings.  There is a separate history
+               for lines typed for input().
+               Example: >
+                       :if input("Coffee or beer? ") == "beer"
+                       :  echo "Cheers!"
+                       :endif
+<
+               If the optional {text} argument is present and not empty, this
+               is used for the default reply, as if the user typed this.
+               Example: >
+                       :let color = input("Color? ", "white")
+
+<              The optional {completion} argument specifies the type of
+               completion supported for the input.  Without it completion is
+               not performed.  The supported completion types are the same as
+               that can be supplied to a user-defined command using the
+               "-complete=" argument.  Refer to |:command-completion| for
+               more information.  Example: >
+                       let fname = input("File: ", "", "file")
+<
+               NOTE: This function must not be used in a startup file, for
+               the versions that only run in GUI mode (e.g., the Win32 GUI).
+               Note: When input() is called from within a mapping it will
+               consume remaining characters from that mapping, because a
+               mapping is handled like the characters were typed.
+               Use |inputsave()| before input() and |inputrestore()|
+               after input() to avoid that.  Another solution is to avoid
+               that further characters follow in the mapping, e.g., by using
+               |:execute| or |:normal|.
+
+               Example with a mapping: >
+                       :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
+                       :function GetFoo()
+                       :  call inputsave()
+                       :  let g:Foo = input("enter search pattern: ")
+                       :  call inputrestore()
+                       :endfunction
+
+<              Can also be used as a |method|: >
+                       GetPrompt()->input()
+
+inputdialog({prompt} [, {text} [, {cancelreturn}]])            *inputdialog()*
+               Like |input()|, but when the GUI is running and text dialogs
+               are supported, a dialog window pops up to input the text.
+               Example: >
+                  :let n = inputdialog("value for shiftwidth", shiftwidth())
+                  :if n != ""
+                  :  let &sw = n
+                  :endif
+<              When the dialog is cancelled {cancelreturn} is returned.  When
+               omitted an empty string is returned.
+               Hitting <Enter> works like pressing the OK button.  Hitting
+               <Esc> works like pressing the Cancel button.
+               NOTE: Command-line completion is not supported.
+
+               Can also be used as a |method|: >
+                       GetPrompt()->inputdialog()
+
+inputlist({textlist})                                  *inputlist()*
+               {textlist} must be a |List| of strings.  This |List| is
+               displayed, one string per line.  The user will be prompted to
+               enter a number, which is returned.
+               The user can also select an item by clicking on it with the
+               mouse, if the mouse is enabled in the command line ('mouse' is
+               "a" or includes "c").  For the first string 0 is returned.
+               When clicking above the first item a negative number is
+               returned.  When clicking on the prompt one more than the
+               length of {textlist} is returned.
+               Make sure {textlist} has less than 'lines' entries, otherwise
+               it won't work.  It's a good idea to put the entry number at
+               the start of the string.  And put a prompt in the first item.
+               Example: >
+                       let color = inputlist(['Select color:', '1. red',
+                               \ '2. green', '3. blue'])
+
+<              Can also be used as a |method|: >
+                       GetChoices()->inputlist()
+
+inputrestore()                                         *inputrestore()*
+               Restore typeahead that was saved with a previous |inputsave()|.
+               Should be called the same number of times inputsave() is
+               called.  Calling it more often is harmless though.
+               Returns TRUE when there is nothing to restore, FALSE otherwise.
+
+inputsave()                                            *inputsave()*
+               Preserve typeahead (also from mappings) and clear it, so that
+               a following prompt gets input from the user.  Should be
+               followed by a matching inputrestore() after the prompt.  Can
+               be used several times, in which case there must be just as
+               many inputrestore() calls.
+               Returns TRUE when out of memory, FALSE otherwise.
+
+inputsecret({prompt} [, {text}])                       *inputsecret()*
+               This function acts much like the |input()| function with but
+               two exceptions:
+               a) the user's response will be displayed as a sequence of
+               asterisks ("*") thereby keeping the entry secret, and
+               b) the user's response will not be recorded on the input
+               |history| stack.
+               The result is a String, which is whatever the user actually
+               typed on the command-line in response to the issued prompt.
+               NOTE: Command-line completion is not supported.
+
+               Can also be used as a |method|: >
+                       GetPrompt()->inputsecret()
+
+insert({object}, {item} [, {idx}])                     *insert()*
+               When {object} is a |List| or a |Blob| insert {item} at the start
+               of it.
+
+               If {idx} is specified insert {item} before the item with index
+               {idx}.  If {idx} is zero it goes before the first item, just
+               like omitting {idx}.  A negative {idx} is also possible, see
+               |list-index|.  -1 inserts just before the last item.
+
+               Returns the resulting |List| or |Blob|.  Examples: >
+                       :let mylist = insert([2, 3, 5], 1)
+                       :call insert(mylist, 4, -1)
+                       :call insert(mylist, 6, len(mylist))
+<              The last example can be done simpler with |add()|.
+               Note that when {item} is a |List| it is inserted as a single
+               item.  Use |extend()| to concatenate |Lists|.
+
+               Can also be used as a |method|: >
+                       mylist->insert(item)
+
+interrupt()                                            *interrupt()*
+               Interrupt script execution.  It works more or less like the
+               user typing CTRL-C, most commands won't execute and control
+               returns to the user.  This is useful to abort execution
+               from lower down, e.g. in an autocommand.  Example: >
+               :function s:check_typoname(file)
+               :   if fnamemodify(a:file, ':t') == '['
+               :       echomsg 'Maybe typo'
+               :       call interrupt()
+               :   endif
+               :endfunction
+               :au BufWritePre * call s:check_typoname(expand('<amatch>'))
+
+invert({expr})                                         *invert()*
+               Bitwise invert.  The argument is converted to a number.  A
+               List, Dict or Float argument causes an error.  Example: >
+                       :let bits = invert(bits)
+<              Can also be used as a |method|: >
+                       :let bits = bits->invert()
+
+isdirectory({directory})                               *isdirectory()*
+               The result is a Number, which is |TRUE| when a directory
+               with the name {directory} exists.  If {directory} doesn't
+               exist, or isn't a directory, the result is |FALSE|.  {directory}
+               is any expression, which is used as a String.
+
+               Can also be used as a |method|: >
+                       GetName()->isdirectory()
+
+isinf({expr})                                          *isinf()*
+               Return 1 if {expr} is a positive infinity, or -1 a negative
+               infinity, otherwise 0. >
+                       :echo isinf(1.0 / 0.0)
+<                      1 >
+                       :echo isinf(-1.0 / 0.0)
+<                      -1
+
+               Can also be used as a |method|: >
+                       Compute()->isinf()
+<
+               {only available when compiled with the |+float| feature}
+
+islocked({expr})                                       *islocked()* *E786*
+               The result is a Number, which is |TRUE| when {expr} is the
+               name of a locked variable.
+               The string argument {expr} must be the name of a variable,
+               |List| item or |Dictionary| entry, not the variable itself!
+               Example: >
+                       :let alist = [0, ['a', 'b'], 2, 3]
+                       :lockvar 1 alist
+                       :echo islocked('alist')         " 1
+                       :echo islocked('alist[1]')      " 0
+
+<              When {expr} is a variable that does not exist you get an error
+               message.  Use |exists()| to check for existence.
+               In Vim9 script it does not work for local variables.
+
+               Can also be used as a |method|: >
+                       GetName()->islocked()
+
+isnan({expr})                                          *isnan()*
+               Return |TRUE| if {expr} is a float with value NaN. >
+                       echo isnan(0.0 / 0.0)
+<                      1
+
+               Can also be used as a |method|: >
+                       Compute()->isnan()
+<
+               {only available when compiled with the |+float| feature}
+
+items({dict})                                          *items()*
+               Return a |List| with all the key-value pairs of {dict}.  Each
+               |List| item is a list with two items: the key of a {dict}
+               entry and the value of this entry.  The |List| is in arbitrary
+               order.  Also see |keys()| and |values()|.
+               Example: >
+                       for [key, value] in items(mydict)
+                          echo key . ': ' . value
+                       endfor
+
+<              Can also be used as a |method|: >
+                       mydict->items()
+
+job_ functions are documented here: |job-functions-details|
+
+
+join({list} [, {sep}])                                 *join()*
+               Join the items in {list} together into one String.
+               When {sep} is specified it is put in between the items.  If
+               {sep} is omitted a single space is used.
+               Note that {sep} is not added at the end.  You might want to
+               add it there too: >
+                       let lines = join(mylist, "\n") . "\n"
+<              String items are used as-is.  |Lists| and |Dictionaries| are
+               converted into a string like with |string()|.
+               The opposite function is |split()|.
+
+               Can also be used as a |method|: >
+                       mylist->join()
+
+js_decode({string})                                    *js_decode()*
+               This is similar to |json_decode()| with these differences:
+               - Object key names do not have to be in quotes.
+               - Strings can be in single quotes.
+               - Empty items in an array (between two commas) are allowed and
+                 result in v:none items.
+
+               Can also be used as a |method|: >
+                       ReadObject()->js_decode()
+
+js_encode({expr})                                      *js_encode()*
+               This is similar to |json_encode()| with these differences:
+               - Object key names are not in quotes.
+               - v:none items in an array result in an empty item between
+                 commas.
+               For example, the Vim object:
+                       [1,v:none,{"one":1},v:none] ~
+               Will be encoded as:
+                       [1,,{one:1},,] ~
+               While json_encode() would produce:
+                       [1,null,{"one":1},null] ~
+               This encoding is valid for JavaScript. It is more efficient
+               than JSON, especially when using an array with optional items.
+
+               Can also be used as a |method|: >
+                       GetObject()->js_encode()
+
+json_decode({string})                                  *json_decode()*
+               This parses a JSON formatted string and returns the equivalent
+               in Vim values.  See |json_encode()| for the relation between
+               JSON and Vim values.
+               The decoding is permissive:
+               - A trailing comma in an array and object is ignored, e.g.
+                 "[1, 2, ]" is the same as "[1, 2]".
+               - Integer keys are accepted in objects, e.g. {1:2} is the
+                 same as {"1":2}.
+               - More floating point numbers are recognized, e.g. "1." for
+                 "1.0", or "001.2" for "1.2". Special floating point values
+                 "Infinity", "-Infinity" and "NaN" (capitalization ignored)
+                 are accepted.
+               - Leading zeroes in integer numbers are ignored, e.g. "012"
+                 for "12" or "-012" for "-12".
+               - Capitalization is ignored in literal names null, true or
+                 false, e.g. "NULL" for "null", "True" for "true".
+               - Control characters U+0000 through U+001F which are not
+                 escaped in strings are accepted, e.g. "       " (tab
+                 character in string) for "\t".
+               - An empty JSON expression or made of only spaces is accepted
+                 and results in v:none.
+               - Backslash in an invalid 2-character sequence escape is
+                 ignored, e.g. "\a" is decoded as "a".
+               - A correct surrogate pair in JSON strings should normally be
+                 a 12 character sequence such as "\uD834\uDD1E", but
+                 json_decode() silently accepts truncated surrogate pairs
+                 such as "\uD834" or "\uD834\u"
+                                                               *E938*
+               A duplicate key in an object, valid in rfc7159, is not
+               accepted by json_decode() as the result must be a valid Vim
+               type, e.g. this fails: {"a":"b", "a":"c"}
+
+               Can also be used as a |method|: >
+                       ReadObject()->json_decode()
+
+json_encode({expr})                                    *json_encode()*
+               Encode {expr} as JSON and return this as a string.
+               The encoding is specified in:
+               https://tools.ietf.org/html/rfc7159.html
+               Vim values are converted as follows:
+                  |Number|             decimal number
+                  |Float|              floating point number
+                  Float nan            "NaN"
+                  Float inf            "Infinity"
+                  Float -inf           "-Infinity"
+                  |String|             in double quotes (possibly null)
+                  |Funcref|            not possible, error
+                  |List|               as an array (possibly null); when
+                                       used recursively: []
+                  |Dict|               as an object (possibly null); when
+                                       used recursively: {}
+                  |Blob|               as an array of the individual bytes
+                  v:false              "false"
+                  v:true               "true"
+                  v:none               "null"
+                  v:null               "null"
+               Note that NaN and Infinity are passed on as values.  This is
+               missing in the JSON standard, but several implementations do
+               allow it.  If not then you will get an error.
+
+               Can also be used as a |method|: >
+                       GetObject()->json_encode()
+
+keys({dict})                                           *keys()*
+               Return a |List| with all the keys of {dict}.  The |List| is in
+               arbitrary order.  Also see |items()| and |values()|.
+
+               Can also be used as a |method|: >
+                       mydict->keys()
+
+<                                                      *len()* *E701*
+len({expr})    The result is a Number, which is the length of the argument.
+               When {expr} is a String or a Number the length in bytes is
+               used, as with |strlen()|.
+               When {expr} is a |List| the number of items in the |List| is
+               returned.
+               When {expr} is a |Blob| the number of bytes is returned.
+               When {expr} is a |Dictionary| the number of entries in the
+               |Dictionary| is returned.
+               Otherwise an error is given.
+
+               Can also be used as a |method|: >
+                       mylist->len()
+
+<                                              *libcall()* *E364* *E368*
+libcall({libname}, {funcname}, {argument})
+               Call function {funcname} in the run-time library {libname}
+               with single argument {argument}.
+               This is useful to call functions in a library that you
+               especially made to be used with Vim.  Since only one argument
+               is possible, calling standard library functions is rather
+               limited.
+               The result is the String returned by the function.  If the
+               function returns NULL, this will appear as an empty string ""
+               to Vim.
+               If the function returns a number, use libcallnr()!
+               If {argument} is a number, it is passed to the function as an
+               int; if {argument} is a string, it is passed as a
+               null-terminated string.
+               This function will fail in |restricted-mode|.
+
+               libcall() allows you to write your own 'plug-in' extensions to
+               Vim without having to recompile the program.  It is NOT a
+               means to call system functions!  If you try to do so Vim will
+               very probably crash.
+
+               For Win32, the functions you write must be placed in a DLL
+               and use the normal C calling convention (NOT Pascal which is
+               used in Windows System DLLs).  The function must take exactly
+               one parameter, either a character pointer or a long integer,
+               and must return a character pointer or NULL.  The character
+               pointer returned must point to memory that will remain valid
+               after the function has returned (e.g. in static data in the
+               DLL).  If it points to allocated memory, that memory will
+               leak away.  Using a static buffer in the function should work,
+               it's then freed when the DLL is unloaded.
+
+               WARNING: If the function returns a non-valid pointer, Vim may
+               crash!  This also happens if the function returns a number,
+               because Vim thinks it's a pointer.
+               For Win32 systems, {libname} should be the filename of the DLL
+               without the ".DLL" suffix.  A full path is only required if
+               the DLL is not in the usual places.
+               For Unix: When compiling your own plugins, remember that the
+               object code must be compiled as position-independent ('PIC').
+               {only in Win32 and some Unix versions, when the |+libcall|
+               feature is present}
+               Examples: >
+                       :echo libcall("libc.so", "getenv", "HOME")
+
+<              Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetValue()->libcall("libc.so", "getenv")
+<
+                                                       *libcallnr()*
+libcallnr({libname}, {funcname}, {argument})
+               Just like |libcall()|, but used for a function that returns an
+               int instead of a string.
+               {only in Win32 on some Unix versions, when the |+libcall|
+               feature is present}
+               Examples: >
+                       :echo libcallnr("/usr/lib/libc.so", "getpid", "")
+                       :call libcallnr("libc.so", "printf", "Hello World!\n")
+                       :call libcallnr("libc.so", "sleep", 10)
+<
+               Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetValue()->libcallnr("libc.so", "printf")
+<
+
+line({expr} [, {winid}])                               *line()*
+               The result is a Number, which is the line number of the file
+               position given with {expr}.  The {expr} argument is a string.
+               The accepted positions are:
+                   .       the cursor position
+                   $       the last line in the current buffer
+                   'x      position of mark x (if the mark is not set, 0 is
+                           returned)
+                   w0      first line visible in current window (one if the
+                           display isn't updated, e.g. in silent Ex mode)
+                   w$      last line visible in current window (this is one
+                           less than "w0" if no lines are visible)
+                   v       In Visual mode: the start of the Visual area (the
+                           cursor is the end).  When not in Visual mode
+                           returns the cursor position.  Differs from |'<| in
+                           that it's updated right away.
+               Note that a mark in another file can be used.  The line number
+               then applies to another buffer.
+               To get the column number use |col()|.  To get both use
+               |getpos()|.
+               With the optional {winid} argument the values are obtained for
+               that window instead of the current window.
+               Examples: >
+                       line(".")               line number of the cursor
+                       line(".", winid)        idem, in window "winid"
+                       line("'t")              line number of mark t
+                       line("'" . marker)      line number of mark marker
+<
+               To jump to the last known position when opening a file see
+               |last-position-jump|.
+
+               Can also be used as a |method|: >
+                       GetValue()->line()
+
+line2byte({lnum})                                      *line2byte()*
+               Return the byte count from the start of the buffer for line
+               {lnum}.  This includes the end-of-line character, depending on
+               the 'fileformat' option for the current buffer.  The first
+               line returns 1. 'encoding' matters, 'fileencoding' is ignored.
+               This can also be used to get the byte count for the line just
+               below the last line: >
+                       line2byte(line("$") + 1)
+<              This is the buffer size plus one.  If 'fileencoding' is empty
+               it is the file size plus one.  {lnum} is used like with
+               |getline()|.  When {lnum} is invalid, or the |+byte_offset|
+               feature has been disabled at compile time, -1 is returned.
+               Also see |byte2line()|, |go| and |:goto|.
+
+               Can also be used as a |method|: >
+                       GetLnum()->line2byte()
+
+lispindent({lnum})                                     *lispindent()*
+               Get the amount of indent for line {lnum} according the lisp
+               indenting rules, as with 'lisp'.
+               The indent is counted in spaces, the value of 'tabstop' is
+               relevant.  {lnum} is used just like in |getline()|.
+               When {lnum} is invalid or Vim was not compiled the
+               |+lispindent| feature, -1 is returned.  In |Vim9| script an
+               error is given.
+
+               Can also be used as a |method|: >
+                       GetLnum()->lispindent()
+
+list2blob({list})                                      *list2blob()*
+               Return a Blob concatenating all the number values in {list}.
+               Examples: >
+                       list2blob([1, 2, 3, 4]) returns 0z01020304
+                       list2blob([])           returns 0z
+<              Returns an empty Blob on error.  If one of the numbers is
+               negative or more than 255 error *E1239* is given.
+
+               |blob2list()| does the opposite.
+
+               Can also be used as a |method|: >
+                       GetList()->list2blob()
+
+list2str({list} [, {utf8}])                            *list2str()*
+               Convert each number in {list} to a character string can
+               concatenate them all.  Examples: >
+                       list2str([32])          returns " "
+                       list2str([65, 66, 67])  returns "ABC"
+<              The same can be done (slowly) with: >
+                       join(map(list, {nr, val -> nr2char(val)}), '')
+<              |str2list()| does the opposite.
+
+               When {utf8} is omitted or zero, the current 'encoding' is used.
+               When {utf8} is TRUE, always return UTF-8 characters.
+               With UTF-8 composing characters work as expected: >
+                       list2str([97, 769])     returns "á"
+<
+               Can also be used as a |method|: >
+                       GetList()->list2str()
+
+listener_add({callback} [, {buf}])                     *listener_add()*
+               Add a callback function that will be invoked when changes have
+               been made to buffer {buf}.
+               {buf} refers to a buffer name or number. For the accepted
+               values, see |bufname()|.  When {buf} is omitted the current
+               buffer is used.
+               Returns a unique ID that can be passed to |listener_remove()|.
+
+               The {callback} is invoked with five arguments:
+                   a:bufnr     the buffer that was changed
+                   a:start     first changed line number
+                   a:end       first line number below the change
+                   a:added     number of lines added, negative if lines were
+                               deleted
+                   a:changes   a List of items with details about the changes
+
+               Example: >
+           func Listener(bufnr, start, end, added, changes)
+             echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed'
+           endfunc
+           call listener_add('Listener', bufnr)
+
+<              The List cannot be changed.  Each item in a:changes is a
+               dictionary with these entries:
+                   lnum        the first line number of the change
+                   end         the first line below the change
+                   added       number of lines added; negative if lines were
+                               deleted
+                   col         first column in "lnum" that was affected by
+                               the change; one if unknown or the whole line
+                               was affected; this is a byte index, first
+                               character has a value of one.
+               When lines are inserted the values are:
+                   lnum        line above which the new line is added
+                   end         equal to "lnum"
+                   added       number of lines inserted
+                   col         1
+               When lines are deleted the values are:
+                   lnum        the first deleted line
+                   end         the line below the first deleted line, before
+                               the deletion was done
+                   added       negative, number of lines deleted
+                   col         1
+               When lines are changed:
+                   lnum        the first changed line
+                   end         the line below the last changed line
+                   added       0
+                   col         first column with a change or 1
+
+               The entries are in the order the changes were made, thus the
+               most recent change is at the end.  The line numbers are valid
+               when the callback is invoked, but later changes may make them
+               invalid, thus keeping a copy for later might not work.
+
+               The {callback} is invoked just before the screen is updated,
+               when |listener_flush()| is called or when a change is being
+               made that changes the line count in a way it causes a line
+               number in the list of changes to become invalid.
+
+               The {callback} is invoked with the text locked, see
+               |textlock|.  If you do need to make changes to the buffer, use
+               a timer to do this later |timer_start()|.
+
+               The {callback} is not invoked when the buffer is first loaded.
+               Use the |BufReadPost| autocmd event to handle the initial text
+               of a buffer.
+               The {callback} is also not invoked when the buffer is
+               unloaded, use the |BufUnload| autocmd event for that.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetBuffer()->listener_add(callback)
+
+listener_flush([{buf}])                                        *listener_flush()*
+               Invoke listener callbacks for buffer {buf}.  If there are no
+               pending changes then no callbacks are invoked.
+
+               {buf} refers to a buffer name or number. For the accepted
+               values, see |bufname()|.  When {buf} is omitted the current
+               buffer is used.
+
+               Can also be used as a |method|: >
+                       GetBuffer()->listener_flush()
+
+listener_remove({id})                                  *listener_remove()*
+               Remove a listener previously added with listener_add().
+               Returns FALSE when {id} could not be found, TRUE when {id} was
+               removed.
+
+               Can also be used as a |method|: >
+                       GetListenerId()->listener_remove()
+
+localtime()                                            *localtime()*
+               Return the current time, measured as seconds since 1st Jan
+               1970.  See also |strftime()|, |strptime()| and |getftime()|.
+
+
+log({expr})                                            *log()*
+               Return the natural logarithm (base e) of {expr} as a |Float|.
+               {expr} must evaluate to a |Float| or a |Number| in the range
+               (0, inf].
+               Examples: >
+                       :echo log(10)
+<                      2.302585 >
+                       :echo log(exp(5))
+<                      5.0
+
+               Can also be used as a |method|: >
+                       Compute()->log()
+<
+               {only available when compiled with the |+float| feature}
+
+
+log10({expr})                                          *log10()*
+               Return the logarithm of Float {expr} to base 10 as a |Float|.
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo log10(1000)
+<                      3.0 >
+                       :echo log10(0.01)
+<                      -2.0
+
+               Can also be used as a |method|: >
+                       Compute()->log10()
+<
+               {only available when compiled with the |+float| feature}
+
+luaeval({expr} [, {expr}])                                     *luaeval()*
+               Evaluate Lua expression {expr} and return its result converted
+               to Vim data structures. Second {expr} may hold additional
+               argument accessible as _A inside first {expr}.
+               Strings are returned as they are.
+               Boolean objects are converted to numbers.
+               Numbers are converted to |Float| values if vim was compiled
+               with |+float| and to numbers otherwise.
+               Dictionaries and lists obtained by vim.eval() are returned
+               as-is.
+               Other objects are returned as zero without any errors.
+               See |lua-luaeval| for more details.
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetExpr()->luaeval()
+
+<              {only available when compiled with the |+lua| feature}
+
+map({expr1}, {expr2})                                  *map()*
+               {expr1} must be a |List|, |String|, |Blob| or |Dictionary|.
+               When {expr1} is a |List|| or |Dictionary|, replace each
+               item in {expr1} with the result of evaluating {expr2}.
+               For a |Blob| each byte is replaced.
+               For a |String|, each character, including composing
+               characters, is replaced.
+               If the item type changes you may want to use |mapnew()| to
+               create a new List or Dictionary.  This is required when using
+               Vim9 script.
+
+               {expr2} must be a |String| or |Funcref|.
+
+               If {expr2} is a |String|, inside {expr2} |v:val| has the value
+               of the current item.  For a |Dictionary| |v:key| has the key
+               of the current item and for a |List| |v:key| has the index of
+               the current item.  For a |Blob| |v:key| has the index of the
+               current byte. For a |String| |v:key| has the index of the
+               current character.
+               Example: >
+                       :call map(mylist, '"> " . v:val . " <"')
+<              This puts "> " before and " <" after each item in "mylist".
+
+               Note that {expr2} is the result of an expression and is then
+               used as an expression again.  Often it is good to use a
+               |literal-string| to avoid having to double backslashes.  You
+               still have to double ' quotes
+
+               If {expr2} is a |Funcref| it is called with two arguments:
+                       1. The key or the index of the current item.
+                       2. the value of the current item.
+               The function must return the new value of the item. Example
+               that changes each value by "key-value": >
+                       func KeyValue(key, val)
+                         return a:key . '-' . a:val
+                       endfunc
+                       call map(myDict, function('KeyValue'))
+<              It is shorter when using a |lambda|: >
+                       call map(myDict, {key, val -> key . '-' . val})
+<              If you do not use "val" you can leave it out: >
+                       call map(myDict, {key -> 'item: ' . key})
+<              If you do not use "key" you can use a short name: >
+                       call map(myDict, {_, val -> 'item: ' . val})
+<
+               The operation is done in-place for a |List| and |Dictionary|.
+               If you want it to remain unmodified make a copy first: >
+                       :let tlist = map(copy(mylist), ' v:val . "\t"')
+
+<              Returns {expr1}, the |List| or |Dictionary| that was filtered,
+               or a new |Blob| or |String|.
+               When an error is encountered while evaluating {expr2} no
+               further items in {expr1} are processed.
+               When {expr2} is a Funcref errors inside a function are ignored,
+               unless it was defined with the "abort" flag.
+
+               Can also be used as a |method|: >
+                       mylist->map(expr2)
+
+
+maparg({name} [, {mode} [, {abbr} [, {dict}]]])                        *maparg()*
+               When {dict} is omitted or zero: Return the rhs of mapping
+               {name} in mode {mode}.  The returned String has special
+               characters translated like in the output of the ":map" command
+               listing.
+
+               When there is no mapping for {name}, an empty String is
+               returned.  When the mapping for {name} is empty, then "<Nop>"
+               is returned.
+
+               The {name} can have special key names, like in the ":map"
+               command.
+
+               {mode} can be one of these strings:
+                       "n"     Normal
+                       "v"     Visual (including Select)
+                       "o"     Operator-pending
+                       "i"     Insert
+                       "c"     Cmd-line
+                       "s"     Select
+                       "x"     Visual
+                       "l"     langmap |language-mapping|
+                       "t"     Terminal-Job
+                       ""      Normal, Visual and Operator-pending
+               When {mode} is omitted, the modes for "" are used.
+
+               When {abbr} is there and it is |TRUE| use abbreviations
+               instead of mappings.
+
+               When {dict} is there and it is |TRUE| return a dictionary
+               containing all the information of the mapping with the
+               following items:
+                 "lhs"      The {lhs} of the mapping as it would be typed
+                 "lhsraw"   The {lhs} of the mapping as raw bytes
+                 "lhsrawalt" The {lhs} of the mapping as raw bytes, alternate
+                             form, only present when it differs from "lhsraw"
+                 "rhs"      The {rhs} of the mapping as typed.
+                 "silent"   1 for a |:map-silent| mapping, else 0.
+                 "noremap"  1 if the {rhs} of the mapping is not remappable.
+                 "script"   1 if mapping was defined with <script>.
+                 "expr"     1 for an expression mapping (|:map-<expr>|).
+                 "buffer"   1 for a buffer local mapping (|:map-local|).
+                 "mode"     Modes for which the mapping is defined. In
+                            addition to the modes mentioned above, these
+                            characters will be used:
+                            " "     Normal, Visual and Operator-pending
+                            "!"     Insert and Commandline mode
+                                    (|mapmode-ic|)
+                 "sid"      The script local ID, used for <sid> mappings
+                            (|<SID>|).
+                 "lnum"     The line number in "sid", zero if unknown.
+                 "nowait"   Do not wait for other, longer mappings.
+                            (|:map-<nowait>|).
+
+               The dictionary can be used to restore a mapping with
+               |mapset()|.
+
+               The mappings local to the current buffer are checked first,
+               then the global mappings.
+               This function can be used to map a key even when it's already
+               mapped, and have it do the original mapping too.  Sketch: >
+                       exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
+
+<              Can also be used as a |method|: >
+                       GetKey()->maparg('n')
+
+mapcheck({name} [, {mode} [, {abbr}]])                 *mapcheck()*
+               Check if there is a mapping that matches with {name} in mode
+               {mode}.  See |maparg()| for {mode} and special names in
+               {name}.
+               When {abbr} is there and it is |TRUE| use abbreviations
+               instead of mappings.
+               A match happens with a mapping that starts with {name} and
+               with a mapping which is equal to the start of {name}.
+
+                       matches mapping "a"     "ab"    "abc" ~
+                  mapcheck("a")        yes     yes      yes
+                  mapcheck("abc")      yes     yes      yes
+                  mapcheck("ax")       yes     no       no
+                  mapcheck("b")        no      no       no
+
+               The difference with maparg() is that mapcheck() finds a
+               mapping that matches with {name}, while maparg() only finds a
+               mapping for {name} exactly.
+               When there is no mapping that starts with {name}, an empty
+               String is returned.  If there is one, the RHS of that mapping
+               is returned.  If there are several mappings that start with
+               {name}, the RHS of one of them is returned.  This will be
+               "<Nop>" if the RHS is empty.
+               The mappings local to the current buffer are checked first,
+               then the global mappings.
+               This function can be used to check if a mapping can be added
+               without being ambiguous.  Example: >
+       :if mapcheck("_vv") == ""
+       :   map _vv :set guifont=7x13<CR>
+       :endif
+<              This avoids adding the "_vv" mapping when there already is a
+               mapping for "_v" or for "_vvv".
+
+               Can also be used as a |method|: >
+                       GetKey()->mapcheck('n')
+
+
+mapnew({expr1}, {expr2})                                       *mapnew()*
+               Like |map()| but instead of replacing items in {expr1} a new
+               List or Dictionary is created and returned.  {expr1} remains
+               unchanged.  Items can still be changed by {expr2}, if you
+               don't want that use |deepcopy()| first.
+
+
+mapset({mode}, {abbr}, {dict})                                 *mapset()*
+               Restore a mapping from a dictionary returned by |maparg()|.
+               {mode} and {abbr} should be the same as for the call to
+               |maparg()|. *E460*
+               {mode} is used to define the mode in which the mapping is set,
+               not the "mode" entry in {dict}.
+               Example for saving and restoring a mapping: >
+                       let save_map = maparg('K', 'n', 0, 1)
+                       nnoremap K somethingelse
+                       ...
+                       call mapset('n', 0, save_map)
+<              Note that if you are going to replace a map in several modes,
+               e.g. with `:map!`, you need to save the mapping for all of
+               them, since they can differ.
+
+
+match({expr}, {pat} [, {start} [, {count}]])                   *match()*
+               When {expr} is a |List| then this returns the index of the
+               first item where {pat} matches.  Each item is used as a
+               String, |Lists| and |Dictionaries| are used as echoed.
+
+               Otherwise, {expr} is used as a String.  The result is a
+               Number, which gives the index (byte offset) in {expr} where
+               {pat} matches.
+
+               A match at the first character or |List| item returns zero.
+               If there is no match -1 is returned.
+
+               For getting submatches see |matchlist()|.
+               Example: >
+                       :echo match("testing", "ing")   " results in 4
+                       :echo match([1, 'x'], '\a')     " results in 1
+<              See |string-match| for how {pat} is used.
+                                                               *strpbrk()*
+               Vim doesn't have a strpbrk() function.  But you can do: >
+                       :let sepidx = match(line, '[.,;: \t]')
+<                                                              *strcasestr()*
+               Vim doesn't have a strcasestr() function.  But you can add
+               "\c" to the pattern to ignore case: >
+                       :let idx = match(haystack, '\cneedle')
+<
+               If {start} is given, the search starts from byte index
+               {start} in a String or item {start} in a |List|.
+               The result, however, is still the index counted from the
+               first character/item.  Example: >
+                       :echo match("testing", "ing", 2)
+<              result is again "4". >
+                       :echo match("testing", "ing", 4)
+<              result is again "4". >
+                       :echo match("testing", "t", 2)
+<              result is "3".
+               For a String, if {start} > 0 then it is like the string starts
+               {start} bytes later, thus "^" will match at {start}.  Except
+               when {count} is given, then it's like matches before the
+               {start} byte are ignored (this is a bit complicated to keep it
+               backwards compatible).
+               For a String, if {start} < 0, it will be set to 0.  For a list
+               the index is counted from the end.
+               If {start} is out of range ({start} > strlen({expr}) for a
+               String or {start} > len({expr}) for a |List|) -1 is returned.
+
+               When {count} is given use the {count}'th match.  When a match
+               is found in a String the search for the next one starts one
+               character further.  Thus this example results in 1: >
+                       echo match("testing", "..", 0, 2)
+<              In a |List| the search continues in the next item.
+               Note that when {count} is added the way {start} works changes,
+               see above.
+
+               See |pattern| for the patterns that are accepted.
+               The 'ignorecase' option is used to set the ignore-caseness of
+               the pattern.  'smartcase' is NOT used.  The matching is always
+               done like 'magic' is set and 'cpoptions' is empty.
+               Note that a match at the start is preferred, thus when the
+               pattern is using "*" (any number of matches) it tends to find
+               zero matches at the start instead of a number of matches
+               further down in the text.
+
+               Can also be used as a |method|: >
+                       GetText()->match('word')
+                       GetList()->match('word')
+<
+                               *matchadd()* *E798* *E799* *E801* *E957*
+matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
+               Defines a pattern to be highlighted in the current window (a
+               "match").  It will be highlighted with {group}.  Returns an
+               identification number (ID), which can be used to delete the
+               match using |matchdelete()|.  The ID is bound to the window.
+               Matching is case sensitive and magic, unless case sensitivity
+               or magicness are explicitly overridden in {pattern}.  The
+               'magic', 'smartcase' and 'ignorecase' options are not used.
+               The "Conceal" value is special, it causes the match to be
+               concealed.
+
+               The optional {priority} argument assigns a priority to the
+               match.  A match with a high priority will have its
+               highlighting overrule that of a match with a lower priority.
+               A priority is specified as an integer (negative numbers are no
+               exception).  If the {priority} argument is not specified, the
+               default priority is 10.  The priority of 'hlsearch' is zero,
+               hence all matches with a priority greater than zero will
+               overrule it.  Syntax highlighting (see 'syntax') is a separate
+               mechanism, and regardless of the chosen priority a match will
+               always overrule syntax highlighting.
+
+               The optional {id} argument allows the request for a specific
+               match ID.  If a specified ID is already taken, an error
+               message will appear and the match will not be added.  An ID
+               is specified as a positive integer (zero excluded).  IDs 1, 2
+               and 3 are reserved for |:match|, |:2match| and |:3match|,
+               respectively.  If the {id} argument is not specified or -1,
+               |matchadd()| automatically chooses a free ID.
+
+               The optional {dict} argument allows for further custom
+               values. Currently this is used to specify a match specific
+               conceal character that will be shown for |hl-Conceal|
+               highlighted matches. The dict can have the following members:
+
+                       conceal     Special character to show instead of the
+                                   match (only for |hl-Conceal| highlighted
+                                   matches, see |:syn-cchar|)
+                       window      Instead of the current window use the
+                                   window with this number or window ID.
+
+               The number of matches is not limited, as it is the case with
+               the |:match| commands.
+
+               Example: >
+                       :highlight MyGroup ctermbg=green guibg=green
+                       :let m = matchadd("MyGroup", "TODO")
+<              Deletion of the pattern: >
+                       :call matchdelete(m)
+
+<              A list of matches defined by |matchadd()| and |:match| are
+               available from |getmatches()|.  All matches can be deleted in
+               one operation by |clearmatches()|.
+
+               Can also be used as a |method|: >
+                       GetGroup()->matchadd('TODO')
+<
+                                                       *matchaddpos()*
+matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
+               Same as |matchadd()|, but requires a list of positions {pos}
+               instead of a pattern. This command is faster than |matchadd()|
+               because it does not require to handle regular expressions and
+               sets buffer line boundaries to redraw screen. It is supposed
+               to be used when fast match additions and deletions are
+               required, for example to highlight matching parentheses.
+
+               {pos} is a list of positions.  Each position can be one of
+               these:
+               - A number.  This whole line will be highlighted.  The first
+                 line has number 1.
+               - A list with one number, e.g., [23]. The whole line with this
+                 number will be highlighted.
+               - A list with two numbers, e.g., [23, 11]. The first number is
+                 the line number, the second one is the column number (first
+                 column is 1, the value must correspond to the byte index as
+                 |col()| would return).  The character at this position will
+                 be highlighted.
+               - A list with three numbers, e.g., [23, 11, 3]. As above, but
+                 the third number gives the length of the highlight in bytes.
+
+               The maximum number of positions in {pos} is 8.
+
+               Example: >
+                       :highlight MyGroup ctermbg=green guibg=green
+                       :let m = matchaddpos("MyGroup", [[23, 24], 34])
+<              Deletion of the pattern: >
+                       :call matchdelete(m)
+
+<              Matches added by |matchaddpos()| are returned by
+               |getmatches()|.
+
+               Can also be used as a |method|: >
+                       GetGroup()->matchaddpos([23, 11])
+
+matcharg({nr})                                                 *matcharg()*
+               Selects the {nr} match item, as set with a |:match|,
+               |:2match| or |:3match| command.
+               Return a |List| with two elements:
+                       The name of the highlight group used
+                       The pattern used.
+               When {nr} is not 1, 2 or 3 returns an empty |List|.
+               When there is no match item set returns ['', ''].
+               This is useful to save and restore a |:match|.
+               Highlighting matches using the |:match| commands are limited
+               to three matches. |matchadd()| does not have this limitation.
+
+               Can also be used as a |method|: >
+                       GetMatch()->matcharg()
+
+matchdelete({id} [, {win})                    *matchdelete()* *E802* *E803*
+               Deletes a match with ID {id} previously defined by |matchadd()|
+               or one of the |:match| commands.  Returns 0 if successful,
+               otherwise -1.  See example for |matchadd()|.  All matches can
+               be deleted in one operation by |clearmatches()|.
+               If {win} is specified, use the window with this number or
+               window ID instead of the current window.
+
+               Can also be used as a |method|: >
+                       GetMatch()->matchdelete()
+
+matchend({expr}, {pat} [, {start} [, {count}]])                        *matchend()*
+               Same as |match()|, but return the index of first character
+               after the match.  Example: >
+                       :echo matchend("testing", "ing")
+<              results in "7".
+                                                       *strspn()* *strcspn()*
+               Vim doesn't have a strspn() or strcspn() function, but you can
+               do it with matchend(): >
+                       :let span = matchend(line, '[a-zA-Z]')
+                       :let span = matchend(line, '[^a-zA-Z]')
+<              Except that -1 is returned when there are no matches.
+
+               The {start}, if given, has the same meaning as for |match()|. >
+                       :echo matchend("testing", "ing", 2)
+<              results in "7". >
+                       :echo matchend("testing", "ing", 5)
+<              result is "-1".
+               When {expr} is a |List| the result is equal to |match()|.
+
+               Can also be used as a |method|: >
+                       GetText()->matchend('word')
+
+
+matchfuzzy({list}, {str} [, {dict}])                   *matchfuzzy()*
+               If {list} is a list of strings, then returns a |List| with all
+               the strings in {list} that fuzzy match {str}. The strings in
+               the returned list are sorted based on the matching score.
+
+               The optional {dict} argument always supports the following
+               items:
+                   matchseq    When this item is present and {str} contains
+                               multiple words separated by white space, then
+                               returns only matches that contain the words in
+                               the given sequence.
+
+               If {list} is a list of dictionaries, then the optional {dict}
+               argument supports the following additional items:
+                   key         key of the item which is fuzzy matched against
+                               {str}. The value of this item should be a
+                               string.
+                   text_cb     |Funcref| that will be called for every item
+                               in {list} to get the text for fuzzy matching.
+                               This should accept a dictionary item as the
+                               argument and return the text for that item to
+                               use for fuzzy matching.
+
+               {str} is treated as a literal string and regular expression
+               matching is NOT supported.  The maximum supported {str} length
+               is 256.
+
+               When {str} has multiple words each separated by white space,
+               then the list of strings that have all the words is returned.
+
+               If there are no matching strings or there is an error, then an
+               empty list is returned. If length of {str} is greater than
+               256, then returns an empty list.
+
+               Refer to |fuzzy-match| for more information about fuzzy
+               matching strings.
+
+               Example: >
+                  :echo matchfuzzy(["clay", "crow"], "cay")
+<              results in ["clay"]. >
+                  :echo getbufinfo()->map({_, v -> v.name})->matchfuzzy("ndl")
+<              results in a list of buffer names fuzzy matching "ndl". >
+                  :echo getbufinfo()->matchfuzzy("ndl", {'key' : 'name'})
+<              results in a list of buffer information dicts with buffer
+               names fuzzy matching "ndl". >
+                  :echo getbufinfo()->matchfuzzy("spl",
+                                               \ {'text_cb' : {v -> v.name}})
+<              results in a list of buffer information dicts with buffer
+               names fuzzy matching "spl". >
+                  :echo v:oldfiles->matchfuzzy("test")
+<              results in a list of file names fuzzy matching "test". >
+                  :let l = readfile("buffer.c")->matchfuzzy("str")
+<              results in a list of lines in "buffer.c" fuzzy matching "str". >
+                  :echo ['one two', 'two one']->matchfuzzy('two one')
+<              results in ['two one', 'one two']. >
+                  :echo ['one two', 'two one']->matchfuzzy('two one',
+                                               \ {'matchseq': 1})
+<              results in ['two one'].
+
+matchfuzzypos({list}, {str} [, {dict}])                        *matchfuzzypos()*
+               Same as |matchfuzzy()|, but returns the list of matched
+               strings, the list of character positions where characters
+               in {str} matches and a list of matching scores.  You can
+               use |byteidx()| to convert a character position to a byte
+               position.
+
+               If {str} matches multiple times in a string, then only the
+               positions for the best match is returned.
+
+               If there are no matching strings or there is an error, then a
+               list with three empty list items is returned.
+
+               Example: >
+                       :echo matchfuzzypos(['testing'], 'tsg')
+<              results in [['testing'], [[0, 2, 6]], [99]] >
+                       :echo matchfuzzypos(['clay', 'lacy'], 'la')
+<              results in [['lacy', 'clay'], [[0, 1], [1, 2]], [153, 133]] >
+                       :echo [{'text': 'hello', 'id' : 10}]->matchfuzzypos('ll', {'key' : 'text'})
+<              results in [[{'id': 10, 'text': 'hello'}], [[2, 3]], [127]]
+
+matchlist({expr}, {pat} [, {start} [, {count}]])               *matchlist()*
+               Same as |match()|, but return a |List|.  The first item in the
+               list is the matched string, same as what matchstr() would
+               return.  Following items are submatches, like "\1", "\2", etc.
+               in |:substitute|.  When an optional submatch didn't match an
+               empty string is used.  Example: >
+                       echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
+<              Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
+               When there is no match an empty list is returned.
+
+               You can pass in a List, but that is not very useful.
+
+               Can also be used as a |method|: >
+                       GetText()->matchlist('word')
+
+matchstr({expr}, {pat} [, {start} [, {count}]])                        *matchstr()*
+               Same as |match()|, but return the matched string.  Example: >
+                       :echo matchstr("testing", "ing")
+<              results in "ing".
+               When there is no match "" is returned.
+               The {start}, if given, has the same meaning as for |match()|. >
+                       :echo matchstr("testing", "ing", 2)
+<              results in "ing". >
+                       :echo matchstr("testing", "ing", 5)
+<              result is "".
+               When {expr} is a |List| then the matching item is returned.
+               The type isn't changed, it's not necessarily a String.
+
+               Can also be used as a |method|: >
+                       GetText()->matchstr('word')
+
+matchstrpos({expr}, {pat} [, {start} [, {count}]])             *matchstrpos()*
+               Same as |matchstr()|, but return the matched string, the start
+               position and the end position of the match.  Example: >
+                       :echo matchstrpos("testing", "ing")
+<              results in ["ing", 4, 7].
+               When there is no match ["", -1, -1] is returned.
+               The {start}, if given, has the same meaning as for |match()|. >
+                       :echo matchstrpos("testing", "ing", 2)
+<              results in ["ing", 4, 7]. >
+                       :echo matchstrpos("testing", "ing", 5)
+<              result is ["", -1, -1].
+               When {expr} is a |List| then the matching item, the index
+               of first item where {pat} matches, the start position and the
+               end position of the match are returned. >
+                       :echo matchstrpos([1, '__x'], '\a')
+<              result is ["x", 1, 2, 3].
+               The type isn't changed, it's not necessarily a String.
+
+               Can also be used as a |method|: >
+                       GetText()->matchstrpos('word')
+<
+
+                                                       *max()*
+max({expr})    Return the maximum value of all items in {expr}. Example: >
+                       echo max([apples, pears, oranges])
+
+<              {expr} can be a |List| or a |Dictionary|.  For a Dictionary,
+               it returns the maximum of all values in the Dictionary.
+               If {expr} is neither a List nor a Dictionary, or one of the
+               items in {expr} cannot be used as a Number this results in
+               an error.  An empty |List| or |Dictionary| results in zero.
+
+               Can also be used as a |method|: >
+                       mylist->max()
+
+
+menu_info({name} [, {mode}])                           *menu_info()*
+               Return information about the specified menu {name} in
+               mode {mode}. The menu name should be specified without the
+               shortcut character ('&'). If {name} is "", then the top-level
+               menu names are returned.
+
+               {mode} can be one of these strings:
+                       "n"     Normal
+                       "v"     Visual (including Select)
+                       "o"     Operator-pending
+                       "i"     Insert
+                       "c"     Cmd-line
+                       "s"     Select
+                       "x"     Visual
+                       "t"     Terminal-Job
+                       ""      Normal, Visual and Operator-pending
+                       "!"     Insert and Cmd-line
+               When {mode} is omitted, the modes for "" are used.
+
+               Returns a |Dictionary| containing the following items:
+                 accel         menu item accelerator text |menu-text|
+                 display       display name (name without '&')
+                 enabled       v:true if this menu item is enabled
+                               Refer to |:menu-enable|
+                 icon          name of the icon file (for toolbar)
+                               |toolbar-icon|
+                 iconidx       index of a built-in icon
+                 modes         modes for which the menu is defined. In
+                               addition to the modes mentioned above, these
+                               characters will be used:
+                               " "     Normal, Visual and Operator-pending
+                 name          menu item name.
+                 noremenu      v:true if the {rhs} of the menu item is not
+                               remappable else v:false.
+                 priority      menu order priority |menu-priority|
+                 rhs           right-hand-side of the menu item. The returned
+                               string has special characters translated like
+                               in the output of the ":menu" command listing.
+                               When the {rhs} of a menu item is empty, then
+                               "<Nop>" is returned.
+                 script        v:true if script-local remapping of {rhs} is
+                               allowed else v:false.  See |:menu-script|.
+                 shortcut      shortcut key (character after '&' in
+                               the menu name) |menu-shortcut|
+                 silent        v:true if the menu item is created
+                               with <silent> argument |:menu-silent|
+                 submenus      |List| containing the names of
+                               all the submenus.  Present only if the menu
+                               item has submenus.
+
+               Returns an empty dictionary if the menu item is not found.
+
+               Examples: >
+                       :echo menu_info('Edit.Cut')
+                       :echo menu_info('File.Save', 'n')
+
+                       " Display the entire menu hierarchy in a buffer
+                       func ShowMenu(name, pfx)
+                         let m = menu_info(a:name)
+                         call append(line('$'), a:pfx .. m.display)
+                         for child in m->get('submenus', [])
+                           call ShowMenu(a:name .. '.' .. escape(child, '.'),
+                                                       \ a:pfx .. '    ')
+                         endfor
+                       endfunc
+                       new
+                       for topmenu in menu_info('').submenus
+                         call ShowMenu(topmenu, '')
+                       endfor
+<
+               Can also be used as a |method|: >
+                       GetMenuName()->menu_info('v')
+
+
+<                                                      *min()*
+min({expr})    Return the minimum value of all items in {expr}. Example:  >
+                       echo min([apples, pears, oranges])
+
+<              {expr} can be a |List| or a |Dictionary|.  For a Dictionary,
+               it returns the minimum of all values in the Dictionary.
+               If {expr} is neither a List nor a Dictionary, or one of the
+               items in {expr} cannot be used as a Number this results in
+               an error.  An empty |List| or |Dictionary| results in zero.
+
+               Can also be used as a |method|: >
+                       mylist->min()
+
+<                                                      *mkdir()* *E739*
+mkdir({name} [, {path} [, {prot}]])
+               Create directory {name}.
+
+               If {path} is "p" then intermediate directories are created as
+               necessary.  Otherwise it must be "".
+
+               If {prot} is given it is used to set the protection bits of
+               the new directory.  The default is 0o755 (rwxr-xr-x: r/w for
+               the user, readable for others).  Use 0o700 to make it
+               unreadable for others.  This is only used for the last part of
+               {name}.  Thus if you create /tmp/foo/bar then /tmp/foo will be
+               created with 0o755.
+               Example: >
+                       :call mkdir($HOME . "/tmp/foo/bar", "p", 0o700)
+
+<              This function is not available in the |sandbox|.
+
+               There is no error if the directory already exists and the "p"
+               flag is passed (since patch 8.0.1708).  However, without the
+               "p" option the call will fail.
+
+               The function result is a Number, which is TRUE if the call was
+               successful or FALSE if the directory creation failed or partly
+               failed.
+
+               Not available on all systems.  To check use: >
+                       :if exists("*mkdir")
+
+<              Can also be used as a |method|: >
+                       GetName()->mkdir()
+<
+                                                       *mode()*
+mode([expr])   Return a string that indicates the current mode.
+               If [expr] is supplied and it evaluates to a non-zero Number or
+               a non-empty String (|non-zero-arg|), then the full mode is
+               returned, otherwise only the first letter is returned.
+               Also see |state()|.
+
+                  n        Normal
+                  no       Operator-pending
+                  nov      Operator-pending (forced characterwise |o_v|)
+                  noV      Operator-pending (forced linewise |o_V|)
+                  noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|);
+                               CTRL-V is one character
+                  niI      Normal using |i_CTRL-O| in |Insert-mode|
+                  niR      Normal using |i_CTRL-O| in |Replace-mode|
+                  niV      Normal using |i_CTRL-O| in |Virtual-Replace-mode|
+                  nt       Terminal-Normal (insert goes to Terminal-Job mode)
+                  v        Visual by character
+                  vs       Visual by character using |v_CTRL-O| in Select mode
+                  V        Visual by line
+                  Vs       Visual by line using |v_CTRL-O| in Select mode
+                  CTRL-V   Visual blockwise
+                  CTRL-Vs  Visual blockwise using |v_CTRL-O| in Select mode
+                  s        Select by character
+                  S        Select by line
+                  CTRL-S   Select blockwise
+                  i        Insert
+                  ic       Insert mode completion |compl-generic|
+                  ix       Insert mode |i_CTRL-X| completion
+                  R        Replace |R|
+                  Rc       Replace mode completion |compl-generic|
+                  Rx       Replace mode |i_CTRL-X| completion
+                  Rv       Virtual Replace |gR|
+                  Rvc      Virtual Replace mode completion |compl-generic|
+                  Rvx      Virtual Replace mode |i_CTRL-X| completion
+                  c        Command-line editing
+                  cv       Vim Ex mode |gQ|
+                  ce       Normal Ex mode |Q|
+                  r        Hit-enter prompt
+                  rm       The -- more -- prompt
+                  r?       A |:confirm| query of some sort
+                  !        Shell or external command is executing
+                  t        Terminal-Job mode: keys go to the job
+
+               This is useful in the 'statusline' option or when used
+               with |remote_expr()| In most other places it always returns
+               "c" or "n".
+               Note that in the future more modes and more specific modes may
+               be added. It's better not to compare the whole string but only
+               the leading character(s).
+               Also see |visualmode()|.
+
+               Can also be used as a |method|: >
+                       DoFull()->mode()
+
+mzeval({expr})                                                 *mzeval()*
+               Evaluate MzScheme expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers and strings are returned as they are.
+               Pairs (including lists and improper lists) and vectors are
+               returned as Vim |Lists|.
+               Hash tables are represented as Vim |Dictionary| type with keys
+               converted to strings.
+               All other types are converted to string with display function.
+               Examples: >
+                   :mz (define l (list 1 2 3))
+                   :mz (define h (make-hash)) (hash-set! h "list" l)
+                   :echo mzeval("l")
+                   :echo mzeval("h")
+<
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetExpr()->mzeval()
+<
+               {only available when compiled with the |+mzscheme| feature}
+
+nextnonblank({lnum})                                   *nextnonblank()*
+               Return the line number of the first line at or below {lnum}
+               that is not blank.  Example: >
+                       if getline(nextnonblank(1)) =~ "Java"
+<              When {lnum} is invalid or there is no non-blank line at or
+               below it, zero is returned.
+               {lnum} is used like with |getline()|.
+               See also |prevnonblank()|.
+
+               Can also be used as a |method|: >
+                       GetLnum()->nextnonblank()
+
+nr2char({expr} [, {utf8}])                             *nr2char()*
+               Return a string with a single character, which has the number
+               value {expr}.  Examples: >
+                       nr2char(64)             returns "@"
+                       nr2char(32)             returns " "
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
+                       nr2char(300)            returns I with bow character
+<              When {utf8} is TRUE, always return UTF-8 characters.
+               Note that a NUL character in the file is specified with
+               nr2char(10), because NULs are represented with newline
+               characters.  nr2char(0) is a real NUL and terminates the
+               string, thus results in an empty string.
+               To turn a list of character numbers into a string: >
+                   let list = [65, 66, 67]
+                   let str = join(map(list, {_, val -> nr2char(val)}), '')
+<              Result: "ABC"
+
+               Can also be used as a |method|: >
+                       GetNumber()->nr2char()
+
+or({expr}, {expr})                                     *or()*
+               Bitwise OR on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let bits = or(bits, 0x80)
+<              Can also be used as a |method|: >
+                       :let bits = bits->or(0x80)
+
+
+pathshorten({path} [, {len}])                          *pathshorten()*
+               Shorten directory names in the path {path} and return the
+               result.  The tail, the file name, is kept as-is.  The other
+               components in the path are reduced to {len} letters in length.
+               If {len} is omitted or smaller than 1 then 1 is used (single
+               letters).  Leading '~' and '.' characters are kept.  Examples: >
+                       :echo pathshorten('~/.vim/autoload/myfile.vim')
+<                      ~/.v/a/myfile.vim ~
+>
+                       :echo pathshorten('~/.vim/autoload/myfile.vim', 2)
+<                      ~/.vi/au/myfile.vim ~
+               It doesn't matter if the path exists or not.
+
+               Can also be used as a |method|: >
+                       GetDirectories()->pathshorten()
+
+perleval({expr})                                       *perleval()*
+               Evaluate Perl expression {expr} in scalar context and return
+               its result converted to Vim data structures. If value can't be
+               converted, it is returned as a string Perl representation.
+               Note: If you want an array or hash, {expr} must return a
+               reference to it.
+               Example: >
+                       :echo perleval('[1 .. 4]')
+<                      [1, 2, 3, 4]
+
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetExpr()->perleval()
+
+<              {only available when compiled with the |+perl| feature}
+
+
+popup_ functions are documented here: |popup-functions|
+
+
+pow({x}, {y})                                          *pow()*
+               Return the power of {x} to the exponent {y} as a |Float|.
+               {x} and {y} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo pow(3, 3)
+<                      27.0 >
+                       :echo pow(2, 16)
+<                      65536.0 >
+                       :echo pow(32, 0.20)
+<                      2.0
+
+               Can also be used as a |method|: >
+                       Compute()->pow(3)
+<
+               {only available when compiled with the |+float| feature}
+
+prevnonblank({lnum})                                   *prevnonblank()*
+               Return the line number of the first line at or above {lnum}
+               that is not blank.  Example: >
+                       let ind = indent(prevnonblank(v:lnum - 1))
+<              When {lnum} is invalid or there is no non-blank line at or
+               above it, zero is returned.
+               {lnum} is used like with |getline()|.
+               Also see |nextnonblank()|.
+
+               Can also be used as a |method|: >
+                       GetLnum()->prevnonblank()
+
+printf({fmt}, {expr1} ...)                             *printf()*
+               Return a String with {fmt}, where "%" items are replaced by
+               the formatted form of their respective arguments.  Example: >
+                       printf("%4d: E%d %.30s", lnum, errno, msg)
+<              May result in:
+                       "  99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
+
+               When used as a |method| the base is passed as the second
+               argument: >
+                       Compute()->printf("result: %d")
+
+<              Often used items are:
+                 %s    string
+                 %6S   string right-aligned in 6 display cells
+                 %6s   string right-aligned in 6 bytes
+                 %.9s  string truncated to 9 bytes
+                 %c    single byte
+                 %d    decimal number
+                 %5d   decimal number padded with spaces to 5 characters
+                 %x    hex number
+                 %04x  hex number padded with zeros to at least 4 characters
+                 %X    hex number using upper case letters
+                 %o    octal number
+                 %08b  binary number padded with zeros to at least 8 chars
+                 %f    floating point number as 12.23, inf, -inf or nan
+                 %F    floating point number as 12.23, INF, -INF or NAN
+                 %e    floating point number as 1.23e3, inf, -inf or nan
+                 %E    floating point number as 1.23E3, INF, -INF or NAN
+                 %g    floating point number, as %f or %e depending on value
+                 %G    floating point number, as %F or %E depending on value
+                 %%    the % character itself
+
+               Conversion specifications start with '%' and end with the
+               conversion type.  All other characters are copied unchanged to
+               the result.
+
+               The "%" starts a conversion specification.  The following
+               arguments appear in sequence:
+
+                       %  [flags]  [field-width]  [.precision]  type
+
+               flags
+                       Zero or more of the following flags:
+
+                   #         The value should be converted to an "alternate
+                             form".  For c, d, and s conversions, this option
+                             has no effect.  For o conversions, the precision
+                             of the number is increased to force the first
+                             character of the output string to a zero (except
+                             if a zero value is printed with an explicit
+                             precision of zero).
+                             For b and B conversions, a non-zero result has
+                             the string "0b" (or "0B" for B conversions)
+                             prepended to it.
+                             For x and X conversions, a non-zero result has
+                             the string "0x" (or "0X" for X conversions)
+                             prepended to it.
+
+                   0 (zero)  Zero padding.  For all conversions the converted
+                             value is padded on the left with zeros rather
+                             than blanks.  If a precision is given with a
+                             numeric conversion (d, b, B, o, x, and X), the 0
+                             flag is ignored.
+
+                   -         A negative field width flag; the converted value
+                             is to be left adjusted on the field boundary.
+                             The converted value is padded on the right with
+                             blanks, rather than on the left with blanks or
+                             zeros.  A - overrides a 0 if both are given.
+
+                   ' ' (space)  A blank should be left before a positive
+                             number produced by a signed conversion (d).
+
+                   +         A sign must always be placed before a number
+                             produced by a signed conversion.  A + overrides
+                             a space if both are used.
+
+               field-width
+                       An optional decimal digit string specifying a minimum
+                       field width.  If the converted value has fewer bytes
+                       than the field width, it will be padded with spaces on
+                       the left (or right, if the left-adjustment flag has
+                       been given) to fill out the field width.  For the S
+                       conversion the count is in cells.
+
+               .precision
+                       An optional precision, in the form of a period '.'
+                       followed by an optional digit string.  If the digit
+                       string is omitted, the precision is taken as zero.
+                       This gives the minimum number of digits to appear for
+                       d, o, x, and X conversions, the maximum number of
+                       bytes to be printed from a string for s conversions,
+                       or the maximum number of cells to be printed from a
+                       string for S conversions.
+                       For floating point it is the number of digits after
+                       the decimal point.
+
+               type
+                       A character that specifies the type of conversion to
+                       be applied, see below.
+
+               A field width or precision, or both, may be indicated by an
+               asterisk '*' instead of a digit string.  In this case, a
+               Number argument supplies the field width or precision.  A
+               negative field width is treated as a left adjustment flag
+               followed by a positive field width; a negative precision is
+               treated as though it were missing.  Example: >
+                       :echo printf("%d: %.*s", nr, width, line)
+<              This limits the length of the text used from "line" to
+               "width" bytes.
+
+               The conversion specifiers and their meanings are:
+
+                               *printf-d* *printf-b* *printf-B* *printf-o*
+                               *printf-x* *printf-X*
+               dbBoxX  The Number argument is converted to signed decimal
+                       (d), unsigned binary (b and B), unsigned octal (o), or
+                       unsigned hexadecimal (x and X) notation.  The letters
+                       "abcdef" are used for x conversions; the letters
+                       "ABCDEF" are used for X conversions.
+                       The precision, if any, gives the minimum number of
+                       digits that must appear; if the converted value
+                       requires fewer digits, it is padded on the left with
+                       zeros.
+                       In no case does a non-existent or small field width
+                       cause truncation of a numeric field; if the result of
+                       a conversion is wider than the field width, the field
+                       is expanded to contain the conversion result.
+                       The 'h' modifier indicates the argument is 16 bits.
+                       The 'l' modifier indicates the argument is 32 bits.
+                       The 'L' modifier indicates the argument is 64 bits.
+                       Generally, these modifiers are not useful. They are
+                       ignored when type is known from the argument.
+
+               i       alias for d
+               D       alias for ld
+               U       alias for lu
+               O       alias for lo
+
+                                                       *printf-c*
+               c       The Number argument is converted to a byte, and the
+                       resulting character is written.
+
+                                                       *printf-s*
+               s       The text of the String argument is used.  If a
+                       precision is specified, no more bytes than the number
+                       specified are used.
+                       If the argument is not a String type, it is
+                       automatically converted to text with the same format
+                       as ":echo".
+                                                       *printf-S*
+               S       The text of the String argument is used.  If a
+                       precision is specified, no more display cells than the
+                       number specified are used.
+
+                                                       *printf-f* *E807*
+               f F     The Float argument is converted into a string of the
+                       form 123.456.  The precision specifies the number of
+                       digits after the decimal point.  When the precision is
+                       zero the decimal point is omitted.  When the precision
+                       is not specified 6 is used.  A really big number
+                       (out of range or dividing by zero) results in "inf"
+                       or "-inf" with %f (INF or -INF with %F).
+                       "0.0 / 0.0" results in "nan" with %f (NAN with %F).
+                       Example: >
+                               echo printf("%.2f", 12.115)
+<                              12.12
+                       Note that roundoff depends on the system libraries.
+                       Use |round()| when in doubt.
+
+                                                       *printf-e* *printf-E*
+               e E     The Float argument is converted into a string of the
+                       form 1.234e+03 or 1.234E+03 when using 'E'.  The
+                       precision specifies the number of digits after the
+                       decimal point, like with 'f'.
+
+                                                       *printf-g* *printf-G*
+               g G     The Float argument is converted like with 'f' if the
+                       value is between 0.001 (inclusive) and 10000000.0
+                       (exclusive).  Otherwise 'e' is used for 'g' and 'E'
+                       for 'G'.  When no precision is specified superfluous
+                       zeroes and '+' signs are removed, except for the zero
+                       immediately after the decimal point.  Thus 10000000.0
+                       results in 1.0e7.
+
+                                                       *printf-%*
+               %       A '%' is written.  No argument is converted.  The
+                       complete conversion specification is "%%".
+
+               When a Number argument is expected a String argument is also
+               accepted and automatically converted.
+               When a Float or String argument is expected a Number argument
+               is also accepted and automatically converted.
+               Any other argument type results in an error message.
+
+                                                       *E766* *E767*
+               The number of {exprN} arguments must exactly match the number
+               of "%" items.  If there are not sufficient or too many
+               arguments an error is given.  Up to 18 arguments can be used.
+
+
+prompt_getprompt({buf})                                        *prompt_getprompt()*
+               Returns the effective prompt text for buffer {buf}.  {buf} can
+               be a buffer name or number.  See |prompt-buffer|.
+
+               If the buffer doesn't exist or isn't a prompt buffer, an empty
+               string is returned.
+
+               Can also be used as a |method|: >
+                       GetBuffer()->prompt_getprompt()
+
+<              {only available when compiled with the |+channel| feature}
+
+
+prompt_setcallback({buf}, {expr})                      *prompt_setcallback()*
+               Set prompt callback for buffer {buf} to {expr}.  When {expr}
+               is an empty string the callback is removed.  This has only
+               effect if {buf} has 'buftype' set to "prompt".
+
+               The callback is invoked when pressing Enter.  The current
+               buffer will always be the prompt buffer.  A new line for a
+               prompt is added before invoking the callback, thus the prompt
+               for which the callback was invoked will be in the last but one
+               line.
+               If the callback wants to add text to the buffer, it must
+               insert it above the last line, since that is where the current
+               prompt is.  This can also be done asynchronously.
+               The callback is invoked with one argument, which is the text
+               that was entered at the prompt.  This can be an empty string
+               if the user only typed Enter.
+               Example: >
+                  call prompt_setcallback(bufnr(), function('s:TextEntered'))
+                  func s:TextEntered(text)
+                    if a:text == 'exit' || a:text == 'quit'
+                      stopinsert
+                      close
+                    else
+                      call append(line('$') - 1, 'Entered: "' . a:text . '"')
+                      " Reset 'modified' to allow the buffer to be closed.
+                      set nomodified
+                    endif
+                  endfunc
+
+<              Can also be used as a |method|: >
+                       GetBuffer()->prompt_setcallback(callback)
+
+<              {only available when compiled with the |+channel| feature}
+
+prompt_setinterrupt({buf}, {expr})                     *prompt_setinterrupt()*
+               Set a callback for buffer {buf} to {expr}.  When {expr} is an
+               empty string the callback is removed.  This has only effect if
+               {buf} has 'buftype' set to "prompt".
+
+               This callback will be invoked when pressing CTRL-C in Insert
+               mode.  Without setting a callback Vim will exit Insert mode,
+               as in any buffer.
+
+               Can also be used as a |method|: >
+                       GetBuffer()->prompt_setinterrupt(callback)
+
+<              {only available when compiled with the |+channel| feature}
+
+prompt_setprompt({buf}, {text})                                *prompt_setprompt()*
+               Set prompt for buffer {buf} to {text}.  You most likely want
+               {text} to end in a space.
+               The result is only visible if {buf} has 'buftype' set to
+               "prompt".  Example: >
+                       call prompt_setprompt(bufnr(), 'command: ')
+<
+               Can also be used as a |method|: >
+                       GetBuffer()->prompt_setprompt('command: ')
+
+<              {only available when compiled with the |+channel| feature}
+
+prop_ functions are documented here: |text-prop-functions|
+
+pum_getpos()                                           *pum_getpos()*
+               If the popup menu (see |ins-completion-menu|) is not visible,
+               returns an empty |Dictionary|, otherwise, returns a
+               |Dictionary| with the following keys:
+                       height          nr of items visible
+                       width           screen cells
+                       row             top screen row (0 first row)
+                       col             leftmost screen column (0 first col)
+                       size            total nr of items
+                       scrollbar       |TRUE| if scrollbar is visible
+
+               The values are the same as in |v:event| during
+               |CompleteChanged|.
+
+pumvisible()                                           *pumvisible()*
+               Returns non-zero when the popup menu is visible, zero
+               otherwise.  See |ins-completion-menu|.
+               This can be used to avoid some things that would remove the
+               popup menu.
+
+py3eval({expr})                                                *py3eval()*
+               Evaluate Python expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers and strings are returned as they are (strings are
+               copied though, Unicode strings are additionally converted to
+               'encoding').
+               Lists are represented as Vim |List| type.
+               Dictionaries are represented as Vim |Dictionary| type with
+               keys converted to strings.
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetExpr()->py3eval()
+
+<              {only available when compiled with the |+python3| feature}
+
+                                                       *E858* *E859*
+pyeval({expr})                                         *pyeval()*
+               Evaluate Python expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers and strings are returned as they are (strings are
+               copied though).
+               Lists are represented as Vim |List| type.
+               Dictionaries are represented as Vim |Dictionary| type,
+               non-string keys result in error.
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetExpr()->pyeval()
+
+<              {only available when compiled with the |+python| feature}
+
+pyxeval({expr})                                                *pyxeval()*
+               Evaluate Python expression {expr} and return its result
+               converted to Vim data structures.
+               Uses Python 2 or 3, see |python_x| and 'pyxversion'.
+               See also: |pyeval()|, |py3eval()|
+
+               Can also be used as a |method|: >
+                       GetExpr()->pyxeval()
+
+<              {only available when compiled with the |+python| or the
+               |+python3| feature}
+
+rand([{expr}])                                         *rand()* *random*
+               Return a pseudo-random Number generated with an xoshiro128**
+               algorithm using seed {expr}.  The returned number is 32 bits,
+               also on 64 bits systems, for consistency.
+               {expr} can be initialized by |srand()| and will be updated by
+               rand().  If {expr} is omitted, an internal seed value is used
+               and updated.
+
+               Examples: >
+                       :echo rand()
+                       :let seed = srand()
+                       :echo rand(seed)
+                       :echo rand(seed) % 16  " random number 0 - 15
+<
+
+                                                       *E726* *E727*
+range({expr} [, {max} [, {stride}]])                           *range()*
+               Returns a |List| with Numbers:
+               - If only {expr} is specified: [0, 1, ..., {expr} - 1]
+               - If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
+               - If {stride} is specified: [{expr}, {expr} + {stride}, ...,
+                 {max}] (increasing {expr} with {stride} each time, not
+                 producing a value past {max}).
+               When the maximum is one before the start the result is an
+               empty list.  When the maximum is more than one before the
+               start this is an error.
+               Examples: >
+                       range(4)                " [0, 1, 2, 3]
+                       range(2, 4)             " [2, 3, 4]
+                       range(2, 9, 3)          " [2, 5, 8]
+                       range(2, -2, -1)        " [2, 1, 0, -1, -2]
+                       range(0)                " []
+                       range(2, 0)             " error!
+<
+               Can also be used as a |method|: >
+                       GetExpr()->range()
+<
+
+readblob({fname})                                      *readblob()*
+               Read file {fname} in binary mode and return a |Blob|.
+               When the file can't be opened an error message is given and
+               the result is an empty |Blob|.
+               Also see |readfile()| and |writefile()|.
+
+
+readdir({directory} [, {expr} [, {dict}]])                     *readdir()*
+               Return a list with file and directory names in {directory}.
+               You can also use |glob()| if you don't need to do complicated
+               things, such as limiting the number of matches.
+               The list will be sorted (case sensitive), see the {dict}
+               argument below for changing the sort order.
+
+               When {expr} is omitted all entries are included.
+               When {expr} is given, it is evaluated to check what to do:
+                       If {expr} results in -1 then no further entries will
+                       be handled.
+                       If {expr} results in 0 then this entry will not be
+                       added to the list.
+                       If {expr} results in 1 then this entry will be added
+                       to the list.
+               The entries "." and ".." are always excluded.
+               Each time {expr} is evaluated |v:val| is set to the entry name.
+               When {expr} is a function the name is passed as the argument.
+               For example, to get a list of files ending in ".txt": >
+                 readdir(dirname, {n -> n =~ '.txt$'})
+<              To skip hidden and backup files: >
+                 readdir(dirname, {n -> n !~ '^\.\|\~$'})
+
+<              The optional {dict} argument allows for further custom
+               values. Currently this is used to specify if and how sorting
+               should be performed. The dict can have the following members:
+
+                   sort    How to sort the result returned from the system.
+                           Valid values are:
+                               "none"      do not sort (fastest method)
+                               "case"      sort case sensitive (byte value of
+                                           each character, technically, using
+                                           strcmp()) (default)
+                               "icase"     sort case insensitive (technically
+                                           using strcasecmp())
+                               "collate"   sort using the collation order
+                                           of the "POSIX" or "C" |locale|
+                                           (technically using strcoll())
+                           Other values are silently ignored.
+
+               For example, to get a list of all files in the current
+               directory without sorting the individual entries: >
+                 readdir('.', '1', #{sort: 'none'})
+<              If you want to get a directory tree: >
+                 function! s:tree(dir)
+                     return {a:dir : map(readdir(a:dir),
+                     \ {_, x -> isdirectory(x) ?
+                     \          {x : s:tree(a:dir . '/' . x)} : x})}
+                 endfunction
+                 echo s:tree(".")
+<
+               Can also be used as a |method|: >
+                       GetDirName()->readdir()
+<
+readdirex({directory} [, {expr} [, {dict}]])                   *readdirex()*
+               Extended version of |readdir()|.
+               Return a list of Dictionaries with file and directory
+               information in {directory}.
+               This is useful if you want to get the attributes of file and
+               directory at the same time as getting a list of a directory.
+               This is much faster than calling |readdir()| then calling
+               |getfperm()|, |getfsize()|, |getftime()| and |getftype()| for
+               each file and directory especially on MS-Windows.
+               The list will by default be sorted by name (case sensitive),
+               the sorting can be changed by using the optional {dict}
+               argument, see |readdir()|.
+
+               The Dictionary for file and directory information has the
+               following items:
+                       group   Group name of the entry. (Only on Unix)
+                       name    Name of the entry.
+                       perm    Permissions of the entry. See |getfperm()|.
+                       size    Size of the entry. See |getfsize()|.
+                       time    Timestamp of the entry. See |getftime()|.
+                       type    Type of the entry.
+                               On Unix, almost same as |getftype()| except:
+                                   Symlink to a dir    "linkd"
+                                   Other symlink       "link"
+                               On MS-Windows:
+                                   Normal file         "file"
+                                   Directory           "dir"
+                                   Junction            "junction"
+                                   Symlink to a dir    "linkd"
+                                   Other symlink       "link"
+                                   Other reparse point "reparse"
+                       user    User name of the entry's owner. (Only on Unix)
+               On Unix, if the entry is a symlink, the Dictionary includes
+               the information of the target (except the "type" item).
+               On MS-Windows, it includes the information of the symlink
+               itself because of performance reasons.
+
+               When {expr} is omitted all entries are included.
+               When {expr} is given, it is evaluated to check what to do:
+                       If {expr} results in -1 then no further entries will
+                       be handled.
+                       If {expr} results in 0 then this entry will not be
+                       added to the list.
+                       If {expr} results in 1 then this entry will be added
+                       to the list.
+               The entries "." and ".." are always excluded.
+               Each time {expr} is evaluated |v:val| is set to a |Dictionary|
+               of the entry.
+               When {expr} is a function the entry is passed as the argument.
+               For example, to get a list of files ending in ".txt": >
+                 readdirex(dirname, {e -> e.name =~ '.txt$'})
+<
+               For example, to get a list of all files in the current
+               directory without sorting the individual entries: >
+                 readdirex(dirname, '1', #{sort: 'none'})
+
+<
+               Can also be used as a |method|: >
+                       GetDirName()->readdirex()
+<
+
+                                                       *readfile()*
+readfile({fname} [, {type} [, {max}]])
+               Read file {fname} and return a |List|, each line of the file
+               as an item.  Lines are broken at NL characters.  Macintosh
+               files separated with CR will result in a single long line
+               (unless a NL appears somewhere).
+               All NUL characters are replaced with a NL character.
+               When {type} contains "b" binary mode is used:
+               - When the last line ends in a NL an extra empty list item is
+                 added.
+               - No CR characters are removed.
+               Otherwise:
+               - CR characters that appear before a NL are removed.
+               - Whether the last line ends in a NL or not does not matter.
+               - When 'encoding' is Unicode any UTF-8 byte order mark is
+                 removed from the text.
+               When {max} is given this specifies the maximum number of lines
+               to be read.  Useful if you only want to check the first ten
+               lines of a file: >
+                       :for line in readfile(fname, '', 10)
+                       :  if line =~ 'Date' | echo line | endif
+                       :endfor
+<              When {max} is negative -{max} lines from the end of the file
+               are returned, or as many as there are.
+               When {max} is zero the result is an empty list.
+               Note that without {max} the whole file is read into memory.
+               Also note that there is no recognition of encoding.  Read a
+               file into a buffer if you need to.
+               Deprecated (use |readblob()| instead): When {type} contains
+               "B" a |Blob| is returned with the binary data of the file
+               unmodified.
+               When the file can't be opened an error message is given and
+               the result is an empty list.
+               Also see |writefile()|.
+
+               Can also be used as a |method|: >
+                       GetFileName()->readfile()
+
+reduce({object}, {func} [, {initial}])                 *reduce()* *E998*
+               {func} is called for every item in {object}, which can be a
+               |String|, |List| or a |Blob|.  {func} is called with two
+               arguments: the result so far and current item.  After
+               processing all items the result is returned.
+
+               {initial} is the initial result.  When omitted, the first item
+               in {object} is used and {func} is first called for the second
+               item.  If {initial} is not given and {object} is empty no
+               result can be computed, an E998 error is given.
+
+               Examples: >
+                       echo reduce([1, 3, 5], { acc, val -> acc + val })
+                       echo reduce(['x', 'y'], { acc, val -> acc .. val }, 'a')
+                       echo reduce(0z1122, { acc, val -> 2 * acc + val })
+                       echo reduce('xyz', { acc, val -> acc .. ',' .. val })
+<
+               Can also be used as a |method|: >
+                       echo mylist->reduce({ acc, val -> acc + val }, 0)
+
+
+reg_executing()                                                *reg_executing()*
+               Returns the single letter name of the register being executed.
+               Returns an empty string when no register is being executed.
+               See |@|.
+
+reg_recording()                                                *reg_recording()*
+               Returns the single letter name of the register being recorded.
+               Returns an empty string when not recording.  See |q|.
+
+reltime([{start} [, {end}]])                           *reltime()*
+               Return an item that represents a time value.  The item is a
+               list with items that depend on the system.  In Vim 9 script
+               list<any> can be used.
+               The item can be passed to |reltimestr()| to convert it to a
+               string or |reltimefloat()| to convert to a Float.
+
+               Without an argument reltime() returns the current time.
+               With one argument is returns the time passed since the time
+               specified in the argument.
+               With two arguments it returns the time passed between {start}
+               and {end}.
+
+               The {start} and {end} arguments must be values returned by
+               reltime().  If there is an error zero is returned in legacy
+               script, in Vim9 script an error is given.
+
+               Can also be used as a |method|: >
+                       GetStart()->reltime()
+<
+               {only available when compiled with the |+reltime| feature}
+
+reltimefloat({time})                           *reltimefloat()*
+               Return a Float that represents the time value of {time}.
+               Example: >
+                       let start = reltime()
+                       call MyFunction()
+                       let seconds = reltimefloat(reltime(start))
+<              See the note of reltimestr() about overhead.
+               Also see |profiling|.
+               If there is an error 0.0 is returned in legacy script, in Vim9
+               script an error is given.
+
+               Can also be used as a |method|: >
+                       reltime(start)->reltimefloat()
+
+<              {only available when compiled with the |+reltime| feature}
+
+reltimestr({time})                             *reltimestr()*
+               Return a String that represents the time value of {time}.
+               This is the number of seconds, a dot and the number of
+               microseconds.  Example: >
+                       let start = reltime()
+                       call MyFunction()
+                       echo reltimestr(reltime(start))
+<              Note that overhead for the commands will be added to the time.
+               The accuracy depends on the system.
+               Leading spaces are used to make the string align nicely.  You
+               can use split() to remove it. >
+                       echo split(reltimestr(reltime(start)))[0]
+<              Also see |profiling|.
+               If there is an error an empty string is returned in legacy
+               script, in Vim9 script an error is given.
+
+               Can also be used as a |method|: >
+                       reltime(start)->reltimestr()
+
+<              {only available when compiled with the |+reltime| feature}
+
+                                                       *remote_expr()* *E449*
+remote_expr({server}, {string} [, {idvar} [, {timeout}]])
+               Send the {string} to {server}.  The string is sent as an
+               expression and the result is returned after evaluation.
+               The result must be a String or a |List|.  A |List| is turned
+               into a String by joining the items with a line break in
+               between (not at the end), like with join(expr, "\n").
+               If {idvar} is present and not empty, it is taken as the name
+               of a variable and a {serverid} for later use with
+               |remote_read()| is stored there.
+               If {timeout} is given the read times out after this many
+               seconds.  Otherwise a timeout of 600 seconds is used.
+               See also |clientserver| |RemoteReply|.
+               This function is not available in the |sandbox|.
+               {only available when compiled with the |+clientserver| feature}
+               Note: Any errors will cause a local error message to be issued
+               and the result will be the empty string.
+
+               Variables will be evaluated in the global namespace,
+               independent of a function currently being active.  Except
+               when in debug mode, then local function variables and
+               arguments can be evaluated.
+
+               Examples: >
+                       :echo remote_expr("gvim", "2+2")
+                       :echo remote_expr("gvim1", "b:current_syntax")
+<
+               Can also be used as a |method|: >
+                       ServerName()->remote_expr(expr)
+
+remote_foreground({server})                            *remote_foreground()*
+               Move the Vim server with the name {server} to the foreground.
+               The {server} argument is a string.
+               This works like: >
+                       remote_expr({server}, "foreground()")
+<              Except that on Win32 systems the client does the work, to work
+               around the problem that the OS doesn't always allow the server
+               to bring itself to the foreground.
+               Note: This does not restore the window if it was minimized,
+               like foreground() does.
+               This function is not available in the |sandbox|.
+
+               Can also be used as a |method|: >
+                       ServerName()->remote_foreground()
+
+<              {only in the Win32, Athena, Motif and GTK GUI versions and the
+               Win32 console version}
+
+
+remote_peek({serverid} [, {retvar}])           *remote_peek()*
+               Returns a positive number if there are available strings
+               from {serverid}.  Copies any reply string into the variable
+               {retvar} if specified.  {retvar} must be a string with the
+               name of a variable.
+               Returns zero if none are available.
+               Returns -1 if something is wrong.
+               See also |clientserver|.
+               This function is not available in the |sandbox|.
+               {only available when compiled with the |+clientserver| feature}
+               Examples: >
+                       :let repl = ""
+                       :echo "PEEK: ".remote_peek(id, "repl").": ".repl
+
+<              Can also be used as a |method|: >
+                       ServerId()->remote_peek()
+
+remote_read({serverid}, [{timeout}])                   *remote_read()*
+               Return the oldest available reply from {serverid} and consume
+               it.  Unless a {timeout} in seconds is given, it blocks until a
+               reply is available.
+               See also |clientserver|.
+               This function is not available in the |sandbox|.
+               {only available when compiled with the |+clientserver| feature}
+               Example: >
+                       :echo remote_read(id)
+
+<              Can also be used as a |method|: >
+                       ServerId()->remote_read()
+<
+                                                       *remote_send()* *E241*
+remote_send({server}, {string} [, {idvar}])
+               Send the {string} to {server}.  The string is sent as input
+               keys and the function returns immediately.  At the Vim server
+               the keys are not mapped |:map|.
+               If {idvar} is present, it is taken as the name of a variable
+               and a {serverid} for later use with remote_read() is stored
+               there.
+               See also |clientserver| |RemoteReply|.
+               This function is not available in the |sandbox|.
+               {only available when compiled with the |+clientserver| feature}
+
+               Note: Any errors will be reported in the server and may mess
+               up the display.
+               Examples: >
+               :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
+                \ remote_read(serverid)
+
+               :autocmd NONE RemoteReply *
+                \ echo remote_read(expand("<amatch>"))
+               :echo remote_send("gvim", ":sleep 10 | echo ".
+                \ 'server2client(expand("<client>"), "HELLO")<CR>')
+<
+               Can also be used as a |method|: >
+                       ServerName()->remote_send(keys)
+<
+                                       *remote_startserver()* *E941* *E942*
+remote_startserver({name})
+               Become the server {name}.  This fails if already running as a
+               server, when |v:servername| is not empty.
+
+               Can also be used as a |method|: >
+                       ServerName()->remote_startserver()
+
+<              {only available when compiled with the |+clientserver| feature}
+
+remove({list}, {idx} [, {end}])                                *remove()*
+               Without {end}: Remove the item at {idx} from |List| {list} and
+               return the item.
+               With {end}: Remove items from {idx} to {end} (inclusive) and
+               return a |List| with these items.  When {idx} points to the same
+               item as {end} a list with one item is returned.  When {end}
+               points to an item before {idx} this is an error.
+               See |list-index| for possible values of {idx} and {end}.
+               Example: >
+                       :echo "last item: " . remove(mylist, -1)
+                       :call remove(mylist, 0, 9)
+<
+               Use |delete()| to remove a file.
+
+               Can also be used as a |method|: >
+                       mylist->remove(idx)
+
+remove({blob}, {idx} [, {end}])
+               Without {end}: Remove the byte at {idx} from |Blob| {blob} and
+               return the byte.
+               With {end}: Remove bytes from {idx} to {end} (inclusive) and
+               return a |Blob| with these bytes.  When {idx} points to the same
+               byte as {end} a |Blob| with one byte is returned.  When {end}
+               points to a byte before {idx} this is an error.
+               Example: >
+                       :echo "last byte: " . remove(myblob, -1)
+                       :call remove(mylist, 0, 9)
+
+remove({dict}, {key})
+               Remove the entry from {dict} with key {key} and return it.
+               Example: >
+                       :echo "removed " . remove(dict, "one")
+<              If there is no {key} in {dict} this is an error.
+
+rename({from}, {to})                                   *rename()*
+               Rename the file by the name {from} to the name {to}.  This
+               should also work to move files across file systems.  The
+               result is a Number, which is 0 if the file was renamed
+               successfully, and non-zero when the renaming failed.
+               NOTE: If {to} exists it is overwritten without warning.
+               This function is not available in the |sandbox|.
+
+               Can also be used as a |method|: >
+                       GetOldName()->rename(newname)
+
+repeat({expr}, {count})                                        *repeat()*
+               Repeat {expr} {count} times and return the concatenated
+               result.  Example: >
+                       :let separator = repeat('-', 80)
+<              When {count} is zero or negative the result is empty.
+               When {expr} is a |List| the result is {expr} concatenated
+               {count} times.  Example: >
+                       :let longlist = repeat(['a', 'b'], 3)
+<              Results in ['a', 'b', 'a', 'b', 'a', 'b'].
+
+               Can also be used as a |method|: >
+                       mylist->repeat(count)
+
+resolve({filename})                                    *resolve()* *E655*
+               On MS-Windows, when {filename} is a shortcut (a .lnk file),
+               returns the path the shortcut points to in a simplified form.
+               When {filename} is a symbolic link or junction point, return
+               the full path to the target. If the target of junction is
+               removed, return {filename}.
+               On Unix, repeat resolving symbolic links in all path
+               components of {filename} and return the simplified result.
+               To cope with link cycles, resolving of symbolic links is
+               stopped after 100 iterations.
+               On other systems, return the simplified {filename}.
+               The simplification step is done as by |simplify()|.
+               resolve() keeps a leading path component specifying the
+               current directory (provided the result is still a relative
+               path name) and also keeps a trailing path separator.
+
+               Can also be used as a |method|: >
+                       GetName()->resolve()
+
+reverse({object})                                      *reverse()*
+               Reverse the order of items in {object} in-place.
+               {object} can be a |List| or a |Blob|.
+               Returns {object}.
+               If you want an object to remain unmodified make a copy first: >
+                       :let revlist = reverse(copy(mylist))
+<              Can also be used as a |method|: >
+                       mylist->reverse()
+
+round({expr})                                                  *round()*
+               Round off {expr} to the nearest integral value and return it
+               as a |Float|.  If {expr} lies halfway between two integral
+               values, then use the larger one (away from zero).
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       echo round(0.456)
+<                      0.0  >
+                       echo round(4.5)
+<                      5.0 >
+                       echo round(-4.5)
+<                      -5.0
+
+               Can also be used as a |method|: >
+                       Compute()->round()
+<
+               {only available when compiled with the |+float| feature}
+
+rubyeval({expr})                                       *rubyeval()*
+               Evaluate Ruby expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers, floats and strings are returned as they are (strings
+               are copied though).
+               Arrays are represented as Vim |List| type.
+               Hashes are represented as Vim |Dictionary| type.
+               Other objects are represented as strings resulted from their
+               "Object#to_s" method.
+               Note that in a `:def` function local variables are not visible
+               to {expr}.
+
+               Can also be used as a |method|: >
+                       GetRubyExpr()->rubyeval()
+
+<              {only available when compiled with the |+ruby| feature}
+
+screenattr({row}, {col})                                       *screenattr()*
+               Like |screenchar()|, but return the attribute.  This is a rather
+               arbitrary number that can only be used to compare to the
+               attribute at other positions.
+
+               Can also be used as a |method|: >
+                       GetRow()->screenattr(col)
+
+screenchar({row}, {col})                                       *screenchar()*
+               The result is a Number, which is the character at position
+               [row, col] on the screen.  This works for every possible
+               screen position, also status lines, window separators and the
+               command line.  The top left position is row one, column one
+               The character excludes composing characters.  For double-byte
+               encodings it may only be the first byte.
+               This is mainly to be used for testing.
+               Returns -1 when row or col is out of range.
+
+               Can also be used as a |method|: >
+                       GetRow()->screenchar(col)
+
+screenchars({row}, {col})                                      *screenchars()*
+               The result is a |List| of Numbers.  The first number is the same
+               as what |screenchar()| returns.  Further numbers are
+               composing characters on top of the base character.
+               This is mainly to be used for testing.
+               Returns an empty List when row or col is out of range.
+
+               Can also be used as a |method|: >
+                       GetRow()->screenchars(col)
+
+screencol()                                                    *screencol()*
+               The result is a Number, which is the current screen column of
+               the cursor. The leftmost column has number 1.
+               This function is mainly used for testing.
+
+               Note: Always returns the current screen column, thus if used
+               in a command (e.g. ":echo screencol()") it will return the
+               column inside the command line, which is 1 when the command is
+               executed. To get the cursor position in the file use one of
+               the following mappings: >
+                       nnoremap <expr> GG ":echom ".screencol()."\n"
+                       nnoremap <silent> GG :echom screencol()<CR>
+                       nnoremap GG <Cmd>echom screencol()<CR>
+<
+screenpos({winid}, {lnum}, {col})                              *screenpos()*
+               The result is a Dict with the screen position of the text
+               character in window {winid} at buffer line {lnum} and column
+               {col}.  {col} is a one-based byte index.
+               The Dict has these members:
+                       row     screen row
+                       col     first screen column
+                       endcol  last screen column
+                       curscol cursor screen column
+               If the specified position is not visible, all values are zero.
+               The "endcol" value differs from "col" when the character
+               occupies more than one screen cell.  E.g. for a Tab "col" can
+               be 1 and "endcol" can be 8.
+               The "curscol" value is where the cursor would be placed.  For
+               a Tab it would be the same as "endcol", while for a double
+               width character it would be the same as "col".
+               The |conceal| feature is ignored here, the column numbers are
+               as if 'conceallevel' is zero.  You can set the cursor to the
+               right position and use |screencol()| to get the value with
+               |conceal| taken into account.
+
+               Can also be used as a |method|: >
+                       GetWinid()->screenpos(lnum, col)
+
+screenrow()                                                    *screenrow()*
+               The result is a Number, which is the current screen row of the
+               cursor.  The top line has number one.
+               This function is mainly used for testing.
+               Alternatively you can use |winline()|.
+
+               Note: Same restrictions as with |screencol()|.
+
+screenstring({row}, {col})                                     *screenstring()*
+               The result is a String that contains the base character and
+               any composing characters at position [row, col] on the screen.
+               This is like |screenchars()| but returning a String with the
+               characters.
+               This is mainly to be used for testing.
+               Returns an empty String when row or col is out of range.
+
+               Can also be used as a |method|: >
+                       GetRow()->screenstring(col)
+<
+                                                               *search()*
+search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
+               Search for regexp pattern {pattern}.  The search starts at the
+               cursor position (you can use |cursor()| to set it).
+
+               When a match has been found its line number is returned.
+               If there is no match a 0 is returned and the cursor doesn't
+               move.  No error message is given.
+
+               {flags} is a String, which can contain these character flags:
+               'b'     search Backward instead of forward
+               'c'     accept a match at the Cursor position
+               'e'     move to the End of the match
+               'n'     do Not move the cursor
+               'p'     return number of matching sub-Pattern (see below)
+               's'     Set the ' mark at the previous location of the cursor
+               'w'     Wrap around the end of the file
+               'W'     don't Wrap around the end of the file
+               'z'     start searching at the cursor column instead of zero
+               If neither 'w' or 'W' is given, the 'wrapscan' option applies.
+
+               If the 's' flag is supplied, the ' mark is set, only if the
+               cursor is moved. The 's' flag cannot be combined with the 'n'
+               flag.
+
+               'ignorecase', 'smartcase' and 'magic' are used.
+
+               When the 'z' flag is not given, forward searching always
+               starts in column zero and then matches before the cursor are
+               skipped.  When the 'c' flag is present in 'cpo' the next
+               search starts after the match.  Without the 'c' flag the next
+               search starts one column further.  This matters for
+               overlapping matches.
+               When searching backwards and the 'z' flag is given then the
+               search starts in column zero, thus no match in the current
+               line will be found (unless wrapping around the end of the
+               file).
+
+               When the {stopline} argument is given then the search stops
+               after searching this line.  This is useful to restrict the
+               search to a range of lines.  Examples: >
+                       let match = search('(', 'b', line("w0"))
+                       let end = search('END', '', line("w$"))
+<              When {stopline} is used and it is not zero this also implies
+               that the search does not wrap around the end of the file.
+               A zero value is equal to not giving the argument.
+
+               When the {timeout} argument is given the search stops when
+               more than this many milliseconds have passed.  Thus when
+               {timeout} is 500 the search stops after half a second.
+               The value must not be negative.  A zero value is like not
+               giving the argument.
+               {only available when compiled with the |+reltime| feature}
+
+               If the {skip} expression is given it is evaluated with the
+               cursor positioned on the start of a match.  If it evaluates to
+               non-zero this match is skipped.  This can be used, for
+               example, to skip a match in a comment or a string.
+               {skip} can be a string, which is evaluated as an expression, a
+               function reference or a lambda.
+               When {skip} is omitted or empty, every match is accepted.
+               When evaluating {skip} causes an error the search is aborted
+               and -1 returned.
+                                                       *search()-sub-match*
+               With the 'p' flag the returned value is one more than the
+               first sub-match in \(\).  One if none of them matched but the
+               whole pattern did match.
+               To get the column number too use |searchpos()|.
+
+               The cursor will be positioned at the match, unless the 'n'
+               flag is used.
+
+               Example (goes over all files in the argument list): >
+                   :let n = 1
+                   :while n <= argc()      " loop over all files in arglist
+                   :  exe "argument " . n
+                   :  " start at the last char in the file and wrap for the
+                   :  " first search to find match at start of file
+                   :  normal G$
+                   :  let flags = "w"
+                   :  while search("foo", flags) > 0
+                   :    s/foo/bar/g
+                   :    let flags = "W"
+                   :  endwhile
+                   :  update               " write the file if modified
+                   :  let n = n + 1
+                   :endwhile
+<
+               Example for using some flags: >
+                   :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
+<              This will search for the keywords "if", "else", and "endif"
+               under or after the cursor.  Because of the 'p' flag, it
+               returns 1, 2, or 3 depending on which keyword is found, or 0
+               if the search fails.  With the cursor on the first word of the
+               line:
+                   if (foo == 0) | let foo = foo + 1 | endif ~
+               the function returns 1.  Without the 'c' flag, the function
+               finds the "endif" and returns 3.  The same thing happens
+               without the 'e' flag if the cursor is on the "f" of "if".
+               The 'n' flag tells the function not to move the cursor.
+
+               Can also be used as a |method|: >
+                       GetPattern()->search()
+
+searchcount([{options}])                                       *searchcount()*
+               Get or update the last search count, like what is displayed
+               without the "S" flag in 'shortmess'.  This works even if
+               'shortmess' does contain the "S" flag.
+
+               This returns a |Dictionary|. The dictionary is empty if the
+               previous pattern was not set and "pattern" was not specified.
+
+                 key           type            meaning ~
+                 current       |Number|        current position of match;
+                                               0 if the cursor position is
+                                               before the first match
+                 exact_match   |Boolean|       1 if "current" is matched on
+                                               "pos", otherwise 0
+                 total         |Number|        total count of matches found
+                 incomplete    |Number|        0: search was fully completed
+                                               1: recomputing was timed out
+                                               2: max count exceeded
+
+               For {options} see further down.
+
+               To get the last search count when |n| or |N| was pressed, call
+               this function with `recompute: 0` . This sometimes returns
+               wrong information because |n| and |N|'s maximum count is 99.
+               If it exceeded 99 the result must be max count + 1 (100). If
+               you want to get correct information, specify `recompute: 1`: >
+
+                       " result == maxcount + 1 (100) when many matches
+                       let result = searchcount(#{recompute: 0})
+
+                       " Below returns correct result (recompute defaults
+                       " to 1)
+                       let result = searchcount()
+<
+               The function is useful to add the count to |statusline|: >
+                       function! LastSearchCount() abort
+                         let result = searchcount(#{recompute: 0})
+                         if empty(result)
+                           return ''
+                         endif
+                         if result.incomplete ==# 1     " timed out
+                           return printf(' /%s [?/??]', @/)
+                         elseif result.incomplete ==# 2 " max count exceeded
+                           if result.total > result.maxcount &&
+                           \  result.current > result.maxcount
+                             return printf(' /%s [>%d/>%d]', @/,
+                             \             result.current, result.total)
+                           elseif result.total > result.maxcount
+                             return printf(' /%s [%d/>%d]', @/,
+                             \             result.current, result.total)
+                           endif
+                         endif
+                         return printf(' /%s [%d/%d]', @/,
+                         \             result.current, result.total)
+                       endfunction
+                       let &statusline .= '%{LastSearchCount()}'
+
+                       " Or if you want to show the count only when
+                       " 'hlsearch' was on
+                       " let &statusline .=
+                       " \   '%{v:hlsearch ? LastSearchCount() : ""}'
+<
+               You can also update the search count, which can be useful in a
+               |CursorMoved| or |CursorMovedI| autocommand: >
+
+                       autocmd CursorMoved,CursorMovedI *
+                         \ let s:searchcount_timer = timer_start(
+                         \   200, function('s:update_searchcount'))
+                       function! s:update_searchcount(timer) abort
+                         if a:timer ==# s:searchcount_timer
+                           call searchcount(#{
+                           \ recompute: 1, maxcount: 0, timeout: 100})
+                           redrawstatus
+                         endif
+                       endfunction
+<
+               This can also be used to count matched texts with specified
+               pattern in the current buffer using "pattern":  >
+
+                       " Count '\<foo\>' in this buffer
+                       " (Note that it also updates search count)
+                       let result = searchcount(#{pattern: '\<foo\>'})
+
+                       " To restore old search count by old pattern,
+                       " search again
+                       call searchcount()
+<
+               {options} must be a |Dictionary|. It can contain:
+                 key           type            meaning ~
+                 recompute     |Boolean|       if |TRUE|, recompute the count
+                                               like |n| or |N| was executed.
+                                               otherwise returns the last
+                                               computed result (when |n| or
+                                               |N| was used when "S" is not
+                                               in 'shortmess', or this
+                                               function was called).
+                                               (default: |TRUE|)
+                 pattern       |String|        recompute if this was given
+                                               and different with |@/|.
+                                               this works as same as the
+                                               below command is executed
+                                               before calling this function >
+                                                 let @/ = pattern
+<                                              (default: |@/|)
+                 timeout       |Number|        0 or negative number is no
+                                               timeout. timeout milliseconds
+                                               for recomputing the result
+                                               (default: 0)
+                 maxcount      |Number|        0 or negative number is no
+                                               limit. max count of matched
+                                               text while recomputing the
+                                               result.  if search exceeded
+                                               total count, "total" value
+                                               becomes `maxcount + 1`
+                                               (default: 99)
+                 pos           |List|          `[lnum, col, off]` value
+                                               when recomputing the result.
+                                               this changes "current" result
+                                               value. see |cursor()|,
+                                               |getpos()|
+                                               (default: cursor's position)
+
+               Can also be used as a |method|: >
+                       GetSearchOpts()->searchcount()
+<
+searchdecl({name} [, {global} [, {thisblock}]])                        *searchdecl()*
+               Search for the declaration of {name}.
+
+               With a non-zero {global} argument it works like |gD|, find
+               first match in the file.  Otherwise it works like |gd|, find
+               first match in the function.
+
+               With a non-zero {thisblock} argument matches in a {} block
+               that ends before the cursor position are ignored.  Avoids
+               finding variable declarations only valid in another scope.
+
+               Moves the cursor to the found match.
+               Returns zero for success, non-zero for failure.
+               Example: >
+                       if searchdecl('myvar') == 0
+                          echo getline('.')
+                       endif
+<
+               Can also be used as a |method|: >
+                       GetName()->searchdecl()
+<
+                                                       *searchpair()*
+searchpair({start}, {middle}, {end} [, {flags} [, {skip}
+                               [, {stopline} [, {timeout}]]]])
+               Search for the match of a nested start-end pair.  This can be
+               used to find the "endif" that matches an "if", while other
+               if/endif pairs in between are ignored.
+               The search starts at the cursor.  The default is to search
+               forward, include 'b' in {flags} to search backward.
+               If a match is found, the cursor is positioned at it and the
+               line number is returned.  If no match is found 0 or -1 is
+               returned and the cursor doesn't move.  No error message is
+               given.
+
+               {start}, {middle} and {end} are patterns, see |pattern|.  They
+               must not contain \( \) pairs.  Use of \%( \) is allowed.  When
+               {middle} is not empty, it is found when searching from either
+               direction, but only when not in a nested start-end pair.  A
+               typical use is: >
+                       searchpair('\<if\>', '\<else\>', '\<endif\>')
+<              By leaving {middle} empty the "else" is skipped.
+
+               {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with
+               |search()|.  Additionally:
+               'r'     Repeat until no more matches found; will find the
+                       outer pair.  Implies the 'W' flag.
+               'm'     Return number of matches instead of line number with
+                       the match; will be > 1 when 'r' is used.
+               Note: it's nearly always a good idea to use the 'W' flag, to
+               avoid wrapping around the end of the file.
+
+               When a match for {start}, {middle} or {end} is found, the
+               {skip} expression is evaluated with the cursor positioned on
+               the start of the match.  It should return non-zero if this
+               match is to be skipped.  E.g., because it is inside a comment
+               or a string.
+               When {skip} is omitted or empty, every match is accepted.
+               When evaluating {skip} causes an error the search is aborted
+               and -1 returned.
+               {skip} can be a string, a lambda, a funcref or a partial.
+               Anything else makes the function fail.
+               In a `:def` function when the {skip} argument is a string
+               constant it is compiled into instructions.
+
+               For {stopline} and {timeout} see |search()|.
+
+               The value of 'ignorecase' is used.  'magic' is ignored, the
+               patterns are used like it's on.
+
+               The search starts exactly at the cursor.  A match with
+               {start}, {middle} or {end} at the next character, in the
+               direction of searching, is the first one found.  Example: >
+                       if 1
+                         if 2
+                         endif 2
+                       endif 1
+<              When starting at the "if 2", with the cursor on the "i", and
+               searching forwards, the "endif 2" is found.  When starting on
+               the character just before the "if 2", the "endif 1" will be
+               found.  That's because the "if 2" will be found first, and
+               then this is considered to be a nested if/endif from "if 2" to
+               "endif 2".
+               When searching backwards and {end} is more than one character,
+               it may be useful to put "\zs" at the end of the pattern, so
+               that when the cursor is inside a match with the end it finds
+               the matching start.
+
+               Example, to find the "endif" command in a Vim script: >
+
+       :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
+                       \ 'getline(".") =~ "^\\s*\""')
+
+<              The cursor must be at or after the "if" for which a match is
+               to be found.  Note that single-quote strings are used to avoid
+               having to double the backslashes.  The skip expression only
+               catches comments at the start of a line, not after a command.
+               Also, a word "en" or "if" halfway a line is considered a
+               match.
+               Another example, to search for the matching "{" of a "}": >
+
+       :echo searchpair('{', '', '}', 'bW')
+
+<              This works when the cursor is at or before the "}" for which a
+               match is to be found.  To reject matches that syntax
+               highlighting recognized as strings: >
+
+       :echo searchpair('{', '', '}', 'bW',
+            \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+<
+                                                       *searchpairpos()*
+searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
+                               [, {stopline} [, {timeout}]]]])
+               Same as |searchpair()|, but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+               the column position of the match.  If no match is found,
+               returns [0, 0]. >
+
+                       :let [lnum,col] = searchpairpos('{', '', '}', 'n')
+<
+               See |match-parens| for a bigger and more useful example.
+
+                                                       *searchpos()*
+searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
+               Same as |search()|, but returns a |List| with the line and
+               column position of the match. The first element of the |List|
+               is the line number and the second element is the byte index of
+               the column position of the match. If no match is found,
+               returns [0, 0].
+               Example: >
+       :let [lnum, col] = searchpos('mypattern', 'n')
+
+<              When the 'p' flag is given then there is an extra item with
+               the sub-pattern match number |search()-sub-match|.  Example: >
+       :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
+<              In this example "submatch" is 2 when a lowercase letter is
+               found |/\l|, 3 when an uppercase letter is found |/\u|.
+
+               Can also be used as a |method|: >
+                       GetPattern()->searchpos()
+
+server2client({clientid}, {string})                    *server2client()*
+               Send a reply string to {clientid}.  The most recent {clientid}
+               that sent a string can be retrieved with expand("<client>").
+               {only available when compiled with the |+clientserver| feature}
+               Returns zero for success, -1 for failure.
+               Note:
+               This id has to be stored before the next command can be
+               received.  I.e. before returning from the received command and
+               before calling any commands that waits for input.
+               See also |clientserver|.
+               Example: >
+                       :echo server2client(expand("<client>"), "HELLO")
+
+<              Can also be used as a |method|: >
+                       GetClientId()->server2client(string)
+<
+serverlist()                                   *serverlist()*
+               Return a list of available server names, one per line.
+               When there are no servers or the information is not available
+               an empty string is returned.  See also |clientserver|.
+               {only available when compiled with the |+clientserver| feature}
+               Example: >
+                       :echo serverlist()
+<
+setbufline({buf}, {lnum}, {text})                      *setbufline()*
+               Set line {lnum} to {text} in buffer {buf}.  This works like
+               |setline()| for the specified buffer.
+
+               This function works only for loaded buffers. First call
+               |bufload()| if needed.
+
+               To insert lines use |appendbufline()|.
+               Any text properties in {lnum} are cleared.
+
+               {text} can be a string to set one line, or a list of strings
+               to set multiple lines.  If the list extends below the last
+               line then those lines are added.
+
+               For the use of {buf}, see |bufname()| above.
+
+               {lnum} is used like with |setline()|.
+               Use "$" to refer to the last line in buffer {buf}.
+               When {lnum} is just below the last line the {text} will be
+               added below the last line.
+
+               When {buf} is not a valid buffer, the buffer is not loaded or
+               {lnum} is not valid then 1 is returned.  In |Vim9| script an
+               error is given.
+               On success 0 is returned.
+
+               Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetText()->setbufline(buf, lnum)
+
+setbufvar({buf}, {varname}, {val})                     *setbufvar()*
+               Set option or local variable {varname} in buffer {buf} to
+               {val}.
+               This also works for a global or local window option, but it
+               doesn't work for a global or local window variable.
+               For a local window option the global value is unchanged.
+               For the use of {buf}, see |bufname()| above.
+               The {varname} argument is a string.
+               Note that the variable name without "b:" must be used.
+               Examples: >
+                       :call setbufvar(1, "&mod", 1)
+                       :call setbufvar("todo", "myvar", "foobar")
+<              This function is not available in the |sandbox|.
+
+               Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetValue()->setbufvar(buf, varname)
+
+
+setcellwidths({list})                                  *setcellwidths()*
+               Specify overrides for cell widths of character ranges.  This
+               tells Vim how wide characters are, counted in screen cells.
+               This overrides 'ambiwidth'.  Example: >
+                  setcellwidths([[0xad, 0xad, 1],
+                               \ [0x2194, 0x2199, 2]])
+
+<                                      *E1109* *E1110* *E1111* *E1112* *E1113*
+               The {list} argument is a list of lists with each three
+               numbers. These three numbers are [low, high, width].  "low"
+               and "high" can be the same, in which case this refers to one
+               character. Otherwise it is the range of characters from "low"
+               to "high" (inclusive).  "width" is either 1 or 2, indicating
+               the character width in screen cells.
+               An error is given if the argument is invalid, also when a
+               range overlaps with another.
+               Only characters with value 0x100 and higher can be used.
+
+               If the new value causes 'fillchars' or 'listchars' to become
+               invalid it is rejected and an error is given.
+
+               To clear the overrides pass an empty list: >
+                  setcellwidths([]);
+<              You can use the script $VIMRUNTIME/tools/emoji_list.vim to see
+               the effect for known emoji characters.
+
+setcharpos({expr}, {list})                             *setcharpos()*
+               Same as |setpos()| but uses the specified column number as the
+               character index instead of the byte index in the line.
+
+               Example:
+               With the text "여보세요" in line 8: >
+                       call setcharpos('.', [0, 8, 4, 0])
+<              positions the cursor on the fourth character '요'. >
+                       call setpos('.', [0, 8, 4, 0])
+<              positions the cursor on the second character '보'.
+
+               Can also be used as a |method|: >
+                       GetPosition()->setcharpos('.')
+
+setcharsearch({dict})                                  *setcharsearch()*
+               Set the current character search information to {dict},
+               which contains one or more of the following entries:
+
+                   char        character which will be used for a subsequent
+                               |,| or |;| command; an empty string clears the
+                               character search
+                   forward     direction of character search; 1 for forward,
+                               0 for backward
+                   until       type of character search; 1 for a |t| or |T|
+                               character search, 0 for an |f| or |F|
+                               character search
+
+               This can be useful to save/restore a user's character search
+               from a script: >
+                       :let prevsearch = getcharsearch()
+                       :" Perform a command which clobbers user's search
+                       :call setcharsearch(prevsearch)
+<              Also see |getcharsearch()|.
+
+               Can also be used as a |method|: >
+                       SavedSearch()->setcharsearch()
+
+setcmdpos({pos})                                       *setcmdpos()*
+               Set the cursor position in the command line to byte position
+               {pos}.  The first position is 1.
+               Use |getcmdpos()| to obtain the current position.
+               Only works while editing the command line, thus you must use
+               |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='.  For
+               |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is
+               set after the command line is set to the expression.  For
+               |c_CTRL-R_=| it is set after evaluating the expression but
+               before inserting the resulting text.
+               When the number is too big the cursor is put at the end of the
+               line.  A number smaller than one has undefined results.
+               Returns FALSE when successful, TRUE when not editing the
+               command line.
+
+               Can also be used as a |method|: >
+                       GetPos()->setcmdpos()
+
+setcursorcharpos({lnum}, {col} [, {off}])              *setcursorcharpos()*
+setcursorcharpos({list})
+               Same as |cursor()| but uses the specified column number as the
+               character index instead of the byte index in the line.
+
+               Example:
+               With the text "여보세요" in line 4: >
+                       call setcursorcharpos(4, 3)
+<              positions the cursor on the third character '세'. >
+                       call cursor(4, 3)
+<              positions the cursor on the first character '여'.
+
+               Can also be used as a |method|: >
+                       GetCursorPos()->setcursorcharpos()
+
+
+setenv({name}, {val})                                          *setenv()*
+               Set environment variable {name} to {val}.  Example: >
+                       call setenv('HOME', '/home/myhome')
+
+<              When {val} is |v:null| the environment variable is deleted.
+               See also |expr-env|.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetPath()->setenv('PATH')
+
+setfperm({fname}, {mode})                              *setfperm()* *chmod*
+               Set the file permissions for {fname} to {mode}.
+               {mode} must be a string with 9 characters.  It is of the form
+               "rwxrwxrwx", where each group of "rwx" flags represent, in
+               turn, the permissions of the owner of the file, the group the
+               file belongs to, and other users.  A '-' character means the
+               permission is off, any other character means on.  Multi-byte
+               characters are not supported.
+
+               For example "rw-r-----" means read-write for the user,
+               readable by the group, not accessible by others.  "xx-x-----"
+               would do the same thing.
+
+               Returns non-zero for success, zero for failure.
+
+               Can also be used as a |method|: >
+                       GetFilename()->setfperm(mode)
+<
+               To read permissions see |getfperm()|.
+
+
+setline({lnum}, {text})                                        *setline()*
+               Set line {lnum} of the current buffer to {text}.  To insert
+               lines use |append()|. To set lines in another buffer use
+               |setbufline()|.  Any text properties in {lnum} are cleared.
+
+               {lnum} is used like with |getline()|.
+               When {lnum} is just below the last line the {text} will be
+               added below the last line.
+               {text} can be any type or a List of any type, each item is
+               converted to a String.
+
+               If this succeeds, FALSE is returned.  If this fails (most likely
+               because {lnum} is invalid) TRUE is returned.
+               In |Vim9| script an error is given if {lnum} is invalid.
+
+               Example: >
+                       :call setline(5, strftime("%c"))
+
+<              When {text} is a |List| then line {lnum} and following lines
+               will be set to the items in the list.  Example: >
+                       :call setline(5, ['aaa', 'bbb', 'ccc'])
+<              This is equivalent to: >
+                       :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
+                       :  call setline(n, l)
+                       :endfor
+
+<              Note: The '[ and '] marks are not set.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetText()->setline(lnum)
+
+setloclist({nr}, {list} [, {action} [, {what}]])               *setloclist()*
+               Create or replace or add to the location list for window {nr}.
+               {nr} can be the window number or the |window-ID|.
+               When {nr} is zero the current window is used.
+
+               For a location list window, the displayed location list is
+               modified.  For an invalid window number {nr}, -1 is returned.
+               Otherwise, same as |setqflist()|.
+               Also see |location-list|.
+
+               For {action} see |setqflist-action|.
+
+               If the optional {what} dictionary argument is supplied, then
+               only the items listed in {what} are set. Refer to |setqflist()|
+               for the list of supported keys in {what}.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetLoclist()->setloclist(winnr)
+
+setmatches({list} [, {win}])                           *setmatches()*
+               Restores a list of matches saved by |getmatches()| for the
+               current window.  Returns 0 if successful, otherwise -1.  All
+               current matches are cleared before the list is restored.  See
+               example for |getmatches()|.
+               If {win} is specified, use the window with this number or
+               window ID instead of the current window.
+
+               Can also be used as a |method|: >
+                       GetMatches()->setmatches()
+<
+                                                       *setpos()*
+setpos({expr}, {list})
+               Set the position for String {expr}.  Possible values:
+                       .       the cursor
+                       'x      mark x
+
+               {list} must be a |List| with four or five numbers:
+                   [bufnum, lnum, col, off]
+                   [bufnum, lnum, col, off, curswant]
+
+               "bufnum" is the buffer number.  Zero can be used for the
+               current buffer.  When setting an uppercase mark "bufnum" is
+               used for the mark position.  For other marks it specifies the
+               buffer to set the mark in.  You can use the |bufnr()| function
+               to turn a file name into a buffer number.
+               For setting the cursor and the ' mark "bufnum" is ignored,
+               since these are associated with a window, not a buffer.
+               Does not change the jumplist.
+
+               "lnum" and "col" are the position in the buffer.  The first
+               column is 1.  Use a zero "lnum" to delete a mark.  If "col" is
+               smaller than 1 then 1 is used. To use the character count
+               instead of the byte count, use |setcharpos()|.
+
+               The "off" number is only used when 'virtualedit' is set. Then
+               it is the offset in screen columns from the start of the
+               character.  E.g., a position within a <Tab> or after the last
+               character.
+
+               The "curswant" number is only used when setting the cursor
+               position.  It sets the preferred column for when moving the
+               cursor vertically.  When the "curswant" number is missing the
+               preferred column is not set.  When it is present and setting a
+               mark position it is not used.
+
+               Note that for '< and '> changing the line number may result in
+               the marks to be effectively be swapped, so that '< is always
+               before '>.
+
+               Returns 0 when the position could be set, -1 otherwise.
+               An error message is given if {expr} is invalid.
+
+               Also see |setcharpos()|, |getpos()| and |getcurpos()|.
+
+               This does not restore the preferred column for moving
+               vertically; if you set the cursor position with this, |j| and
+               |k| motions will jump to previous columns!  Use |cursor()| to
+               also set the preferred column.  Also see the "curswant" key in
+               |winrestview()|.
+
+               Can also be used as a |method|: >
+                       GetPosition()->setpos('.')
+
+setqflist({list} [, {action} [, {what}]])              *setqflist()*
+               Create or replace or add to the quickfix list.
+
+               If the optional {what} dictionary argument is supplied, then
+               only the items listed in {what} are set. The first {list}
+               argument is ignored.  See below for the supported items in
+               {what}.
+                                                       *setqflist-what*
+               When {what} is not present, the items in {list} are used.  Each
+               item must be a dictionary.  Non-dictionary items in {list} are
+               ignored.  Each dictionary item can contain the following
+               entries:
+
+                   bufnr       buffer number; must be the number of a valid
+                               buffer
+                   filename    name of a file; only used when "bufnr" is not
+                               present or it is invalid.
+                   module      name of a module; if given it will be used in
+                               quickfix error window instead of the filename.
+                   lnum        line number in the file
+                   pattern     search pattern used to locate the error
+                   col         column number
+                   vcol        when non-zero: "col" is visual column
+                               when zero: "col" is byte index
+                   nr          error number
+                   text        description of the error
+                   type        single-character error type, 'E', 'W', etc.
+                   valid       recognized error message
+
+               The "col", "vcol", "nr", "type" and "text" entries are
+               optional.  Either "lnum" or "pattern" entry can be used to
+               locate a matching error line.
+               If the "filename" and "bufnr" entries are not present or
+               neither the "lnum" or "pattern" entries are present, then the
+               item will not be handled as an error line.
+               If both "pattern" and "lnum" are present then "pattern" will
+               be used.
+               If the "valid" entry is not supplied, then the valid flag is
+               set when "bufnr" is a valid buffer or "filename" exists.
+               If you supply an empty {list}, the quickfix list will be
+               cleared.
+               Note that the list is not exactly the same as what
+               |getqflist()| returns.
+
+               {action} values:                *setqflist-action* *E927*
+               'a'     The items from {list} are added to the existing
+                       quickfix list. If there is no existing list, then a
+                       new list is created.
+
+               'r'     The items from the current quickfix list are replaced
+                       with the items from {list}.  This can also be used to
+                       clear the list: >
+                               :call setqflist([], 'r')
+<
+               'f'     All the quickfix lists in the quickfix stack are
+                       freed.
+
+               If {action} is not present or is set to ' ', then a new list
+               is created. The new quickfix list is added after the current
+               quickfix list in the stack and all the following lists are
+               freed. To add a new quickfix list at the end of the stack,
+               set "nr" in {what} to "$".
+
+               The following items can be specified in dictionary {what}:
+                   context     quickfix list context. See |quickfix-context|
+                   efm         errorformat to use when parsing text from
+                               "lines". If this is not present, then the
+                               'errorformat' option value is used.
+                               See |quickfix-parse|
+                   id          quickfix list identifier |quickfix-ID|
+                   idx         index of the current entry in the quickfix
+                               list specified by 'id' or 'nr'. If set to '$',
+                               then the last entry in the list is set as the
+                               current entry.  See |quickfix-index|
+                   items       list of quickfix entries. Same as the {list}
+                               argument.
+                   lines       use 'errorformat' to parse a list of lines and
+                               add the resulting entries to the quickfix list
+                               {nr} or {id}.  Only a |List| value is supported.
+                               See |quickfix-parse|
+                   nr          list number in the quickfix stack; zero
+                               means the current quickfix list and "$" means
+                               the last quickfix list.
+                   quickfixtextfunc
+                               function to get the text to display in the
+                               quickfix window.  The value can be the name of
+                               a function or a funcref or a lambda.  Refer to
+                               |quickfix-window-function| for an explanation
+                               of how to write the function and an example.
+                   title       quickfix list title text. See |quickfix-title|
+               Unsupported keys in {what} are ignored.
+               If the "nr" item is not present, then the current quickfix list
+               is modified. When creating a new quickfix list, "nr" can be
+               set to a value one greater than the quickfix stack size.
+               When modifying a quickfix list, to guarantee that the correct
+               list is modified, "id" should be used instead of "nr" to
+               specify the list.
+
+               Examples (See also |setqflist-examples|): >
+                  :call setqflist([], 'r', {'title': 'My search'})
+                  :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
+                  :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
+<
+               Returns zero for success, -1 for failure.
+
+               This function can be used to create a quickfix list
+               independent of the 'errorformat' setting.  Use a command like
+               `:cc 1` to jump to the first position.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetErrorlist()->setqflist()
+<
+                                                       *setreg()*
+setreg({regname}, {value} [, {options}])
+               Set the register {regname} to {value}.
+               If {regname} is "" or "@", the unnamed register '"' is used.
+               The {regname} argument is a string.  In |Vim9-script|
+               {regname} must be one character.
+
+               {value} may be any value returned by |getreg()| or
+               |getreginfo()|, including a |List| or |Dict|.
+               If {options} contains "a" or {regname} is upper case,
+               then the value is appended.
+
+               {options} can also contain a register type specification:
+                   "c" or "v"        |characterwise| mode
+                   "l" or "V"        |linewise| mode
+                   "b" or "<CTRL-V>" |blockwise-visual| mode
+               If a number immediately follows "b" or "<CTRL-V>" then this is
+               used as the width of the selection - if it is not specified
+               then the width of the block is set to the number of characters
+               in the longest line (counting a <Tab> as 1 character).
+
+               If {options} contains no register settings, then the default
+               is to use character mode unless {value} ends in a <NL> for
+               string {value} and linewise mode for list {value}. Blockwise
+               mode is never selected automatically.
+               Returns zero for success, non-zero for failure.
+
+                                                       *E883*
+               Note: you may not use |List| containing more than one item to
+                     set search and expression registers. Lists containing no
+                     items act like empty strings.
+
+               Examples: >
+                       :call setreg(v:register, @*)
+                       :call setreg('*', @%, 'ac')
+                       :call setreg('a', "1\n2\n3", 'b5')
+                       :call setreg('"', { 'points_to': 'a'})
+
+<              This example shows using the functions to save and restore a
+               register: >
+                       :let var_a = getreginfo()
+                       :call setreg('a', var_a)
+<              or: >
+                       :let var_a = getreg('a', 1, 1)
+                       :let var_amode = getregtype('a')
+                           ....
+                       :call setreg('a', var_a, var_amode)
+<              Note: you may not reliably restore register value
+               without using the third argument to |getreg()| as without it
+               newlines are represented as newlines AND Nul bytes are
+               represented as newlines as well, see |NL-used-for-Nul|.
+
+               You can also change the type of a register by appending
+               nothing: >
+                       :call setreg('a', '', 'al')
+
+<              Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetText()->setreg('a')
+
+settabvar({tabnr}, {varname}, {val})                   *settabvar()*
+               Set tab-local variable {varname} to {val} in tab page {tabnr}.
+               |t:var|
+               The {varname} argument is a string.
+               Note that autocommands are blocked, side effects may not be
+               triggered, e.g. when setting 'filetype'.
+               Note that the variable name without "t:" must be used.
+               Tabs are numbered starting with one.
+               This function is not available in the |sandbox|.
+
+               Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetValue()->settabvar(tab, name)
+
+settabwinvar({tabnr}, {winnr}, {varname}, {val})       *settabwinvar()*
+               Set option or local variable {varname} in window {winnr} to
+               {val}.
+               Tabs are numbered starting with one.  For the current tabpage
+               use |setwinvar()|.
+               {winnr} can be the window number or the |window-ID|.
+               When {winnr} is zero the current window is used.
+               Note that autocommands are blocked, side effects may not be
+               triggered, e.g. when setting 'filetype' or 'syntax'.
+               This also works for a global or local buffer option, but it
+               doesn't work for a global or local buffer variable.
+               For a local buffer option the global value is unchanged.
+               Note that the variable name without "w:" must be used.
+               Examples: >
+                       :call settabwinvar(1, 1, "&list", 0)
+                       :call settabwinvar(3, 2, "myvar", "foobar")
+<              This function is not available in the |sandbox|.
+
+               Can also be used as a |method|, the base is passed as the
+               fourth argument: >
+                       GetValue()->settabwinvar(tab, winnr, name)
+
+settagstack({nr}, {dict} [, {action}])                 *settagstack()*
+               Modify the tag stack of the window {nr} using {dict}.
+               {nr} can be the window number or the |window-ID|.
+
+               For a list of supported items in {dict}, refer to
+               |gettagstack()|. "curidx" takes effect before changing the tag
+               stack.
+                                                       *E962*
+               How the tag stack is modified depends on the {action}
+               argument:
+               - If {action} is not present or is set to 'r', then the tag
+                 stack is replaced.
+               - If {action} is set to 'a', then new entries from {dict} are
+                 pushed (added) onto the tag stack.
+               - If {action} is set to 't', then all the entries from the
+                 current entry in the tag stack or "curidx" in {dict} are
+                 removed and then new entries are pushed to the stack.
+
+               The current index is set to one after the length of the tag
+               stack after the modification.
+
+               Returns zero for success, -1 for failure.
+
+               Examples (for more examples see |tagstack-examples|):
+                   Empty the tag stack of window 3: >
+                       call settagstack(3, {'items' : []})
+
+<                  Save and restore the tag stack: >
+                       let stack = gettagstack(1003)
+                       " do something else
+                       call settagstack(1003, stack)
+                       unlet stack
+<
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetStack()->settagstack(winnr)
+
+setwinvar({winnr}, {varname}, {val})                   *setwinvar()*
+               Like |settabwinvar()| for the current tab page.
+               Examples: >
+                       :call setwinvar(1, "&list", 0)
+                       :call setwinvar(2, "myvar", "foobar")
+
+<              Can also be used as a |method|, the base is passed as the
+               third argument: >
+                       GetValue()->setwinvar(winnr, name)
+
+sha256({string})                                               *sha256()*
+               Returns a String with 64 hex characters, which is the SHA256
+               checksum of {string}.
+
+               Can also be used as a |method|: >
+                       GetText()->sha256()
+
+<              {only available when compiled with the |+cryptv| feature}
+
+shellescape({string} [, {special}])                    *shellescape()*
+               Escape {string} for use as a shell command argument.
+               When the 'shell' contains powershell (MS-Windows) or pwsh
+               (MS-Windows, Linux, and MacOS) then it will enclose {string}
+               in single quotes and will double up all internal single
+               quotes.
+               On MS-Windows, when 'shellslash' is not set, it will enclose
+               {string} in double quotes and double all double quotes within
+               {string}.
+               Otherwise it will enclose {string} in single quotes and
+               replace all "'" with "'\''".
+
+               When the {special} argument is present and it's a non-zero
+               Number or a non-empty String (|non-zero-arg|), then special
+               items such as "!", "%", "#" and "<cword>" will be preceded by
+               a backslash.  This backslash will be removed again by the |:!|
+               command.
+
+               The "!" character will be escaped (again with a |non-zero-arg|
+               {special}) when 'shell' contains "csh" in the tail.  That is
+               because for csh and tcsh "!" is used for history replacement
+               even when inside single quotes.
+
+               With a |non-zero-arg| {special} the <NL> character is also
+               escaped.  When 'shell' containing "csh" in the tail it's
+               escaped a second time.
+
+               The "\" character will be escaped when 'shell' contains "fish"
+               in the tail. That is because for fish "\" is used as an escape
+               character inside single quotes.
+
+               Example of use with a |:!| command: >
+                   :exe '!dir ' . shellescape(expand('<cfile>'), 1)
+<              This results in a directory listing for the file under the
+               cursor.  Example of use with |system()|: >
+                   :call system("chmod +w -- " . shellescape(expand("%")))
+<              See also |::S|.
+
+               Can also be used as a |method|: >
+                       GetCommand()->shellescape()
+
+shiftwidth([{col}])                                            *shiftwidth()*
+               Returns the effective value of 'shiftwidth'. This is the
+               'shiftwidth' value unless it is zero, in which case it is the
+               'tabstop' value.  This function was introduced with patch
+               7.3.694 in 2012, everybody should have it by now (however it
+               did not allow for the optional {col} argument until 8.1.542).
+
+               When there is one argument {col} this is used as column number
+               for which to return the 'shiftwidth' value. This matters for the
+               'vartabstop' feature. If the 'vartabstop' setting is enabled and
+               no {col} argument is given, column 1 will be assumed.
+
+               Can also be used as a |method|: >
+                       GetColumn()->shiftwidth()
+
+sign_ functions are documented here: |sign-functions-details|
+
+
+simplify({filename})                                   *simplify()*
+               Simplify the file name as much as possible without changing
+               the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
+               Unix) are not resolved.  If the first path component in
+               {filename} designates the current directory, this will be
+               valid for the result as well.  A trailing path separator is
+               not removed either. On Unix "//path" is unchanged, but
+               "///path" is simplified to "/path" (this follows the Posix
+               standard).
+               Example: >
+                       simplify("./dir/.././/file/") == "./file/"
+<              Note: The combination "dir/.." is only removed if "dir" is
+               a searchable directory or does not exist.  On Unix, it is also
+               removed when "dir" is a symbolic link within the same
+               directory.  In order to resolve all the involved symbolic
+               links before simplifying the path name, use |resolve()|.
+
+               Can also be used as a |method|: >
+                       GetName()->simplify()
+
+sin({expr})                                            *sin()*
+               Return the sine of {expr}, measured in radians, as a |Float|.
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo sin(100)
+<                      -0.506366 >
+                       :echo sin(-4.01)
+<                      0.763301
+
+               Can also be used as a |method|: >
+                       Compute()->sin()
+<
+               {only available when compiled with the |+float| feature}
+
+
+sinh({expr})                                           *sinh()*
+               Return the hyperbolic sine of {expr} as a |Float| in the range
+               [-inf, inf].
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo sinh(0.5)
+<                      0.521095 >
+                       :echo sinh(-0.9)
+<                      -1.026517
+
+               Can also be used as a |method|: >
+                       Compute()->sinh()
+<
+               {only available when compiled with the |+float| feature}
+
+
+slice({expr}, {start} [, {end}])                       *slice()*
+               Similar to using a |slice| "expr[start : end]", but "end" is
+               used exclusive.  And for a string the indexes are used as
+               character indexes instead of byte indexes, like in
+               |vim9script|.  Also, composing characters are not counted.
+               When {end} is omitted the slice continues to the last item.
+               When {end} is -1 the last item is omitted.
+
+               Can also be used as a |method|: >
+                       GetList()->slice(offset)
+
+
+sort({list} [, {func} [, {dict}]])                     *sort()* *E702*
+               Sort the items in {list} in-place.  Returns {list}.
+
+               If you want a list to remain unmodified make a copy first: >
+                       :let sortedlist = sort(copy(mylist))
+
+<              When {func} is omitted, is empty or zero, then sort() uses the
+               string representation of each item to sort on.  Numbers sort
+               after Strings, |Lists| after Numbers.  For sorting text in the
+               current buffer use |:sort|.
+
+               When {func} is given and it is '1' or 'i' then case is
+               ignored.
+
+               When {func} is given and it is 'l' then the current collation
+               locale is used for ordering. Implementation details: strcoll()
+               is used to compare strings. See |:language| check or set the
+               collation locale. |v:collate| can also be used to check the
+               current locale. Sorting using the locale typically ignores
+               case. Example: >
+                       " ö is sorted similarly to o with English locale.
+                       :language collate en_US.UTF8
+                       :echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
+<                      ['n', 'o', 'O', 'ö', 'p', 'z'] ~
+>
+                       " ö is sorted after z with Swedish locale.
+                       :language collate sv_SE.UTF8
+                       :echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
+<                      ['n', 'o', 'O', 'p', 'z', 'ö'] ~
+               This does not work properly on Mac.
+
+               When {func} is given and it is 'n' then all items will be
+               sorted numerical (Implementation detail: this uses the
+               strtod() function to parse numbers, Strings, Lists, Dicts and
+               Funcrefs will be considered as being 0).
+
+               When {func} is given and it is 'N' then all items will be
+               sorted numerical. This is like 'n' but a string containing
+               digits will be used as the number they represent.
+
+               When {func} is given and it is 'f' then all items will be
+               sorted numerical. All values must be a Number or a Float.
+
+               When {func} is a |Funcref| or a function name, this function
+               is called to compare items.  The function is invoked with two
+               items as argument and must return zero if they are equal, 1 or
+               bigger if the first one sorts after the second one, -1 or
+               smaller if the first one sorts before the second one.
+
+               {dict} is for functions with the "dict" attribute.  It will be
+               used to set the local variable "self". |Dictionary-function|
+
+               The sort is stable, items which compare equal (as number or as
+               string) will keep their relative position. E.g., when sorting
+               on numbers, text strings will sort next to each other, in the
+               same order as they were originally.
+
+               Can also be used as a |method|: >
+                       mylist->sort()
+
+<              Also see |uniq()|.
+
+               Example: >
+                       func MyCompare(i1, i2)
+                          return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
+                       endfunc
+                       eval mylist->sort("MyCompare")
+<              A shorter compare version for this specific simple case, which
+               ignores overflow: >
+                       func MyCompare(i1, i2)
+                          return a:i1 - a:i2
+                       endfunc
+<              For a simple expression you can use a lambda: >
+                       eval mylist->sort({i1, i2 -> i1 - i2})
+<
+sound_clear()                                          *sound_clear()*
+               Stop playing all sounds.
+
+               On some Linux systems you may need the libcanberra-pulse
+               package, otherwise sound may not stop.
+
+               {only available when compiled with the |+sound| feature}
+
+                                                       *sound_playevent()*
+sound_playevent({name} [, {callback}])
+               Play a sound identified by {name}.  Which event names are
+               supported depends on the system.  Often the XDG sound names
+               are used.  On Ubuntu they may be found in
+               /usr/share/sounds/freedesktop/stereo.  Example: >
+                       call sound_playevent('bell')
+<              On MS-Windows, {name} can be SystemAsterisk, SystemDefault,
+               SystemExclamation, SystemExit, SystemHand, SystemQuestion,
+               SystemStart, SystemWelcome, etc.
+
+               When {callback} is specified it is invoked when the sound is
+               finished.  The first argument is the sound ID, the second
+               argument is the status:
+                       0       sound was played to the end
+                       1       sound was interrupted
+                       2       error occurred after sound started
+               Example: >
+                  func Callback(id, status)
+                    echomsg "sound " .. a:id .. " finished with " .. a:status
+                  endfunc
+                  call sound_playevent('bell', 'Callback')
+
+<              MS-Windows: {callback} doesn't work for this function.
+
+               Returns the sound ID, which can be passed to `sound_stop()`.
+               Returns zero if the sound could not be played.
+
+               Can also be used as a |method|: >
+                       GetSoundName()->sound_playevent()
+
+<              {only available when compiled with the |+sound| feature}
+
+                                                       *sound_playfile()*
+sound_playfile({path} [, {callback}])
+               Like `sound_playevent()` but play sound file {path}.  {path}
+               must be a full path.  On Ubuntu you may find files to play
+               with this command: >
+                   :!find /usr/share/sounds -type f | grep -v index.theme
+
+<              Can also be used as a |method|: >
+                       GetSoundPath()->sound_playfile()
+
+<              {only available when compiled with the |+sound| feature}
+
+
+sound_stop({id})                                       *sound_stop()*
+               Stop playing sound {id}.  {id} must be previously returned by
+               `sound_playevent()` or `sound_playfile()`.
+
+               On some Linux systems you may need the libcanberra-pulse
+               package, otherwise sound may not stop.
+
+               On MS-Windows, this does not work for event sound started by
+               `sound_playevent()`. To stop event sounds, use `sound_clear()`.
+
+               Can also be used as a |method|: >
+                       soundid->sound_stop()
+
+<              {only available when compiled with the |+sound| feature}
+
+                                                       *soundfold()*
+soundfold({word})
+               Return the sound-folded equivalent of {word}.  Uses the first
+               language in 'spelllang' for the current window that supports
+               soundfolding.  'spell' must be set.  When no sound folding is
+               possible the {word} is returned unmodified.
+               This can be used for making spelling suggestions.  Note that
+               the method can be quite slow.
+
+               Can also be used as a |method|: >
+                       GetWord()->soundfold()
+<
+                                                       *spellbadword()*
+spellbadword([{sentence}])
+               Without argument: The result is the badly spelled word under
+               or after the cursor.  The cursor is moved to the start of the
+               bad word.  When no bad word is found in the cursor line the
+               result is an empty string and the cursor doesn't move.
+
+               With argument: The result is the first word in {sentence} that
+               is badly spelled.  If there are no spelling mistakes the
+               result is an empty string.
+
+               The return value is a list with two items:
+               - The badly spelled word or an empty string.
+               - The type of the spelling error:
+                       "bad"           spelling mistake
+                       "rare"          rare word
+                       "local"         word only valid in another region
+                       "caps"          word should start with Capital
+               Example: >
+                       echo spellbadword("the quik brown fox")
+<                      ['quik', 'bad'] ~
+
+               The spelling information for the current window and the value
+               of 'spelllang' are used.
+
+               Can also be used as a |method|: >
+                       GetText()->spellbadword()
+<
+                                                       *spellsuggest()*
+spellsuggest({word} [, {max} [, {capital}]])
+               Return a |List| with spelling suggestions to replace {word}.
+               When {max} is given up to this number of suggestions are
+               returned.  Otherwise up to 25 suggestions are returned.
+
+               When the {capital} argument is given and it's non-zero only
+               suggestions with a leading capital will be given.  Use this
+               after a match with 'spellcapcheck'.
+
+               {word} can be a badly spelled word followed by other text.
+               This allows for joining two words that were split.  The
+               suggestions also include the following text, thus you can
+               replace a line.
+
+               {word} may also be a good word.  Similar words will then be
+               returned.  {word} itself is not included in the suggestions,
+               although it may appear capitalized.
+
+               The spelling information for the current window is used.  The
+               values of 'spelllang' and 'spellsuggest' are used.
+
+               Can also be used as a |method|: >
+                       GetWord()->spellsuggest()
+
+split({string} [, {pattern} [, {keepempty}]])                  *split()*
+               Make a |List| out of {string}.  When {pattern} is omitted or
+               empty each white-separated sequence of characters becomes an
+               item.
+               Otherwise the string is split where {pattern} matches,
+               removing the matched characters. 'ignorecase' is not used
+               here, add \c to ignore case. |/\c|
+               When the first or last item is empty it is omitted, unless the
+               {keepempty} argument is given and it's non-zero.
+               Other empty items are kept when {pattern} matches at least one
+               character or when {keepempty} is non-zero.
+               Example: >
+                       :let words = split(getline('.'), '\W\+')
+<              To split a string in individual characters: >
+                       :for c in split(mystring, '\zs')
+<              If you want to keep the separator you can also use '\zs' at
+               the end of the pattern: >
+                       :echo split('abc:def:ghi', ':\zs')
+<                      ['abc:', 'def:', 'ghi'] ~
+               Splitting a table where the first element can be empty: >
+                       :let items = split(line, ':', 1)
+<              The opposite function is |join()|.
+
+               Can also be used as a |method|: >
+                       GetString()->split()
+
+sqrt({expr})                                           *sqrt()*
+               Return the non-negative square root of Float {expr} as a
+               |Float|.
+               {expr} must evaluate to a |Float| or a |Number|.  When {expr}
+               is negative the result is NaN (Not a Number).
+               Examples: >
+                       :echo sqrt(100)
+<                      10.0 >
+                       :echo sqrt(-4.01)
+<                      nan
+               "nan" may be different, it depends on system libraries.
+
+               Can also be used as a |method|: >
+                       Compute()->sqrt()
+<
+               {only available when compiled with the |+float| feature}
+
+
+srand([{expr}])                                                *srand()*
+               Initialize seed used by |rand()|:
+               - If {expr} is not given, seed values are initialized by
+                 reading from /dev/urandom, if possible, or using time(NULL)
+                 a.k.a. epoch time otherwise; this only has second accuracy.
+               - If {expr} is given it must be a Number.  It is used to
+                 initialize the seed values.  This is useful for testing or
+                 when a predictable sequence is intended.
+
+               Examples: >
+                       :let seed = srand()
+                       :let seed = srand(userinput)
+                       :echo rand(seed)
+
+state([{what}])                                                *state()*
+               Return a string which contains characters indicating the
+               current state.  Mostly useful in callbacks that want to do
+               work that may not always be safe.  Roughly this works like:
+               - callback uses state() to check if work is safe to do.
+                 Yes: then do it right away.
+                 No:  add to work queue and add a |SafeState| and/or
+                      |SafeStateAgain| autocommand (|SafeState| triggers at
+                      toplevel, |SafeStateAgain| triggers after handling
+                      messages and callbacks).
+               - When SafeState or SafeStateAgain is triggered and executes
+                 your autocommand, check with `state()` if the work can be
+                 done now, and if yes remove it from the queue and execute.
+                 Remove the autocommand if the queue is now empty.
+               Also see |mode()|.
+
+               When {what} is given only characters in this string will be
+               added.  E.g, this checks if the screen has scrolled: >
+                       if state('s') == ''
+                          " screen has not scrolled
+<
+               These characters indicate the state, generally indicating that
+               something is busy:
+                   m   halfway a mapping, :normal command, feedkeys() or
+                       stuffed command
+                   o   operator pending, e.g. after |d|
+                   a   Insert mode autocomplete active
+                   x   executing an autocommand
+                   w   blocked on waiting, e.g. ch_evalexpr(), ch_read() and
+                       ch_readraw() when reading json
+                   S   not triggering SafeState or SafeStateAgain, e.g. after
+                       |f| or a count
+                   c   callback invoked, including timer (repeats for
+                       recursiveness up to "ccc")
+                   s   screen has scrolled for messages
+
+str2float({string} [, {quoted}])                               *str2float()*
+               Convert String {string} to a Float.  This mostly works the
+               same as when using a floating point number in an expression,
+               see |floating-point-format|.  But it's a bit more permissive.
+               E.g., "1e40" is accepted, while in an expression you need to
+               write "1.0e40".  The hexadecimal form "0x123" is also
+               accepted, but not others, like binary or octal.
+               When {quoted} is present and non-zero then embedded single
+               quotes before the dot are ignored, thus "1'000.0" is a
+               thousand.
+               Text after the number is silently ignored.
+               The decimal point is always '.', no matter what the locale is
+               set to.  A comma ends the number: "12,345.67" is converted to
+               12.0.  You can strip out thousands separators with
+               |substitute()|: >
+                       let f = str2float(substitute(text, ',', '', 'g'))
+<
+               Can also be used as a |method|: >
+                       let f = text->substitute(',', '', 'g')->str2float()
+<
+               {only available when compiled with the |+float| feature}
+
+str2list({string} [, {utf8}])                                  *str2list()*
+               Return a list containing the number values which represent
+               each character in String {string}.  Examples: >
+                       str2list(" ")           returns [32]
+                       str2list("ABC")         returns [65, 66, 67]
+<              |list2str()| does the opposite.
+
+               When {utf8} is omitted or zero, the current 'encoding' is used.
+               When {utf8} is TRUE, always treat the String as UTF-8
+               characters.  With UTF-8 composing characters are handled
+               properly: >
+                       str2list("á")         returns [97, 769]
+
+<              Can also be used as a |method|: >
+                       GetString()->str2list()
+
+
+str2nr({string} [, {base} [, {quoted}]])                       *str2nr()*
+               Convert string {string} to a number.
+               {base} is the conversion base, it can be 2, 8, 10 or 16.
+               When {quoted} is present and non-zero then embedded single
+               quotes are ignored, thus "1'000'000" is a million.
+
+               When {base} is omitted base 10 is used.  This also means that
+               a leading zero doesn't cause octal conversion to be used, as
+               with the default String to Number conversion.  Example: >
+                       let nr = str2nr('0123')
+<
+               When {base} is 16 a leading "0x" or "0X" is ignored.  With a
+               different base the result will be zero.  Similarly, when
+               {base} is 8 a leading "0", "0o" or "0O" is ignored, and when
+               {base} is 2 a leading "0b" or "0B" is ignored.
+               Text after the number is silently ignored.
+
+               Can also be used as a |method|: >
+                       GetText()->str2nr()
+
+
+strcharlen({string})                                   *strcharlen()*
+               The result is a Number, which is the number of characters
+               in String {string}.  Composing characters are ignored.
+               |strchars()| can count the number of characters, counting
+               composing characters separately.
+
+               Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
+
+               Can also be used as a |method|: >
+                       GetText()->strcharlen()
+
+
+strcharpart({src}, {start} [, {len} [, {skipcc}]])             *strcharpart()*
+               Like |strpart()| but using character index and length instead
+               of byte index and length.
+               When {skipcc} is omitted or zero, composing characters are
+               counted separately.
+               When {skipcc} set to 1, Composing characters are ignored,
+               similar to  |slice()|.
+               When a character index is used where a character does not
+               exist it is omitted and counted as one character.  For
+               example: >
+                       strcharpart('abc', -1, 2)
+<              results in 'a'.
+
+               Can also be used as a |method|: >
+                       GetText()->strcharpart(5)
+
+
+strchars({string} [, {skipcc}])                                        *strchars()*
+               The result is a Number, which is the number of characters
+               in String {string}.
+               When {skipcc} is omitted or zero, composing characters are
+               counted separately.
+               When {skipcc} set to 1, Composing characters are ignored.
+               |strcharlen()| always does this.
+
+               Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
+
+               {skipcc} is only available after 7.4.755.  For backward
+               compatibility, you can define a wrapper function: >
+                   if has("patch-7.4.755")
+                     function s:strchars(str, skipcc)
+                       return strchars(a:str, a:skipcc)
+                     endfunction
+                   else
+                     function s:strchars(str, skipcc)
+                       if a:skipcc
+                         return strlen(substitute(a:str, ".", "x", "g"))
+                       else
+                         return strchars(a:str)
+                       endif
+                     endfunction
+                   endif
+<
+               Can also be used as a |method|: >
+                       GetText()->strchars()
+
+strdisplaywidth({string} [, {col}])                    *strdisplaywidth()*
+               The result is a Number, which is the number of display cells
+               String {string} occupies on the screen when it starts at {col}
+               (first column is zero).  When {col} is omitted zero is used.
+               Otherwise it is the screen column where to start.  This
+               matters for Tab characters.
+               The option settings of the current window are used.  This
+               matters for anything that's displayed differently, such as
+               'tabstop' and 'display'.
+               When {string} contains characters with East Asian Width Class
+               Ambiguous, this function's return value depends on 'ambiwidth'.
+               Also see |strlen()|, |strwidth()| and |strchars()|.
+
+               Can also be used as a |method|: >
+                       GetText()->strdisplaywidth()
+
+strftime({format} [, {time}])                          *strftime()*
+               The result is a String, which is a formatted date and time, as
+               specified by the {format} string.  The given {time} is used,
+               or the current time if no time is given.  The accepted
+               {format} depends on your system, thus this is not portable!
+               See the manual page of the C function strftime() for the
+               format.  The maximum length of the result is 80 characters.
+               See also |localtime()|, |getftime()| and |strptime()|.
+               The language can be changed with the |:language| command.
+               Examples: >
+                 :echo strftime("%c")             Sun Apr 27 11:49:23 1997
+                 :echo strftime("%Y %b %d %X")    1997 Apr 27 11:53:25
+                 :echo strftime("%y%m%d %T")      970427 11:53:55
+                 :echo strftime("%H:%M")          11:55
+                 :echo strftime("%c", getftime("file.c"))
+                                                  Show mod time of file.c.
+<              Not available on all systems.  To check use: >
+                       :if exists("*strftime")
+
+<              Can also be used as a |method|: >
+                       GetFormat()->strftime()
+
+strgetchar({str}, {index})                             *strgetchar()*
+               Get character {index} from {str}.  This uses a character
+               index, not a byte index.  Composing characters are considered
+               separate characters here.
+               Also see |strcharpart()| and |strchars()|.
+
+               Can also be used as a |method|: >
+                       GetText()->strgetchar(5)
+
+stridx({haystack}, {needle} [, {start}])               *stridx()*
+               The result is a Number, which gives the byte index in
+               {haystack} of the first occurrence of the String {needle}.
+               If {start} is specified, the search starts at index {start}.
+               This can be used to find a second match: >
+                       :let colon1 = stridx(line, ":")
+                       :let colon2 = stridx(line, ":", colon1 + 1)
+<              The search is done case-sensitive.
+               For pattern searches use |match()|.
+               -1 is returned if the {needle} does not occur in {haystack}.
+               See also |strridx()|.
+               Examples: >
+                 :echo stridx("An Example", "Example")      3
+                 :echo stridx("Starting point", "Start")    0
+                 :echo stridx("Starting point", "start")   -1
+<                                              *strstr()* *strchr()*
+               stridx() works similar to the C function strstr().  When used
+               with a single character it works similar to strchr().
+
+               Can also be used as a |method|: >
+                       GetHaystack()->stridx(needle)
+<
+                                                       *string()*
+string({expr}) Return {expr} converted to a String.  If {expr} is a Number,
+               Float, String, Blob or a composition of them, then the result
+               can be parsed back with |eval()|.
+                       {expr} type     result ~
+                       String          'string' (single quotes are doubled)
+                       Number          123
+                       Float           123.123456 or 1.123456e8
+                       Funcref         function('name')
+                       Blob            0z00112233.44556677.8899
+                       List            [item, item]
+                       Dictionary      {key: value, key: value}
+
+               When a |List| or |Dictionary| has a recursive reference it is
+               replaced by "[...]" or "{...}".  Using eval() on the result
+               will then fail.
+
+               Can also be used as a |method|: >
+                       mylist->string()
+
+<              Also see |strtrans()|.
+
+
+strlen({string})                                               *strlen()*
+               The result is a Number, which is the length of the String
+               {string} in bytes.
+               If the argument is a Number it is first converted to a String.
+               For other types an error is given.
+               If you want to count the number of multibyte characters use
+               |strchars()|.
+               Also see |len()|, |strdisplaywidth()| and |strwidth()|.
+
+               Can also be used as a |method|: >
+                       GetString()->strlen()
+
+strpart({src}, {start} [, {len} [, {chars}]])                  *strpart()*
+               The result is a String, which is part of {src}, starting from
+               byte {start}, with the byte length {len}.
+               When {chars} is present and TRUE then {len} is the number of
+               characters positions (composing characters are not counted
+               separately, thus "1" means one base character and any
+               following composing characters).
+               To count {start} as characters instead of bytes use
+               |strcharpart()|.
+
+               When bytes are selected which do not exist, this doesn't
+               result in an error, the bytes are simply omitted.
+               If {len} is missing, the copy continues from {start} till the
+               end of the {src}. >
+                       strpart("abcdefg", 3, 2)    == "de"
+                       strpart("abcdefg", -2, 4)   == "ab"
+                       strpart("abcdefg", 5, 4)    == "fg"
+                       strpart("abcdefg", 3)       == "defg"
+
+<              Note: To get the first character, {start} must be 0.  For
+               example, to get the character under the cursor: >
+                       strpart(getline("."), col(".") - 1, 1, v:true)
+<
+               Can also be used as a |method|: >
+                       GetText()->strpart(5)
+
+strptime({format}, {timestring})                               *strptime()*
+               The result is a Number, which is a unix timestamp representing
+               the date and time in {timestring}, which is expected to match
+               the format specified in {format}.
+
+               The accepted {format} depends on your system, thus this is not
+               portable!  See the manual page of the C function strptime()
+               for the format.  Especially avoid "%c".  The value of $TZ also
+               matters.
+
+               If the {timestring} cannot be parsed with {format} zero is
+               returned.  If you do not know the format of {timestring} you
+               can try different {format} values until you get a non-zero
+               result.
+
+               See also |strftime()|.
+               Examples: >
+                 :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
+<                862156163 >
+                 :echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55"))
+<                Sun Apr 27 11:53:55 1997 >
+                 :echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600)
+<                Sun Apr 27 12:53:55 1997
+
+               Can also be used as a |method|: >
+                       GetFormat()->strptime(timestring)
+<
+               Not available on all systems.  To check use: >
+                       :if exists("*strptime")
+
+strridx({haystack}, {needle} [, {start}])                      *strridx()*
+               The result is a Number, which gives the byte index in
+               {haystack} of the last occurrence of the String {needle}.
+               When {start} is specified, matches beyond this index are
+               ignored.  This can be used to find a match before a previous
+               match: >
+                       :let lastcomma = strridx(line, ",")
+                       :let comma2 = strridx(line, ",", lastcomma - 1)
+<              The search is done case-sensitive.
+               For pattern searches use |match()|.
+               -1 is returned if the {needle} does not occur in {haystack}.
+               If the {needle} is empty the length of {haystack} is returned.
+               See also |stridx()|.  Examples: >
+                 :echo strridx("an angry armadillo", "an")          3
+<                                                      *strrchr()*
+               When used with a single character it works similar to the C
+               function strrchr().
+
+               Can also be used as a |method|: >
+                       GetHaystack()->strridx(needle)
+
+strtrans({string})                                     *strtrans()*
+               The result is a String, which is {string} with all unprintable
+               characters translated into printable characters |'isprint'|.
+               Like they are shown in a window.  Example: >
+                       echo strtrans(@a)
+<              This displays a newline in register a as "^@" instead of
+               starting a new line.
+
+               Can also be used as a |method|: >
+                       GetString()->strtrans()
+
+strwidth({string})                                     *strwidth()*
+               The result is a Number, which is the number of display cells
+               String {string} occupies.  A Tab character is counted as one
+               cell, alternatively use |strdisplaywidth()|.
+               When {string} contains characters with East Asian Width Class
+               Ambiguous, this function's return value depends on 'ambiwidth'.
+               Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
+
+               Can also be used as a |method|: >
+                       GetString()->strwidth()
+
+submatch({nr} [, {list}])                      *submatch()* *E935*
+               Only for an expression in a |:substitute| command or
+               substitute() function.
+               Returns the {nr}'th submatch of the matched text.  When {nr}
+               is 0 the whole matched text is returned.
+               Note that a NL in the string can stand for a line break of a
+               multi-line match or a NUL character in the text.
+               Also see |sub-replace-expression|.
+
+               If {list} is present and non-zero then submatch() returns
+               a list of strings, similar to |getline()| with two arguments.
+               NL characters in the text represent NUL characters in the
+               text.
+               Only returns more than one item for |:substitute|, inside
+               |substitute()| this list will always contain one or zero
+               items, since there are no real line breaks.
+
+               When substitute() is used recursively only the submatches in
+               the current (deepest) call can be obtained.
+
+               Examples: >
+                       :s/\d\+/\=submatch(0) + 1/
+                       :echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
+<              This finds the first number in the line and adds one to it.
+               A line break is included as a newline character.
+
+               Can also be used as a |method|: >
+                       GetNr()->submatch()
+
+substitute({string}, {pat}, {sub}, {flags})            *substitute()*
+               The result is a String, which is a copy of {string}, in which
+               the first match of {pat} is replaced with {sub}.
+               When {flags} is "g", all matches of {pat} in {string} are
+               replaced.  Otherwise {flags} should be "".
+
+               This works like the ":substitute" command (without any flags).
+               But the matching with {pat} is always done like the 'magic'
+               option is set and 'cpoptions' is empty (to make scripts
+               portable).  'ignorecase' is still relevant, use |/\c| or |/\C|
+               if you want to ignore or match case and ignore 'ignorecase'.
+               'smartcase' is not used.  See |string-match| for how {pat} is
+               used.
+
+               A "~" in {sub} is not replaced with the previous {sub}.
+               Note that some codes in {sub} have a special meaning
+               |sub-replace-special|.  For example, to replace something with
+               "\n" (two characters), use "\\\\n" or '\\n'.
+
+               When {pat} does not match in {string}, {string} is returned
+               unmodified.
+
+               Example: >
+                  :let &path = substitute(&path, ",\\=[^,]*$", "", "")
+<              This removes the last component of the 'path' option. >
+                  :echo substitute("testing", ".*", "\\U\\0", "")
+<              results in "TESTING".
+
+               When {sub} starts with "\=", the remainder is interpreted as
+               an expression. See |sub-replace-expression|.  Example: >
+                  :echo substitute(s, '%\(\x\x\)',
+                          \ '\=nr2char("0x" . submatch(1))', 'g')
+
+<              When {sub} is a Funcref that function is called, with one
+               optional argument.  Example: >
+                  :echo substitute(s, '%\(\x\x\)', SubNr, 'g')
+<              The optional argument is a list which contains the whole
+               matched string and up to nine submatches, like what
+               |submatch()| returns.  Example: >
+                  :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
+
+<              Can also be used as a |method|: >
+                       GetString()->substitute(pat, sub, flags)
+
+swapinfo({fname})                                      *swapinfo()*
+               The result is a dictionary, which holds information about the
+               swapfile {fname}. The available fields are:
+                       version Vim version
+                       user    user name
+                       host    host name
+                       fname   original file name
+                       pid     PID of the Vim process that created the swap
+                               file
+                       mtime   last modification time in seconds
+                       inode   Optional: INODE number of the file
+                       dirty   1 if file was modified, 0 if not
+               Note that "user" and "host" are truncated to at most 39 bytes.
+               In case of failure an "error" item is added with the reason:
+                       Cannot open file: file not found or in accessible
+                       Cannot read file: cannot read first block
+                       Not a swap file: does not contain correct block ID
+                       Magic number mismatch: Info in first block is invalid
+
+               Can also be used as a |method|: >
+                       GetFilename()->swapinfo()
+
+swapname({buf})                                                *swapname()*
+               The result is the swap file path of the buffer {expr}.
+               For the use of {buf}, see |bufname()| above.
+               If buffer {buf} is the current buffer, the result is equal to
+               |:swapname| (unless there is no swap file).
+               If buffer {buf} has no swap file, returns an empty string.
+
+               Can also be used as a |method|: >
+                       GetBufname()->swapname()
+
+synID({lnum}, {col}, {trans})                          *synID()*
+               The result is a Number, which is the syntax ID at the position
+               {lnum} and {col} in the current window.
+               The syntax ID can be used with |synIDattr()| and
+               |synIDtrans()| to obtain syntax information about text.
+
+               {col} is 1 for the leftmost column, {lnum} is 1 for the first
+               line.  'synmaxcol' applies, in a longer line zero is returned.
+               Note that when the position is after the last character,
+               that's where the cursor can be in Insert mode, synID() returns
+               zero.  {lnum} is used like with |getline()|.
+
+               When {trans} is |TRUE|, transparent items are reduced to the
+               item that they reveal.  This is useful when wanting to know
+               the effective color.  When {trans} is |FALSE|, the transparent
+               item is returned.  This is useful when wanting to know which
+               syntax item is effective (e.g. inside parens).
+               Warning: This function can be very slow.  Best speed is
+               obtained by going through the file in forward direction.
+
+               Example (echoes the name of the syntax item under the cursor): >
+                       :echo synIDattr(synID(line("."), col("."), 1), "name")
+<
+
+synIDattr({synID}, {what} [, {mode}])                  *synIDattr()*
+               The result is a String, which is the {what} attribute of
+               syntax ID {synID}.  This can be used to obtain information
+               about a syntax item.
+               {mode} can be "gui", "cterm" or "term", to get the attributes
+               for that mode.  When {mode} is omitted, or an invalid value is
+               used, the attributes for the currently active highlighting are
+               used (GUI, cterm or term).
+               Use synIDtrans() to follow linked highlight groups.
+               {what}          result
+               "name"          the name of the syntax item
+               "fg"            foreground color (GUI: color name used to set
+                               the color, cterm: color number as a string,
+                               term: empty string)
+               "bg"            background color (as with "fg")
+               "font"          font name (only available in the GUI)
+                               |highlight-font|
+               "sp"            special color for the GUI (as with "fg")
+                               |highlight-guisp|
+               "ul"            underline color for cterm: number as a string
+               "fg#"           like "fg", but for the GUI and the GUI is
+                               running the name in "#RRGGBB" form
+               "bg#"           like "fg#" for "bg"
+               "sp#"           like "fg#" for "sp"
+               "bold"          "1" if bold
+               "italic"        "1" if italic
+               "reverse"       "1" if reverse
+               "inverse"       "1" if inverse (= reverse)
+               "standout"      "1" if standout
+               "underline"     "1" if underlined
+               "undercurl"     "1" if undercurled
+               "strike"        "1" if strikethrough
+
+               Example (echoes the color of the syntax item under the
+               cursor): >
+       :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
+<
+               Can also be used as a |method|: >
+       :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
+
+
+synIDtrans({synID})                                    *synIDtrans()*
+               The result is a Number, which is the translated syntax ID of
+               {synID}.  This is the syntax group ID of what is being used to
+               highlight the character.  Highlight links given with
+               ":highlight link" are followed.
+
+               Can also be used as a |method|: >
+       :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
+
+synconcealed({lnum}, {col})                            *synconcealed()*
+               The result is a |List| with currently three items:
+               1. The first item in the list is 0 if the character at the
+                  position {lnum} and {col} is not part of a concealable
+                  region, 1 if it is.  {lnum} is used like with |getline()|.
+               2. The second item in the list is a string. If the first item
+                  is 1, the second item contains the text which will be
+                  displayed in place of the concealed text, depending on the
+                  current setting of 'conceallevel' and 'listchars'.
+               3. The third and final item in the list is a number
+                  representing the specific syntax region matched in the
+                  line. When the character is not concealed the value is
+                  zero. This allows detection of the beginning of a new
+                  concealable region if there are two consecutive regions
+                  with the same replacement character.  For an example, if
+                  the text is "123456" and both "23" and "45" are concealed
+                  and replaced by the character "X", then:
+                       call                    returns ~
+                       synconcealed(lnum, 1)   [0, '', 0]
+                       synconcealed(lnum, 2)   [1, 'X', 1]
+                       synconcealed(lnum, 3)   [1, 'X', 1]
+                       synconcealed(lnum, 4)   [1, 'X', 2]
+                       synconcealed(lnum, 5)   [1, 'X', 2]
+                       synconcealed(lnum, 6)   [0, '', 0]
+
+
+synstack({lnum}, {col})                                        *synstack()*
+               Return a |List|, which is the stack of syntax items at the
+               position {lnum} and {col} in the current window.  {lnum} is
+               used like with |getline()|.  Each item in the List is an ID
+               like what |synID()| returns.
+               The first item in the List is the outer region, following are
+               items contained in that one.  The last one is what |synID()|
+               returns, unless not the whole item is highlighted or it is a
+               transparent item.
+               This function is useful for debugging a syntax file.
+               Example that shows the syntax stack under the cursor: >
+                       for id in synstack(line("."), col("."))
+                          echo synIDattr(id, "name")
+                       endfor
+<              When the position specified with {lnum} and {col} is invalid
+               nothing is returned.  The position just after the last
+               character in a line and the first column in an empty line are
+               valid positions.
+
+system({expr} [, {input}])                             *system()* *E677*
+               Get the output of the shell command {expr} as a |String|.  See
+               |systemlist()| to get the output as a |List|.
+
+               When {input} is given and is a |String| this string is written
+               to a file and passed as stdin to the command.  The string is
+               written as-is, you need to take care of using the correct line
+               separators yourself.
+               If {input} is given and is a |List| it is written to the file
+               in a way |writefile()| does with {binary} set to "b" (i.e.
+               with a newline between each list item with newlines inside
+               list items converted to NULs).
+               When {input} is given and is a number that is a valid id for
+               an existing buffer then the content of the buffer is written
+               to the file line by line, each line terminated by a NL and
+               NULs characters where the text has a NL.
+
+               Pipes are not used, the 'shelltemp' option is not used.
+
+               When prepended by |:silent| the terminal will not be set to
+               cooked mode.  This is meant to be used for commands that do
+               not need the user to type.  It avoids stray characters showing
+               up on the screen which require |CTRL-L| to remove. >
+                       :silent let f = system('ls *.vim')
+<
+               Note: Use |shellescape()| or |::S| with |expand()| or
+               |fnamemodify()| to escape special characters in a command
+               argument.  Newlines in {expr} may cause the command to fail.
+               The characters in 'shellquote' and 'shellxquote' may also
+               cause trouble.
+               This is not to be used for interactive commands.
+
+               The result is a String.  Example: >
+                   :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:
+       'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
+               ({tmp} is an automatically generated file name).
+               For Unix, braces are put around {expr} to allow for
+               concatenated commands.
+
+               The command will be executed in "cooked" mode, so that a
+               CTRL-C will interrupt the command (on Unix at least).
+
+               The resulting error code can be found in |v:shell_error|.
+               This function will fail in |restricted-mode|.
+
+               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.
+
+               Can also be used as a |method|: >
+                       :echo GetCmd()->system()
+
+
+systemlist({expr} [, {input}])                         *systemlist()*
+               Same as |system()|, but returns a |List| with lines (parts of
+               output separated by NL) with NULs transformed into NLs. Output
+               is the same as |readfile()| will output with {binary} argument
+               set to "b", except that there is no extra empty item when the
+               result ends in a NL.
+               Note that on MS-Windows you may get trailing CR characters.
+
+               To see the difference between "echo hello" and "echo -n hello"
+               use |system()| and |split()|: >
+                       echo system('echo hello')->split('\n', 1)
+<
+               Returns an empty string on error.
+
+               Can also be used as a |method|: >
+                       :echo GetCmd()->systemlist()
+
+
+tabpagebuflist([{arg}])                                        *tabpagebuflist()*
+               The result is a |List|, where each item is the number of the
+               buffer associated with each window in the current tab page.
+               {arg} specifies the number of the tab page to be used. When
+               omitted the current tab page is used.
+               When {arg} is invalid the number zero is returned.
+               To get a list of all buffers in all tabs use this: >
+                       let buflist = []
+                       for i in range(tabpagenr('$'))
+                          call extend(buflist, tabpagebuflist(i + 1))
+                       endfor
+<              Note that a buffer may appear in more than one window.
+
+               Can also be used as a |method|: >
+                       GetTabpage()->tabpagebuflist()
+
+tabpagenr([{arg}])                                     *tabpagenr()*
+               The result is a Number, which is the number of the current
+               tab page.  The first tab page has number 1.
+
+               The optional argument {arg} supports the following values:
+                       $       the number of the last tab page (the tab page
+                               count).
+                       #       the number of the last accessed tab page
+                               (where |g<Tab>| goes to). if there is no
+                               previous tab page 0 is returned.
+               The number can be used with the |:tab| command.
+
+
+tabpagewinnr({tabarg} [, {arg}])                       *tabpagewinnr()*
+               Like |winnr()| but for tab page {tabarg}.
+               {tabarg} specifies the number of tab page to be used.
+               {arg} is used like with |winnr()|:
+               - When omitted the current window number is returned.  This is
+                 the window which will be used when going to this tab page.
+               - When "$" the number of windows is returned.
+               - When "#" the previous window nr is returned.
+               Useful examples: >
+                   tabpagewinnr(1)         " current window of tab page 1
+                   tabpagewinnr(4, '$')    " number of windows in tab page 4
+<              When {tabarg} is invalid zero is returned.
+
+               Can also be used as a |method|: >
+                       GetTabpage()->tabpagewinnr()
+<
+                                                       *tagfiles()*
+tagfiles()     Returns a |List| with the file names used to search for tags
+               for the current buffer.  This is the 'tags' option expanded.
+
+
+taglist({expr} [, {filename}])                         *taglist()*
+               Returns a |List| of tags matching the regular expression {expr}.
+
+               If {filename} is passed it is used to prioritize the results
+               in the same way that |:tselect| does. See |tag-priority|.
+               {filename} should be the full path of the file.
+
+               Each list item is a dictionary with at least the following
+               entries:
+                       name            Name of the tag.
+                       filename        Name of the file where the tag is
+                                       defined.  It is either relative to the
+                                       current directory or a full path.
+                       cmd             Ex command used to locate the tag in
+                                       the file.
+                       kind            Type of the tag.  The value for this
+                                       entry depends on the language specific
+                                       kind values.  Only available when
+                                       using a tags file generated by
+                                       Exuberant ctags or hdrtag.
+                       static          A file specific tag.  Refer to
+                                       |static-tag| for more information.
+               More entries may be present, depending on the content of the
+               tags file: access, implementation, inherits and signature.
+               Refer to the ctags documentation for information about these
+               fields.  For C code the fields "struct", "class" and "enum"
+               may appear, they give the name of the entity the tag is
+               contained in.
+
+               The ex-command "cmd" can be either an ex search pattern, a
+               line number or a line number followed by a byte number.
+
+               If there are no matching tags, then an empty list is returned.
+
+               To get an exact tag match, the anchors '^' and '$' should be
+               used in {expr}.  This also make the function work faster.
+               Refer to |tag-regexp| for more information about the tag
+               search regular expression pattern.
+
+               Refer to |'tags'| for information about how the tags file is
+               located by Vim. Refer to |tags-file-format| for the format of
+               the tags file generated by the different ctags tools.
+
+               Can also be used as a |method|: >
+                       GetTagpattern()->taglist()
+
+tan({expr})                                            *tan()*
+               Return the tangent of {expr}, measured in radians, as a |Float|
+               in the range [-inf, inf].
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo tan(10)
+<                      0.648361 >
+                       :echo tan(-4.01)
+<                      -1.181502
+
+               Can also be used as a |method|: >
+                       Compute()->tan()
+<
+               {only available when compiled with the |+float| feature}
+
+
+tanh({expr})                                           *tanh()*
+               Return the hyperbolic tangent of {expr} as a |Float| in the
+               range [-1, 1].
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       :echo tanh(0.5)
+<                      0.462117 >
+                       :echo tanh(-1)
+<                      -0.761594
+
+               Can also be used as a |method|: >
+                       Compute()->tanh()
+<
+               {only available when compiled with the |+float| feature}
+
+
+tempname()                                     *tempname()* *temp-file-name*
+               The result is a String, which is the name of a file that
+               doesn't exist.  It can be used for a temporary file.  The name
+               is different for at least 26 consecutive calls.  Example: >
+                       :let tmpfile = tempname()
+                       :exe "redir > " . tmpfile
+<              For Unix, the file will be in a private directory |tempfile|.
+               For MS-Windows forward slashes are used when the 'shellslash'
+               option is set, or when 'shellcmdflag' starts with '-' and
+               'shell' does not contain powershell or pwsh.
+
+
+term_ functions are documented here: |terminal-function-details|
+
+
+terminalprops()                                                *terminalprops()*
+               Returns a |Dictionary| with properties of the terminal that Vim
+               detected from the response to |t_RV| request.  See
+               |v:termresponse| for the response itself.  If |v:termresponse|
+               is empty most values here will be 'u' for unknown.
+                  cursor_style         whether sending |t_RS| works  **
+                  cursor_blink_mode    whether sending |t_RC| works  **
+                  underline_rgb        whether |t_8u| works **
+                  mouse                mouse type supported
+
+               ** value 'u' for unknown, 'y' for yes, 'n' for no
+
+               If the |+termresponse| feature is missing then the result is
+               an empty dictionary.
+
+               If "cursor_style" is 'y' then |t_RS| will be sent to request the
+               current cursor style.
+               If "cursor_blink_mode" is 'y' then |t_RC| will be sent to
+               request the cursor blink status.
+               "cursor_style" and "cursor_blink_mode" are also set if |t_u7|
+               is not empty, Vim will detect the working of sending |t_RS|
+               and |t_RC| on startup.
+
+               When "underline_rgb" is not 'y', then |t_8u| will be made empty.
+               This avoids sending it to xterm, which would clear the colors.
+
+               For "mouse" the value 'u' is unknown
+
+               Also see:
+               - 'ambiwidth' - detected by using |t_u7|.
+               - |v:termstyleresp| and |v:termblinkresp| for the response to
+                 |t_RS| and |t_RC|.
+
+
+test_ functions are documented here: |test-functions-details|
+
+
+                                                       *timer_info()*
+timer_info([{id}])
+               Return a list with information about timers.
+               When {id} is given only information about this timer is
+               returned.  When timer {id} does not exist an empty list is
+               returned.
+               When {id} is omitted information about all timers is returned.
+
+               For each timer the information is stored in a |Dictionary| with
+               these items:
+                   "id"            the timer ID
+                   "time"          time the timer was started with
+                   "remaining"     time until the timer fires
+                   "repeat"        number of times the timer will still fire;
+                                   -1 means forever
+                   "callback"      the callback
+                   "paused"        1 if the timer is paused, 0 otherwise
+
+               Can also be used as a |method|: >
+                       GetTimer()->timer_info()
+
+<              {only available when compiled with the |+timers| feature}
+
+timer_pause({timer}, {paused})                         *timer_pause()*
+               Pause or unpause a timer.  A paused timer does not invoke its
+               callback when its time expires.  Unpausing a timer may cause
+               the callback to be invoked almost immediately if enough time
+               has passed.
+
+               Pausing a timer is useful to avoid the callback to be called
+               for a short time.
+
+               If {paused} evaluates to a non-zero Number or a non-empty
+               String, then the timer is paused, otherwise it is unpaused.
+               See |non-zero-arg|.
+
+               Can also be used as a |method|: >
+                       GetTimer()->timer_pause(1)
+
+<              {only available when compiled with the |+timers| feature}
+
+                                               *timer_start()* *timer* *timers*
+timer_start({time}, {callback} [, {options}])
+               Create a timer and return the timer ID.
+
+               {time} is the waiting time in milliseconds. This is the
+               minimum time before invoking the callback.  When the system is
+               busy or Vim is not waiting for input the time will be longer.
+
+               {callback} is the function to call.  It can be the name of a
+               function or a |Funcref|.  It is called with one argument, which
+               is the timer ID.  The callback is only invoked when Vim is
+               waiting for input.
+               If you want to show a message look at |popup_notification()|
+               to avoid interfering with what the user is doing.
+
+               {options} is a dictionary.  Supported entries:
+                  "repeat"     Number of times to repeat calling the
+                               callback.  -1 means forever.  When not present
+                               the callback will be called once.
+                               If the timer causes an error three times in a
+                               row the repeat is cancelled.  This avoids that
+                               Vim becomes unusable because of all the error
+                               messages.
+
+               Example: >
+                       func MyHandler(timer)
+                         echo 'Handler called'
+                       endfunc
+                       let timer = timer_start(500, 'MyHandler',
+                               \ {'repeat': 3})
+<              This will invoke MyHandler() three times at 500 msec
+               intervals.
+
+               Can also be used as a |method|: >
+                       GetMsec()->timer_start(callback)
+
+<              Not available in the |sandbox|.
+               {only available when compiled with the |+timers| feature}
+
+timer_stop({timer})                                    *timer_stop()*
+               Stop a timer.  The timer callback will no longer be invoked.
+               {timer} is an ID returned by timer_start(), thus it must be a
+               Number.  If {timer} does not exist there is no error.
+
+               Can also be used as a |method|: >
+                       GetTimer()->timer_stop()
+
+<              {only available when compiled with the |+timers| feature}
+
+timer_stopall()                                                *timer_stopall()*
+               Stop all timers.  The timer callbacks will no longer be
+               invoked.  Useful if a timer is misbehaving.  If there are no
+               timers there is no error.
+
+               {only available when compiled with the |+timers| feature}
+
+tolower({expr})                                                *tolower()*
+               The result is a copy of the String given, with all uppercase
+               characters turned into lowercase (just like applying |gu| to
+               the string).
+
+               Can also be used as a |method|: >
+                       GetText()->tolower()
+
+toupper({expr})                                                *toupper()*
+               The result is a copy of the String given, with all lowercase
+               characters turned into uppercase (just like applying |gU| to
+               the string).
+
+               Can also be used as a |method|: >
+                       GetText()->toupper()
+
+tr({src}, {fromstr}, {tostr})                          *tr()*
+               The result is a copy of the {src} string with all characters
+               which appear in {fromstr} replaced by the character in that
+               position in the {tostr} string.  Thus the first character in
+               {fromstr} is translated into the first character in {tostr}
+               and so on.  Exactly like the unix "tr" command.
+               This code also deals with multibyte characters properly.
+
+               Examples: >
+                       echo tr("hello there", "ht", "HT")
+<              returns "Hello THere" >
+                       echo tr("<blob>", "<>", "{}")
+<              returns "{blob}"
+
+               Can also be used as a |method|: >
+                       GetText()->tr(from, to)
+
+trim({text} [, {mask} [, {dir}]])                              *trim()*
+               Return {text} as a String where any character in {mask} is
+               removed from the beginning and/or end of {text}.
+
+               If {mask} is not given, {mask} is all characters up to 0x20,
+               which includes Tab, space, NL and CR, plus the non-breaking
+               space character 0xa0.
+
+               The optional {dir} argument specifies where to remove the
+               characters:
+                       0       remove from the beginning and end of {text}
+                       1       remove only at the beginning of {text}
+                       2       remove only at the end of {text}
+               When omitted both ends are trimmed.
+
+               This function deals with multibyte characters properly.
+
+               Examples: >
+                       echo trim("   some text ")
+<              returns "some text" >
+                       echo trim("  \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
+<              returns "RESERVE_TAIL" >
+                       echo trim("rm<Xrm<>X>rrm", "rm<>")
+<              returns "Xrm<>X" (characters in the middle are not removed) >
+                       echo trim("  vim  ", " ", 2)
+<              returns "  vim"
+
+               Can also be used as a |method|: >
+                       GetText()->trim()
+
+trunc({expr})                                                  *trunc()*
+               Return the largest integral value with magnitude less than or
+               equal to {expr} as a |Float| (truncate towards zero).
+               {expr} must evaluate to a |Float| or a |Number|.
+               Examples: >
+                       echo trunc(1.456)
+<                      1.0  >
+                       echo trunc(-5.456)
+<                      -5.0  >
+                       echo trunc(4.0)
+<                      4.0
+
+               Can also be used as a |method|: >
+                       Compute()->trunc()
+<
+               {only available when compiled with the |+float| feature}
+
+                                                       *type()*
+type({expr})   The result is a Number representing the type of {expr}.
+               Instead of using the number directly, it is better to use the
+               v:t_ variable that has the value:
+                       Number:     0  |v:t_number|
+                       String:     1  |v:t_string|
+                       Funcref:    2  |v:t_func|
+                       List:       3  |v:t_list|
+                       Dictionary: 4  |v:t_dict|
+                       Float:      5  |v:t_float|
+                       Boolean:    6  |v:t_bool| (v:false and v:true)
+                       None:       7  |v:t_none| (v:null and v:none)
+                       Job:        8  |v:t_job|
+                       Channel:    9  |v:t_channel|
+                       Blob:      10  |v:t_blob|
+               For backward compatibility, this method can be used: >
+                       :if type(myvar) == type(0)
+                       :if type(myvar) == type("")
+                       :if type(myvar) == type(function("tr"))
+                       :if type(myvar) == type([])
+                       :if type(myvar) == type({})
+                       :if type(myvar) == type(0.0)
+                       :if type(myvar) == type(v:false)
+                       :if type(myvar) == type(v:none)
+<              To check if the v:t_ variables exist use this: >
+                       :if exists('v:t_number')
+
+<              Can also be used as a |method|: >
+                       mylist->type()
+
+
+typename({expr})                                       *typename()*
+               Return a string representation of the type of {expr}.
+               Example: >
+                       echo typename([1, 2, 3])
+                       list<number>
+
+
+undofile({name})                                       *undofile()*
+               Return the name of the undo file that would be used for a file
+               with name {name} when writing.  This uses the 'undodir'
+               option, finding directories that exist.  It does not check if
+               the undo file exists.
+               {name} is always expanded to the full path, since that is what
+               is used internally.
+               If {name} is empty undofile() returns an empty string, since a
+               buffer without a file name will not write an undo file.
+               Useful in combination with |:wundo| and |:rundo|.
+               When compiled without the |+persistent_undo| option this always
+               returns an empty string.
+
+               Can also be used as a |method|: >
+                       GetFilename()->undofile()
+
+undotree()                                             *undotree()*
+               Return the current state of the undo tree in a dictionary with
+               the following items:
+                 "seq_last"    The highest undo sequence number used.
+                 "seq_cur"     The sequence number of the current position in
+                               the undo tree.  This differs from "seq_last"
+                               when some changes were undone.
+                 "time_cur"    Time last used for |:earlier| and related
+                               commands.  Use |strftime()| to convert to
+                               something readable.
+                 "save_last"   Number of the last file write.  Zero when no
+                               write yet.
+                 "save_cur"    Number of the current position in the undo
+                               tree.
+                 "synced"      Non-zero when the last undo block was synced.
+                               This happens when waiting from input from the
+                               user.  See |undo-blocks|.
+                 "entries"     A list of dictionaries with information about
+                               undo blocks.
+
+               The first item in the "entries" list is the oldest undo item.
+               Each List item is a |Dictionary| with these items:
+                 "seq"         Undo sequence number.  Same as what appears in
+                               |:undolist|.
+                 "time"        Timestamp when the change happened.  Use
+                               |strftime()| to convert to something readable.
+                 "newhead"     Only appears in the item that is the last one
+                               that was added.  This marks the last change
+                               and where further changes will be added.
+                 "curhead"     Only appears in the item that is the last one
+                               that was undone.  This marks the current
+                               position in the undo tree, the block that will
+                               be used by a redo command.  When nothing was
+                               undone after the last change this item will
+                               not appear anywhere.
+                 "save"        Only appears on the last block before a file
+                               write.  The number is the write count.  The
+                               first write has number 1, the last one the
+                               "save_last" mentioned above.
+                 "alt"         Alternate entry.  This is again a List of undo
+                               blocks.  Each item may again have an "alt"
+                               item.
+
+uniq({list} [, {func} [, {dict}]])                     *uniq()* *E882*
+               Remove second and succeeding copies of repeated adjacent
+               {list} items in-place.  Returns {list}.  If you want a list
+               to remain unmodified make a copy first: >
+                       :let newlist = uniq(copy(mylist))
+<              The default compare function uses the string representation of
+               each item.  For the use of {func} and {dict} see |sort()|.
+
+               Can also be used as a |method|: >
+                       mylist->uniq()
+
+values({dict})                                         *values()*
+               Return a |List| with all the values of {dict}.  The |List| is
+               in arbitrary order.  Also see |items()| and |keys()|.
+
+               Can also be used as a |method|: >
+                       mydict->values()
+
+virtcol({expr})                                                *virtcol()*
+               The result is a Number, which is the screen column of the file
+               position given with {expr}.  That is, the last screen position
+               occupied by the character at that position, when the screen
+               would be of unlimited width.  When there is a <Tab> at the
+               position, the returned Number will be the column at the end of
+               the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
+               set to 8, it returns 8. |conceal| is ignored.
+               For the byte position use |col()|.
+               For the use of {expr} see |col()|.
+               When 'virtualedit' is used {expr} can be [lnum, col, off], where
+               "off" is the offset in screen columns from the start of the
+               character.  E.g., a position within a <Tab> or after the last
+               character.  When "off" is omitted zero is used.
+               When Virtual editing is active in the current mode, a position
+               beyond the end of the line can be returned. |'virtualedit'|
+               The accepted positions are:
+                   .       the cursor position
+                   $       the end of the cursor line (the result is the
+                           number of displayed characters in the cursor line
+                           plus one)
+                   'x      position of mark x (if the mark is not set, 0 is
+                           returned)
+                   v       In Visual mode: the start of the Visual area (the
+                           cursor is the end).  When not in Visual mode
+                           returns the cursor position.  Differs from |'<| in
+                           that it's updated right away.
+               Note that only marks in the current file can be used.
+               Examples: >
+  virtcol(".")    with text "foo^Lbar", with cursor on the "^L", returns 5
+  virtcol("$")    with text "foo^Lbar", returns 9
+  virtcol("'t")    with text "   there", with 't at 'h', returns 6
+<              The first column is 1.  0 is returned for an error.
+               A more advanced example that echoes the maximum length of
+               all lines: >
+                   echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
+
+<              Can also be used as a |method|: >
+                       GetPos()->virtcol()
+
+
+visualmode([{expr}])                                           *visualmode()*
+               The result is a String, which describes the last Visual mode
+               used in the current buffer.  Initially it returns an empty
+               string, but once Visual mode has been used, it returns "v",
+               "V", or "<CTRL-V>" (a single CTRL-V character) for
+               character-wise, line-wise, or block-wise Visual mode
+               respectively.
+               Example: >
+                       :exe "normal " . visualmode()
+<              This enters the same Visual mode as before.  It is also useful
+               in scripts if you wish to act differently depending on the
+               Visual mode that was used.
+               If Visual mode is active, use |mode()| to get the Visual mode
+               (e.g., in a |:vmap|).
+               If {expr} is supplied and it evaluates to a non-zero Number or
+               a non-empty String, then the Visual mode will be cleared and
+               the old value is returned.  See |non-zero-arg|.
+
+wildmenumode()                                 *wildmenumode()*
+               Returns |TRUE| when the wildmenu is active and |FALSE|
+               otherwise.  See 'wildmenu' and 'wildmode'.
+               This can be used in mappings to handle the 'wildcharm' option
+               gracefully. (Makes only sense with |mapmode-c| mappings).
+
+               For example to make <c-j> work like <down> in wildmode, use: >
+    :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
+<
+               (Note, this needs the 'wildcharm' option set appropriately).
+
+win_execute({id}, {command} [, {silent}])              *win_execute()*
+               Like `execute()` but in the context of window {id}.
+               The window will temporarily be made the current window,
+               without triggering autocommands or changing directory.  When
+               executing {command} autocommands will be triggered, this may
+               have unexpected side effects.  Use |:noautocmd| if needed.
+               Example: >
+                       call win_execute(winid, 'set syntax=python')
+<              Doing the same with `setwinvar()` would not trigger
+               autocommands and not actually show syntax highlighting.
+
+                                                       *E994*
+               Not all commands are allowed in popup windows.
+               When window {id} does not exist then no error is given and
+               an empty string is returned.
+
+               Can also be used as a |method|, the base is passed as the
+               second argument: >
+                       GetCommand()->win_execute(winid)
+
+win_findbuf({bufnr})                                   *win_findbuf()*
+               Returns a |List| with |window-ID|s for windows that contain
+               buffer {bufnr}.  When there is none the list is empty.
+
+               Can also be used as a |method|: >
+                       GetBufnr()->win_findbuf()
+
+win_getid([{win} [, {tab}]])                           *win_getid()*
+               Get the |window-ID| for the specified window.
+               When {win} is missing use the current window.
+               With {win} this is the window number.  The top window has
+               number 1.
+               Without {tab} use the current tab, otherwise the tab with
+               number {tab}.  The first tab has number one.
+               Return zero if the window cannot be found.
+
+               Can also be used as a |method|: >
+                       GetWinnr()->win_getid()
+
+
+win_gettype([{nr}])                                    *win_gettype()*
+               Return the type of the window:
+                       "autocmd"       autocommand window. Temporary window
+                                       used to execute autocommands.
+                       "command"       command-line window |cmdwin|
+                       (empty)         normal window
+                       "loclist"       |location-list-window|
+                       "popup"         popup window |popup|
+                       "preview"       preview window |preview-window|
+                       "quickfix"      |quickfix-window|
+                       "unknown"       window {nr} not found
+
+               When {nr} is omitted return the type of the current window.
+               When {nr} is given return the type of this window by number or
+               |window-ID|.
+
+               Also see the 'buftype' option.  When running a terminal in a
+               popup window then 'buftype' is "terminal" and win_gettype()
+               returns "popup".
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_gettype()
+<
+win_gotoid({expr})                                     *win_gotoid()*
+               Go to window with ID {expr}.  This may also change the current
+               tabpage.
+               Return TRUE if successful, FALSE if the window cannot be found.
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_gotoid()
+
+win_id2tabwin({expr})                                  *win_id2tabwin()*
+               Return a list with the tab number and window number of window
+               with ID {expr}: [tabnr, winnr].
+               Return [0, 0] if the window cannot be found.
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_id2tabwin()
+
+win_id2win({expr})                                     *win_id2win()*
+               Return the window number of window with ID {expr}.
+               Return 0 if the window cannot be found in the current tabpage.
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_id2win()
+
+win_screenpos({nr})                                    *win_screenpos()*
+               Return the screen position of window {nr} as a list with two
+               numbers: [row, col].  The first window always has position
+               [1, 1], unless there is a tabline, then it is [2, 1].
+               {nr} can be the window number or the |window-ID|.  Use zero
+               for the current window.
+               Returns [0, 0] if the window cannot be found in the current
+               tabpage.
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_screenpos()
+<
+win_splitmove({nr}, {target} [, {options}])            *win_splitmove()*
+               Move the window {nr} to a new split of the window {target}.
+               This is similar to moving to {target}, creating a new window
+               using |:split| but having the same contents as window {nr}, and
+               then closing {nr}.
+
+               Both {nr} and {target} can be window numbers or |window-ID|s.
+               Both must be in the current tab page.
+
+               Returns zero for success, non-zero for failure.
+
+               {options} is a |Dictionary| with the following optional entries:
+                 "vertical"    When TRUE, the split is created vertically,
+                               like with |:vsplit|.
+                 "rightbelow"  When TRUE, the split is made below or to the
+                               right (if vertical).  When FALSE, it is done
+                               above or to the left (if vertical).  When not
+                               present, the values of 'splitbelow' and
+                               'splitright' are used.
+
+               Can also be used as a |method|: >
+                       GetWinid()->win_splitmove(target)
+<
+
+                                                       *winbufnr()*
+winbufnr({nr}) The result is a Number, which is the number of the buffer
+               associated with window {nr}.  {nr} can be the window number or
+               the |window-ID|.
+               When {nr} is zero, the number of the buffer in the current
+               window is returned.
+               When window {nr} doesn't exist, -1 is returned.
+               Example: >
+  :echo "The file in the current window is " . bufname(winbufnr(0))
+<
+               Can also be used as a |method|: >
+                       FindWindow()->winbufnr()->bufname()
+<
+                                                       *wincol()*
+wincol()       The result is a Number, which is the virtual column of the
+               cursor in the window.  This is counting screen cells from the
+               left side of the window.  The leftmost column is one.
+
+                                                       *windowsversion()*
+windowsversion()
+               The result is a String.  For MS-Windows it indicates the OS
+               version.  E.g, Windows 10 is "10.0", Windows 8 is "6.2",
+               Windows XP is "5.1".  For non-MS-Windows systems the result is
+               an empty string.
+
+winheight({nr})                                                *winheight()*
+               The result is a Number, which is the height of window {nr}.
+               {nr} can be the window number or the |window-ID|.
+               When {nr} is zero, the height of the current window is
+               returned.  When window {nr} doesn't exist, -1 is returned.
+               An existing window always has a height of zero or more.
+               This excludes any window toolbar line.
+               Examples: >
+  :echo "The current window has " . winheight(0) . " lines."
+
+<              Can also be used as a |method|: >
+                       GetWinid()->winheight()
+<
+winlayout([{tabnr}])                                   *winlayout()*
+               The result is a nested List containing the layout of windows
+               in a tabpage.
+
+               Without {tabnr} use the current tabpage, otherwise the tabpage
+               with number {tabnr}. If the tabpage {tabnr} is not found,
+               returns an empty list.
+
+               For a leaf window, it returns:
+                       ['leaf', {winid}]
+               For horizontally split windows, which form a column, it
+               returns:
+                       ['col', [{nested list of windows}]]
+               For vertically split windows, which form a row, it returns:
+                       ['row', [{nested list of windows}]]
+
+               Example: >
+                       " Only one window in the tab page
+                       :echo winlayout()
+                       ['leaf', 1000]
+                       " Two horizontally split windows
+                       :echo winlayout()
+                       ['col', [['leaf', 1000], ['leaf', 1001]]]
+                       " The second tab page, with three horizontally split
+                       " windows, with two vertically split windows in the
+                       " middle window
+                       :echo winlayout(2)
+                       ['col', [['leaf', 1002], ['row', [['leaf', 1003],
+                                           ['leaf', 1001]]], ['leaf', 1000]]]
+<
+               Can also be used as a |method|: >
+                       GetTabnr()->winlayout()
+<
+                                                       *winline()*
+winline()      The result is a Number, which is the screen line of the cursor
+               in the window.  This is counting screen lines from the top of
+               the window.  The first line is one.
+               If the cursor was moved the view on the file will be updated
+               first, this may cause a scroll.
+
+                                                       *winnr()*
+winnr([{arg}]) The result is a Number, which is the number of the current
+               window.  The top window has number 1.
+               Returns zero for a popup window.
+
+               The optional argument {arg} supports the following values:
+                       $       the number of the last window (the window
+                               count).
+                       #       the number of the last accessed window (where
+                               |CTRL-W_p| goes to).  If there is no previous
+                               window or it is in another tab page 0 is
+                               returned.
+                       {N}j    the number of the Nth window below the
+                               current window (where |CTRL-W_j| goes to).
+                       {N}k    the number of the Nth window above the current
+                               window (where |CTRL-W_k| goes to).
+                       {N}h    the number of the Nth window left of the
+                               current window (where |CTRL-W_h| goes to).
+                       {N}l    the number of the Nth window right of the
+                               current window (where |CTRL-W_l| goes to).
+               The number can be used with |CTRL-W_w| and ":wincmd w"
+               |:wincmd|.
+               Also see |tabpagewinnr()| and |win_getid()|.
+               Examples: >
+                       let window_count = winnr('$')
+                       let prev_window = winnr('#')
+                       let wnum = winnr('3k')
+
+<              Can also be used as a |method|: >
+                       GetWinval()->winnr()
+<
+                                                       *winrestcmd()*
+winrestcmd()   Returns a sequence of |:resize| commands that should restore
+               the current window sizes.  Only works properly when no windows
+               are opened or closed and the current window and tab page is
+               unchanged.
+               Example: >
+                       :let cmd = winrestcmd()
+                       :call MessWithWindowSizes()
+                       :exe cmd
+<
+                                                       *winrestview()*
+winrestview({dict})
+               Uses the |Dictionary| returned by |winsaveview()| to restore
+               the view of the current window.
+               Note: The {dict} does not have to contain all values, that are
+               returned by |winsaveview()|. If values are missing, those
+               settings won't be restored. So you can use: >
+                   :call winrestview({'curswant': 4})
+<
+               This will only set the curswant value (the column the cursor
+               wants to move on vertical movements) of the cursor to column 5
+               (yes, that is 5), while all other settings will remain the
+               same. This is useful, if you set the cursor position manually.
+
+               If you have changed the values the result is unpredictable.
+               If the window size changed the result won't be the same.
+
+               Can also be used as a |method|: >
+                       GetView()->winrestview()
+<
+                                                       *winsaveview()*
+winsaveview()  Returns a |Dictionary| that contains information to restore
+               the view of the current window.  Use |winrestview()| to
+               restore the view.
+               This is useful if you have a mapping that jumps around in the
+               buffer and you want to go back to the original view.
+               This does not save fold information.  Use the 'foldenable'
+               option to temporarily switch off folding, so that folds are
+               not opened when moving around. This may have side effects.
+               The return value includes:
+                       lnum            cursor line number
+                       col             cursor column (Note: the first column
+                                       zero, as opposed to what getpos()
+                                       returns)
+                       coladd          cursor column offset for 'virtualedit'
+                       curswant        column for vertical movement
+                       topline         first line in the window
+                       topfill         filler lines, only in diff mode
+                       leftcol         first column displayed; only used when
+                                       'wrap' is off
+                       skipcol         columns skipped
+               Note that no option values are saved.
+
+
+winwidth({nr})                                         *winwidth()*
+               The result is a Number, which is the width of window {nr}.
+               {nr} can be the window number or the |window-ID|.
+               When {nr} is zero, the width of the current window is
+               returned.  When window {nr} doesn't exist, -1 is returned.
+               An existing window always has a width of zero or more.
+               Examples: >
+  :echo "The current window has " . winwidth(0) . " columns."
+  :if winwidth(0) <= 50
+  :  50 wincmd |
+  :endif
+<              For getting the terminal or screen size, see the 'columns'
+               option.
+
+               Can also be used as a |method|: >
+                       GetWinid()->winwidth()
+
+
+wordcount()                                            *wordcount()*
+               The result is a dictionary of byte/chars/word statistics for
+               the current buffer.  This is the same info as provided by
+               |g_CTRL-G|
+               The return value includes:
+                       bytes           Number of bytes in the buffer
+                       chars           Number of chars in the buffer
+                       words           Number of words in the buffer
+                       cursor_bytes    Number of bytes before cursor position
+                                       (not in Visual mode)
+                       cursor_chars    Number of chars before cursor position
+                                       (not in Visual mode)
+                       cursor_words    Number of words before cursor position
+                                       (not in Visual mode)
+                       visual_bytes    Number of bytes visually selected
+                                       (only in Visual mode)
+                       visual_chars    Number of chars visually selected
+                                       (only in Visual mode)
+                       visual_words    Number of words visually selected
+                                       (only in Visual mode)
+
+
+                                                       *writefile()*
+writefile({object}, {fname} [, {flags}])
+               When {object} is a |List| write it to file {fname}.  Each list
+               item is separated with a NL.  Each list item must be a String
+               or Number.
+               When {flags} contains "b" then binary mode is used: There will
+               not be a NL after the last list item.  An empty item at the
+               end does cause the last line in the file to end in a NL.
+
+               When {object} is a |Blob| write the bytes to file {fname}
+               unmodified.
+
+               When {flags} contains "a" then append mode is used, lines are
+               appended to the file: >
+                       :call writefile(["foo"], "event.log", "a")
+                       :call writefile(["bar"], "event.log", "a")
+<
+               When {flags} contains "s" then fsync() is called after writing
+               the file.  This flushes the file to disk, if possible.  This
+               takes more time but avoids losing the file if the system
+               crashes.
+               When {flags} does not contain "S" or "s" then fsync() is
+               called if the 'fsync' option is set.
+               When {flags} contains "S" then fsync() is not called, even
+               when 'fsync' is set.
+
+               All NL characters are replaced with a NUL character.
+               Inserting CR characters needs to be done before passing {list}
+               to writefile().
+               An existing file is overwritten, if possible.
+               When the write fails -1 is returned, otherwise 0.  There is an
+               error message if the file can't be created or when writing
+               fails.
+               Also see |readfile()|.
+               To copy a file byte for byte: >
+                       :let fl = readfile("foo", "b")
+                       :call writefile(fl, "foocopy", "b")
+
+<              Can also be used as a |method|: >
+                       GetText()->writefile("thefile")
+
+
+xor({expr}, {expr})                                    *xor()*
+               Bitwise XOR on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let bits = xor(bits, 0x80)
+<
+               Can also be used as a |method|: >
+                       :let bits = bits->xor(0x80)
+<
+
+==============================================================================
+3. Feature list                                                *feature-list*
+
+There are three types of features:
+1.  Features that are only supported when they have been enabled when Vim
+    was compiled |+feature-list|.  Example: >
+       :if has("cindent")
+<                                                      *gui_running*
+2.  Features that are only supported when certain conditions have been met.
+    Example: >
+       :if has("gui_running")
+<                                                      *has-patch*
+3.  Beyond a certain version or at a certain version and including a specific
+    patch.  The "patch-7.4.248" feature means that the Vim version is 7.5 or
+    later, or it is version 7.4 and patch 248 was included.  Example: >
+       :if has("patch-7.4.248")
+<    Note that it's possible for patch 248 to be omitted even though 249 is
+    included.  Only happens when cherry-picking patches.
+    Note that this form only works for patch 7.4.237 and later, before that
+    you need to check for the patch and the  v:version.  Example (checking
+    version 6.2.148 or later): >
+       :if v:version > 602 || (v:version == 602 && has("patch148"))
+
+Hint: To find out if Vim supports backslashes in a file name (MS-Windows),
+use: `if exists('+shellslash')`
+
+
+acl                    Compiled with |ACL| support.
+all_builtin_terms      Compiled with all builtin terminals enabled.
+amiga                  Amiga version of Vim.
+arabic                 Compiled with Arabic support |Arabic|.
+arp                    Compiled with ARP support (Amiga).
+autocmd                        Compiled with autocommand support. (always true)
+autochdir              Compiled with support for 'autochdir'
+autoservername         Automatically enable |clientserver|
+balloon_eval           Compiled with |balloon-eval| support.
+balloon_multiline      GUI supports multiline balloons.
+beos                   BeOS version of Vim.
+browse                 Compiled with |:browse| support, and browse() will
+                       work.
+browsefilter           Compiled with support for |browsefilter|.
+bsd                    Compiled on an OS in the BSD family (excluding macOS).
+builtin_terms          Compiled with some builtin terminals.
+byte_offset            Compiled with support for 'o' in 'statusline'
+channel                        Compiled with support for |channel| and |job|
+cindent                        Compiled with 'cindent' support.
+clientserver           Compiled with remote invocation support |clientserver|.
+clipboard              Compiled with 'clipboard' support.
+clipboard_working      Compiled with 'clipboard' support and it can be used.
+cmdline_compl          Compiled with |cmdline-completion| support.
+cmdline_hist           Compiled with |cmdline-history| support.
+cmdline_info           Compiled with 'showcmd' and 'ruler' support.
+comments               Compiled with |'comments'| support.
+compatible             Compiled to be very Vi compatible.
+conpty                 Platform where |ConPTY| can be used.
+cryptv                 Compiled with encryption support |encryption|.
+cscope                 Compiled with |cscope| support.
+cursorbind             Compiled with |'cursorbind'| (always true)
+debug                  Compiled with "DEBUG" defined.
+dialog_con             Compiled with console dialog support.
+dialog_gui             Compiled with GUI dialog support.
+diff                   Compiled with |vimdiff| and 'diff' support.
+digraphs               Compiled with support for digraphs.
+directx                        Compiled with support for DirectX and 'renderoptions'.
+dnd                    Compiled with support for the "~ register |quote_~|.
+drop_file              Compiled with |drop_file| support.
+ebcdic                 Compiled on a machine with ebcdic character set.
+emacs_tags             Compiled with support for Emacs tags.
+eval                   Compiled with expression evaluation support.  Always
+                       true, of course!
+ex_extra               |+ex_extra| (always true)
+extra_search           Compiled with support for |'incsearch'| and
+                       |'hlsearch'|
+farsi                  Support for Farsi was removed |farsi|.
+file_in_path           Compiled with support for |gf| and |<cfile>|
+filterpipe             When 'shelltemp' is off pipes are used for shell
+                       read/write/filter commands
+find_in_path           Compiled with support for include file searches
+                       |+find_in_path|.
+float                  Compiled with support for |Float|.
+fname_case             Case in file names matters (for Amiga and MS-Windows
+                       this is not present).
+folding                        Compiled with |folding| support.
+footer                 Compiled with GUI footer support. |gui-footer|
+fork                   Compiled to use fork()/exec() instead of system().
+gettext                        Compiled with message translation |multi-lang|
+gui                    Compiled with GUI enabled.
+gui_athena             Compiled with Athena GUI.
+gui_gnome              Compiled with Gnome support (gui_gtk is also defined).
+gui_gtk                        Compiled with GTK+ GUI (any version).
+gui_gtk2               Compiled with GTK+ 2 GUI (gui_gtk is also defined).
+gui_gtk3               Compiled with GTK+ 3 GUI (gui_gtk is also defined).
+gui_haiku              Compiled with Haiku GUI.
+gui_mac                        Compiled with Macintosh GUI.
+gui_motif              Compiled with Motif GUI.
+gui_photon             Compiled with Photon GUI.
+gui_running            Vim is running in the GUI, or it will start soon.
+gui_win32              Compiled with MS-Windows Win32 GUI.
+gui_win32s             idem, and Win32s system being used (Windows 3.1)
+haiku                  Haiku version of Vim.
+hangul_input           Compiled with Hangul input support. |hangul|
+hpux                   HP-UX version of Vim.
+iconv                  Can use iconv() for conversion.
+insert_expand          Compiled with support for CTRL-X expansion commands in
+                       Insert mode. (always true)
+job                    Compiled with support for |channel| and |job|
+ipv6                   Compiled with support for IPv6 networking in |channel|.
+jumplist               Compiled with |jumplist| support.
+keymap                 Compiled with 'keymap' support.
+lambda                 Compiled with |lambda| support.
+langmap                        Compiled with 'langmap' support.
+libcall                        Compiled with |libcall()| support.
+linebreak              Compiled with 'linebreak', 'breakat', 'showbreak' and
+                       'breakindent' support.
+linux                  Linux version of Vim.
+lispindent             Compiled with support for lisp indenting.
+listcmds               Compiled with commands for the buffer list |:files|
+                       and the argument list |arglist|.
+localmap               Compiled with local mappings and abbr. |:map-local|
+lua                    Compiled with Lua interface |Lua|.
+mac                    Any Macintosh version of Vim  cf. osx
+macunix                        Synonym for osxdarwin
+menu                   Compiled with support for |:menu|.
+mksession              Compiled with support for |:mksession|.
+modify_fname           Compiled with file name modifiers. |filename-modifiers|
+                       (always true)
+mouse                  Compiled with support for mouse.
+mouse_dec              Compiled with support for Dec terminal mouse.
+mouse_gpm              Compiled with support for gpm (Linux console mouse)
+mouse_gpm_enabled      GPM mouse is working
+mouse_netterm          Compiled with support for netterm mouse.
+mouse_pterm            Compiled with support for qnx pterm mouse.
+mouse_sysmouse         Compiled with support for sysmouse (*BSD console mouse)
+mouse_sgr              Compiled with support for sgr mouse.
+mouse_urxvt            Compiled with support for urxvt mouse.
+mouse_xterm            Compiled with support for xterm mouse.
+mouseshape             Compiled with support for 'mouseshape'.
+multi_byte             Compiled with support for 'encoding' (always true)
+multi_byte_encoding    'encoding' is set to a multibyte encoding.
+multi_byte_ime         Compiled with support for IME input method.
+multi_lang             Compiled with support for multiple languages.
+mzscheme               Compiled with MzScheme interface |mzscheme|.
+nanotime               Compiled with sub-second time stamp checks.
+netbeans_enabled       Compiled with support for |netbeans| and connected.
+netbeans_intg          Compiled with support for |netbeans|.
+num64                  Compiled with 64-bit |Number| support.
+ole                    Compiled with OLE automation support for Win32.
+osx                    Compiled for macOS  cf. mac
+osxdarwin              Compiled for macOS, with |mac-darwin-feature|
+packages               Compiled with |packages| support.
+path_extra             Compiled with up/downwards search in 'path' and 'tags'
+perl                   Compiled with Perl interface.
+persistent_undo                Compiled with support for persistent undo history.
+postscript             Compiled with PostScript file printing.
+printer                        Compiled with |:hardcopy| support.
+profile                        Compiled with |:profile| support.
+python                 Python 2.x interface available. |has-python|
+python_compiled                Compiled with Python 2.x interface. |has-python|
+python_dynamic         Python 2.x interface is dynamically loaded. |has-python|
+python3                        Python 3.x interface available. |has-python|
+python3_compiled       Compiled with Python 3.x interface. |has-python|
+python3_dynamic                Python 3.x interface is dynamically loaded. |has-python|
+pythonx                        Python 2.x and/or 3.x interface available. |python_x|
+qnx                    QNX version of Vim.
+quickfix               Compiled with |quickfix| support.
+reltime                        Compiled with |reltime()| support.
+rightleft              Compiled with 'rightleft' support.
+ruby                   Compiled with Ruby interface |ruby|.
+scrollbind             Compiled with 'scrollbind' support. (always true)
+showcmd                        Compiled with 'showcmd' support.
+signs                  Compiled with |:sign| support.
+smartindent            Compiled with 'smartindent' support.
+sodium                 Compiled with libsodium for better crypt support
+sound                  Compiled with sound support, e.g. `sound_playevent()`
+spell                  Compiled with spell checking support |spell|.
+startuptime            Compiled with |--startuptime| support.
+statusline             Compiled with support for 'statusline', 'rulerformat'
+                       and special formats of 'titlestring' and 'iconstring'.
+sun                    SunOS version of Vim.
+sun_workshop           Support for Sun |workshop| has been removed.
+syntax                 Compiled with syntax highlighting support |syntax|.
+syntax_items           There are active syntax highlighting items for the
+                       current buffer.
+system                 Compiled to use system() instead of fork()/exec().
+tag_binary             Compiled with binary searching in tags files
+                       |tag-binary-search|.
+tag_old_static         Support for old static tags was removed, see
+                       |tag-old-static|.
+tcl                    Compiled with Tcl interface.
+termguicolors          Compiled with true color in terminal support.
+terminal               Compiled with |terminal| support.
+terminfo               Compiled with terminfo instead of termcap.
+termresponse           Compiled with support for |t_RV| and |v:termresponse|.
+textobjects            Compiled with support for |text-objects|.
+textprop               Compiled with support for |text-properties|.
+tgetent                        Compiled with tgetent support, able to use a termcap
+                       or terminfo file.
+timers                 Compiled with |timer_start()| support.
+title                  Compiled with window title support |'title'|.
+toolbar                        Compiled with support for |gui-toolbar|.
+ttyin                  input is a terminal (tty)
+ttyout                 output is a terminal (tty)
+unix                   Unix version of Vim. *+unix*
+unnamedplus            Compiled with support for "unnamedplus" in 'clipboard'
+user_commands          User-defined commands. (always true)
+vartabs                        Compiled with variable tabstop support |'vartabstop'|.
+vcon                   Win32: Virtual console support is working, can use
+                       'termguicolors'. Also see |+vtp|.
+vertsplit              Compiled with vertically split windows |:vsplit|.
+                       (always true)
+vim_starting           True while initial source'ing takes place. |startup|
+                       *vim_starting*
+viminfo                        Compiled with viminfo support.
+vimscript-1            Compiled Vim script version 1 support
+vimscript-2            Compiled Vim script version 2 support
+vimscript-3            Compiled Vim script version 3 support
+virtualedit            Compiled with 'virtualedit' option. (always true)
+visual                 Compiled with Visual mode. (always true)
+visualextra            Compiled with extra Visual mode commands. (always
+                       true) |blockwise-operators|.
+vms                    VMS version of Vim.
+vreplace               Compiled with |gR| and |gr| commands. (always true)
+vtp                    Compiled for vcon support |+vtp| (check vcon to find
+                       out if it works in the current console).
+wildignore             Compiled with 'wildignore' option.
+wildmenu               Compiled with 'wildmenu' option.
+win16                  old version for MS-Windows 3.1 (always false)
+win32                  Win32 version of Vim (MS-Windows 95 and later, 32 or
+                       64 bits)
+win32unix              Win32 version of Vim, using Unix files (Cygwin)
+win64                  Win64 version of Vim (MS-Windows 64 bit).
+win95                  Win32 version for MS-Windows 95/98/ME (always false)
+winaltkeys             Compiled with 'winaltkeys' option.
+windows                        Compiled with support for more than one window.
+                       (always true)
+writebackup            Compiled with 'writebackup' default on.
+xfontset               Compiled with X fontset support |xfontset|.
+xim                    Compiled with X input method support |xim|.
+xpm                    Compiled with pixmap support.
+xpm_w32                        Compiled with pixmap support for Win32. (Only for
+                       backward compatibility. Use "xpm" instead.)
+xsmp                   Compiled with X session management support.
+xsmp_interact          Compiled with interactive X session management support.
+xterm_clipboard                Compiled with support for xterm clipboard.
+xterm_save             Compiled with support for saving and restoring the
+                       xterm screen.
+x11                    Compiled with X11 support.
+
+
+==============================================================================
+4. Matching a pattern in a String                      *string-match*
+
+This is common between several functions.  A regexp pattern as explained at
+|pattern| is normally used to find a match in the buffer lines.  When a
+pattern is used to find a match in a String, almost everything works in the
+same way.  The difference is that a String is handled like it is one line.
+When it contains a "\n" character, this is not seen as a line break for the
+pattern.  It can be matched with a "\n" in the pattern, or with ".".  Example:
+>
+       :let a = "aaaa\nxxxx"
+       :echo matchstr(a, "..\n..")
+       aa
+       xx
+       :echo matchstr(a, "a.x")
+       a
+       x
+
+Don't forget that "^" will only match at the first character of the String and
+"$" at the last character of the string.  They don't match after or before a
+"\n".
+
+ vim:tw=78:ts=8:noet:ft=help:norl:
index 30eec08ee1cc7cbc3347dc4a047fff792d2b33cd..3d2d20316480a781efaf80fe3694b3166557dfb9 100644 (file)
@@ -12,9 +12,10 @@ Note: Expression evaluation can be disabled at compile time.  If this has been
 done, the features in this document are not available.  See |+eval| and
 |no-eval-feature|.
 
-This file is about the backwards compatible Vim script.  For Vim9 script,
-which executes much faster, supports type checking and much more, see
-|vim9.txt|.
+This file is mainly about the backwards compatible (legacy) Vim script.  For
+specifics of Vim9 script, which executes much faster, supports type checking
+and much more, see |vim9.txt|.  Where the syntax or semantics differ a remark
+is given.
 
 1.  Variables                  |variables|
     1.1 Variable types
@@ -2533,10094 +2534,8 @@ v:windowid    When any X11 based GUI is running or when running in a
 
 See |function-list| for a list grouped by what the function is used for.
 
-(Use CTRL-] on the function name to jump to the full explanation.)
-
-USAGE                          RESULT  DESCRIPTION     ~
-
-abs({expr})                    Float or Number  absolute value of {expr}
-acos({expr})                   Float   arc cosine of {expr}
-add({object}, {item})          List/Blob   append {item} to {object}
-and({expr}, {expr})            Number  bitwise AND
-append({lnum}, {text})         Number  append {text} below line {lnum}
-appendbufline({expr}, {lnum}, {text})
-                               Number  append {text} below line {lnum}
-                                       in buffer {expr}
-argc([{winid}])                        Number  number of files in the argument list
-argidx()                       Number  current index in the argument list
-arglistid([{winnr} [, {tabnr}]]) Number        argument list id
-argv({nr} [, {winid}])         String  {nr} entry of the argument list
-argv([-1, {winid}])            List    the argument list
-asin({expr})                   Float   arc sine of {expr}
-assert_beeps({cmd})            Number  assert {cmd} causes a beep
-assert_equal({exp}, {act} [, {msg}])
-                               Number  assert {exp} is equal to {act}
-assert_equalfile({fname-one}, {fname-two} [, {msg}])
-                               Number  assert file contents are equal
-assert_exception({error} [, {msg}])
-                               Number  assert {error} is in v:exception
-assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
-                               Number  assert {cmd} fails
-assert_false({actual} [, {msg}])
-                               Number  assert {actual} is false
-assert_inrange({lower}, {upper}, {actual} [, {msg}])
-                               Number  assert {actual} is inside the range
-assert_match({pat}, {text} [, {msg}])
-                               Number  assert {pat} matches {text}
-assert_nobeep({cmd})           Number  assert {cmd} does not cause a beep
-assert_notequal({exp}, {act} [, {msg}])
-                               Number  assert {exp} is not equal {act}
-assert_notmatch({pat}, {text} [, {msg}])
-                               Number  assert {pat} not matches {text}
-assert_report({msg})           Number  report a test failure
-assert_true({actual} [, {msg}])        Number  assert {actual} is true
-atan({expr})                   Float   arc tangent of {expr}
-atan2({expr1}, {expr2})                Float   arc tangent of {expr1} / {expr2}
-balloon_gettext()              String  current text in the balloon
-balloon_show({expr})           none    show {expr} inside the balloon
-balloon_split({msg})           List    split {msg} as used for a balloon
-blob2list({blob})              List    convert {blob} into a list of numbers
-browse({save}, {title}, {initdir}, {default})
-                               String  put up a file requester
-browsedir({title}, {initdir})  String  put up a directory requester
-bufadd({name})                 Number  add a buffer to the buffer list
-bufexists({buf})               Number  |TRUE| if buffer {buf} exists
-buflisted({buf})               Number  |TRUE| if buffer {buf} is listed
-bufload({buf})                 Number  load buffer {buf} if not loaded yet
-bufloaded({buf})               Number  |TRUE| if buffer {buf} is loaded
-bufname([{buf}])               String  Name of the buffer {buf}
-bufnr([{buf} [, {create}]])    Number  Number of the buffer {buf}
-bufwinid({buf})                        Number  window ID of buffer {buf}
-bufwinnr({buf})                        Number  window number of buffer {buf}
-byte2line({byte})              Number  line number at byte count {byte}
-byteidx({expr}, {nr})          Number  byte index of {nr}'th char in {expr}
-byteidxcomp({expr}, {nr})      Number  byte index of {nr}'th char in {expr}
-call({func}, {arglist} [, {dict}])
-                               any     call {func} with arguments {arglist}
-ceil({expr})                   Float   round {expr} up
-ch_canread({handle})           Number  check if there is something to read
-ch_close({handle})             none    close {handle}
-ch_close_in({handle})          none    close in part of {handle}
-ch_evalexpr({handle}, {expr} [, {options}])
-                               any     evaluate {expr} on JSON {handle}
-ch_evalraw({handle}, {string} [, {options}])
-                               any     evaluate {string} on raw {handle}
-ch_getbufnr({handle}, {what})  Number  get buffer number for {handle}/{what}
-ch_getjob({channel})           Job     get the Job of {channel}
-ch_info({handle})              String  info about channel {handle}
-ch_log({msg} [, {handle}])     none    write {msg} in the channel log file
-ch_logfile({fname} [, {mode}]) none    start logging channel activity
-ch_open({address} [, {options}])
-                               Channel open a channel to {address}
-ch_read({handle} [, {options}]) String read from {handle}
-ch_readblob({handle} [, {options}])
-                               Blob    read Blob from {handle}
-ch_readraw({handle} [, {options}])
-                               String  read raw from {handle}
-ch_sendexpr({handle}, {expr} [, {options}])
-                               any     send {expr} over JSON {handle}
-ch_sendraw({handle}, {expr} [, {options}])
-                               any     send {expr} over raw {handle}
-ch_setoptions({handle}, {options})
-                               none    set options for {handle}
-ch_status({handle} [, {options}])
-                               String  status of channel {handle}
-changenr()                     Number  current change number
-char2nr({expr} [, {utf8}])     Number  ASCII/UTF-8 value of first char in {expr}
-charclass({string})            Number  character class of {string}
-charcol({expr})                        Number  column number of cursor or mark
-charidx({string}, {idx} [, {countcc}])
-                               Number  char index of byte {idx} in {string}
-chdir({dir})                   String  change current working directory
-cindent({lnum})                        Number  C indent for line {lnum}
-clearmatches([{win}])          none    clear all matches
-col({expr})                    Number  column byte index of cursor or mark
-complete({startcol}, {matches}) none   set Insert mode completion
-complete_add({expr})           Number  add completion match
-complete_check()               Number  check for key typed during completion
-complete_info([{what}])                Dict    get current completion information
-confirm({msg} [, {choices} [, {default} [, {type}]]])
-                               Number  number of choice picked by user
-copy({expr})                   any     make a shallow copy of {expr}
-cos({expr})                    Float   cosine of {expr}
-cosh({expr})                   Float   hyperbolic cosine of {expr}
-count({comp}, {expr} [, {ic} [, {start}]])
-                               Number  count how many {expr} are in {comp}
-cscope_connection([{num}, {dbpath} [, {prepend}]])
-                               Number  checks existence of cscope connection
-cursor({lnum}, {col} [, {off}])
-                               Number  move cursor to {lnum}, {col}, {off}
-cursor({list})                 Number  move cursor to position in {list}
-debugbreak({pid})              Number  interrupt process being debugged
-deepcopy({expr} [, {noref}])   any     make a full copy of {expr}
-delete({fname} [, {flags}])    Number  delete the file or directory {fname}
-deletebufline({buf}, {first} [, {last}])
-                               Number  delete lines from buffer {buf}
-did_filetype()                 Number  |TRUE| if FileType autocmd event used
-diff_filler({lnum})            Number  diff filler lines about {lnum}
-diff_hlID({lnum}, {col})       Number  diff highlighting at {lnum}/{col}
-digraph_get({chars})           String  get the |digraph| of {chars}
-digraph_getlist([{listall}])   List    get all |digraph|s
-digraph_set({chars}, {digraph})        Boolean register |digraph|
-digraph_setlist({digraphlist}) Boolean register multiple |digraph|s
-echoraw({expr})                        none    output {expr} as-is
-empty({expr})                  Number  |TRUE| if {expr} is empty
-environ()                      Dict    return environment variables
-escape({string}, {chars})      String  escape {chars} in {string} with '\'
-eval({string})                 any     evaluate {string} into its value
-eventhandler()                 Number  |TRUE| if inside an event handler
-executable({expr})             Number  1 if executable {expr} exists
-execute({command})             String  execute {command} and get the output
-exepath({expr})                        String  full path of the command {expr}
-exists({expr})                 Number  |TRUE| if {expr} exists
-exists_compiled({expr})                Number  |TRUE| if {expr} exists at compile time
-exp({expr})                    Float   exponential of {expr}
-expand({expr} [, {nosuf} [, {list}]])
-                               any     expand special keywords in {expr}
-expandcmd({expr})              String  expand {expr} like with `:edit`
-extend({expr1}, {expr2} [, {expr3}])
-                               List/Dict insert items of {expr2} into {expr1}
-extendnew({expr1}, {expr2} [, {expr3}])
-                               List/Dict like |extend()| but creates a new
-                                       List or Dictionary
-feedkeys({string} [, {mode}])  Number  add key sequence to typeahead buffer
-filereadable({file})           Number  |TRUE| if {file} is a readable file
-filewritable({file})           Number  |TRUE| if {file} is a writable file
-filter({expr1}, {expr2})       List/Dict/Blob/String
-                                       remove items from {expr1} where
-                                       {expr2} is 0
-finddir({name} [, {path} [, {count}]])
-                               String  find directory {name} in {path}
-findfile({name} [, {path} [, {count}]])
-                               String  find file {name} in {path}
-flatten({list} [, {maxdepth}]) List    flatten {list} up to {maxdepth} levels
-flattennew({list} [, {maxdepth}])
-                               List    flatten a copy of {list}
-float2nr({expr})               Number  convert Float {expr} to a Number
-floor({expr})                  Float   round {expr} down
-fmod({expr1}, {expr2})         Float   remainder of {expr1} / {expr2}
-fnameescape({fname})           String  escape special characters in {fname}
-fnamemodify({fname}, {mods})   String  modify file name
-foldclosed({lnum})             Number  first line of fold at {lnum} if closed
-foldclosedend({lnum})          Number  last line of fold at {lnum} if closed
-foldlevel({lnum})              Number  fold level at {lnum}
-foldtext()                     String  line displayed for closed fold
-foldtextresult({lnum})         String  text for closed fold at {lnum}
-foreground()                   Number  bring the Vim window to the foreground
-fullcommand({name})            String  get full command from {name}
-funcref({name} [, {arglist}] [, {dict}])
-                               Funcref reference to function {name}
-function({name} [, {arglist}] [, {dict}])
-                               Funcref named reference to function {name}
-garbagecollect([{atexit}])     none    free memory, breaking cyclic references
-get({list}, {idx} [, {def}])   any     get item {idx} from {list} or {def}
-get({dict}, {key} [, {def}])   any     get item {key} from {dict} or {def}
-get({func}, {what})            any     get property of funcref/partial {func}
-getbufinfo([{buf}])            List    information about buffers
-getbufline({buf}, {lnum} [, {end}])
-                               List    lines {lnum} to {end} of buffer {buf}
-getbufvar({buf}, {varname} [, {def}])
-                               any     variable {varname} in buffer {buf}
-getchangelist([{buf}])         List    list of change list items
-getchar([expr])                        Number or String
-                                       get one character from the user
-getcharmod()                   Number  modifiers for the last typed character
-getcharpos({expr})             List    position of cursor, mark, etc.
-getcharsearch()                        Dict    last character search
-getcharstr([expr])             String  get one character from the user
-getcmdline()                   String  return the current command-line
-getcmdpos()                    Number  return cursor position in command-line
-getcmdtype()                   String  return current command-line type
-getcmdwintype()                        String  return current command-line window type
-getcompletion({pat}, {type} [, {filtered}])
-                               List    list of cmdline completion matches
-getcurpos([{winnr}])           List    position of the cursor
-getcursorcharpos([{winnr}])    List    character position of the cursor
-getcwd([{winnr} [, {tabnr}]])  String  get the current working directory
-getenv({name})                 String  return environment variable
-getfontname([{name}])          String  name of font being used
-getfperm({fname})              String  file permissions of file {fname}
-getfsize({fname})              Number  size in bytes of file {fname}
-getftime({fname})              Number  last modification time of file
-getftype({fname})              String  description of type of file {fname}
-getimstatus()                  Number  |TRUE| if the IME status is active
-getjumplist([{winnr} [, {tabnr}]])
-                               List    list of jump list items
-getline({lnum})                        String  line {lnum} of current buffer
-getline({lnum}, {end})         List    lines {lnum} to {end} of current buffer
-getloclist({nr})               List    list of location list items
-getloclist({nr}, {what})       Dict    get specific location list properties
-getmarklist([{buf}])           List    list of global/local marks
-getmatches([{win}])            List    list of current matches
-getmousepos()                  Dict    last known mouse position
-getpid()                       Number  process ID of Vim
-getpos({expr})                 List    position of cursor, mark, etc.
-getqflist()                    List    list of quickfix items
-getqflist({what})              Dict    get specific quickfix list properties
-getreg([{regname} [, 1 [, {list}]]])
-                               String or List   contents of a register
-getreginfo([{regname}])                Dict    information about a register
-getregtype([{regname}])                String  type of a register
-gettabinfo([{expr}])           List    list of tab pages
-gettabvar({nr}, {varname} [, {def}])
-                               any     variable {varname} in tab {nr} or {def}
-gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
-                               any     {name} in {winnr} in tab page {tabnr}
-gettagstack([{nr}])            Dict    get the tag stack of window {nr}
-gettext({text})                        String  lookup translation of {text}
-getwininfo([{winid}])          List    list of info about each window
-getwinpos([{timeout}])         List    X and Y coord in pixels of the Vim window
-getwinposx()                   Number  X coord in pixels of the Vim window
-getwinposy()                   Number  Y coord in pixels of the Vim window
-getwinvar({nr}, {varname} [, {def}])
-                               any     variable {varname} in window {nr}
-glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
-                               any     expand file wildcards in {expr}
-glob2regpat({expr})            String  convert a glob pat into a search pat
-globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
-                               String  do glob({expr}) for all dirs in {path}
-has({feature} [, {check}])     Number  |TRUE| if feature {feature} supported
-has_key({dict}, {key})         Number  |TRUE| if {dict} has entry {key}
-haslocaldir([{winnr} [, {tabnr}]])
-                               Number  |TRUE| if the window executed |:lcd|
-                                       or |:tcd|
-hasmapto({what} [, {mode} [, {abbr}]])
-                               Number  |TRUE| if mapping to {what} exists
-histadd({history}, {item})     Number  add an item to a history
-histdel({history} [, {item}])  Number  remove an item from a history
-histget({history} [, {index}]) String  get the item {index} from a history
-histnr({history})              Number  highest index of a history
-hlID({name})                   Number  syntax ID of highlight group {name}
-hlexists({name})               Number  |TRUE| if highlight group {name} exists
-hlget([{name} [, {resolve}]])  List    get highlight group attributes
-hlset({list})                  Number  set highlight group attributes
-hostname()                     String  name of the machine Vim is running on
-iconv({expr}, {from}, {to})    String  convert encoding of {expr}
-indent({lnum})                 Number  indent of line {lnum}
-index({object}, {expr} [, {start} [, {ic}]])
-                               Number  index in {object} where {expr} appears
-input({prompt} [, {text} [, {completion}]])
-                               String  get input from the user
-inputdialog({prompt} [, {text} [, {completion}]])
-                               String  like input() but in a GUI dialog
-inputlist({textlist})          Number  let the user pick from a choice list
-inputrestore()                 Number  restore typeahead
-inputsave()                    Number  save and clear typeahead
-inputsecret({prompt} [, {text}]) String        like input() but hiding the text
-insert({object}, {item} [, {idx}]) List        insert {item} in {object} [before {idx}]
-interrupt()                    none    interrupt script execution
-invert({expr})                 Number  bitwise invert
-isdirectory({directory})       Number  |TRUE| if {directory} is a directory
-isinf({expr})                  Number  determine if {expr} is infinity value
-                                       (positive or negative)
-islocked({expr})               Number  |TRUE| if {expr} is locked
-isnan({expr})                  Number  |TRUE| if {expr} is NaN
-items({dict})                  List    key-value pairs in {dict}
-job_getchannel({job})          Channel get the channel handle for {job}
-job_info([{job}])              Dict    get information about {job}
-job_setoptions({job}, {options}) none  set options for {job}
-job_start({command} [, {options}])
-                               Job     start a job
-job_status({job})              String  get the status of {job}
-job_stop({job} [, {how}])      Number  stop {job}
-join({list} [, {sep}])         String  join {list} items into one String
-js_decode({string})            any     decode JS style JSON
-js_encode({expr})              String  encode JS style JSON
-json_decode({string})          any     decode JSON
-json_encode({expr})            String  encode JSON
-keys({dict})                   List    keys in {dict}
-len({expr})                    Number  the length of {expr}
-libcall({lib}, {func}, {arg})  String  call {func} in library {lib} with {arg}
-libcallnr({lib}, {func}, {arg})        Number  idem, but return a Number
-line({expr} [, {winid}])       Number  line nr of cursor, last line or mark
-line2byte({lnum})              Number  byte count of line {lnum}
-lispindent({lnum})             Number  Lisp indent for line {lnum}
-list2blob({list})              Blob    turn {list} of numbers into a Blob
-list2str({list} [, {utf8}])    String  turn {list} of numbers into a String
-listener_add({callback} [, {buf}])
-                               Number  add a callback to listen to changes
-listener_flush([{buf}])                none    invoke listener callbacks
-listener_remove({id})          none    remove a listener callback
-localtime()                    Number  current time
-log({expr})                    Float   natural logarithm (base e) of {expr}
-log10({expr})                  Float   logarithm of Float {expr} to base 10
-luaeval({expr} [, {expr}])     any     evaluate |Lua| expression
-map({expr1}, {expr2})          List/Dict/Blob/String
-                                       change each item in {expr1} to {expr2}
-maparg({name} [, {mode} [, {abbr} [, {dict}]]])
-                               String or Dict
-                                       rhs of mapping {name} in mode {mode}
-mapcheck({name} [, {mode} [, {abbr}]])
-                               String  check for mappings matching {name}
-mapnew({expr1}, {expr2})       List/Dict/Blob/String
-                                       like |map()| but creates a new List or
-                                       Dictionary
-mapset({mode}, {abbr}, {dict}) none    restore mapping from |maparg()| result
-match({expr}, {pat} [, {start} [, {count}]])
-                               Number  position where {pat} matches in {expr}
-matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
-                               Number  highlight {pattern} with {group}
-matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
-                               Number  highlight positions with {group}
-matcharg({nr})                 List    arguments of |:match|
-matchdelete({id} [, {win}])    Number  delete match identified by {id}
-matchend({expr}, {pat} [, {start} [, {count}]])
-                               Number  position where {pat} ends in {expr}
-matchfuzzy({list}, {str} [, {dict}])
-                               List    fuzzy match {str} in {list}
-matchfuzzypos({list}, {str} [, {dict}])
-                               List    fuzzy match {str} in {list}
-matchlist({expr}, {pat} [, {start} [, {count}]])
-                               List    match and submatches of {pat} in {expr}
-matchstr({expr}, {pat} [, {start} [, {count}]])
-                               String  {count}'th match of {pat} in {expr}
-matchstrpos({expr}, {pat} [, {start} [, {count}]])
-                               List    {count}'th match of {pat} in {expr}
-max({expr})                    Number  maximum value of items in {expr}
-menu_info({name} [, {mode}])   Dict    get menu item information
-min({expr})                    Number  minimum value of items in {expr}
-mkdir({name} [, {path} [, {prot}]])
-                               Number  create directory {name}
-mode([expr])                   String  current editing mode
-mzeval({expr})                 any     evaluate |MzScheme| expression
-nextnonblank({lnum})           Number  line nr of non-blank line >= {lnum}
-nr2char({expr} [, {utf8}])     String  single char with ASCII/UTF-8 value {expr}
-or({expr}, {expr})             Number  bitwise OR
-pathshorten({expr} [, {len}])  String  shorten directory names in a path
-perleval({expr})               any     evaluate |Perl| expression
-popup_atcursor({what}, {options}) Number create popup window near the cursor
-popup_beval({what}, {options}) Number  create popup window for 'ballooneval'
-popup_clear()                  none    close all popup windows
-popup_close({id} [, {result}]) none    close popup window {id}
-popup_create({what}, {options}) Number create a popup window
-popup_dialog({what}, {options}) Number create a popup window used as a dialog
-popup_filter_menu({id}, {key})  Number filter for a menu popup window
-popup_filter_yesno({id}, {key}) Number filter for a dialog popup window
-popup_findinfo()               Number  get window ID of info popup window
-popup_findpreview()            Number  get window ID of preview popup window
-popup_getoptions({id})         Dict    get options of popup window {id}
-popup_getpos({id})             Dict    get position of popup window {id}
-popup_hide({id})               none    hide popup menu {id}
-popup_list()                   List    get a list of window IDs of all popups
-popup_locate({row}, {col})     Number  get window ID of popup at position
-popup_menu({what}, {options})  Number  create a popup window used as a menu
-popup_move({id}, {options})    none    set position of popup window {id}
-popup_notification({what}, {options})
-                               Number  create a notification popup window
-popup_setoptions({id}, {options})
-                               none    set options for popup window {id}
-popup_settext({id}, {text})    none    set the text of popup window {id}
-popup_show({id})               none    unhide popup window {id}
-pow({x}, {y})                  Float   {x} to the power of {y}
-prevnonblank({lnum})           Number  line nr of non-blank line <= {lnum}
-printf({fmt}, {expr1}...)      String  format text
-prompt_getprompt({buf})                String  get prompt text
-prompt_setcallback({buf}, {expr}) none set prompt callback function
-prompt_setinterrupt({buf}, {text}) none        set prompt interrupt function
-prompt_setprompt({buf}, {text}) none   set prompt text
-prop_add({lnum}, {col}, {props})  none add one text property
-prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
-                               none    add multiple text properties
-prop_clear({lnum} [, {lnum-end} [, {props}]])
-                               none    remove all text properties
-prop_find({props} [, {direction}])
-                               Dict    search for a text property
-prop_list({lnum} [, {props}])  List    text properties in {lnum}
-prop_remove({props} [, {lnum} [, {lnum-end}]])
-                               Number  remove a text property
-prop_type_add({name}, {props}) none    define a new property type
-prop_type_change({name}, {props})
-                               none    change an existing property type
-prop_type_delete({name} [, {props}])
-                               none    delete a property type
-prop_type_get({name} [, {props}])
-                               Dict    get property type values
-prop_type_list([{props}])      List    get list of property types
-pum_getpos()                   Dict    position and size of pum if visible
-pumvisible()                   Number  whether popup menu is visible
-py3eval({expr})                        any     evaluate |python3| expression
-pyeval({expr})                 any     evaluate |Python| expression
-pyxeval({expr})                        any     evaluate |python_x| expression
-rand([{expr}])                 Number  get pseudo-random number
-range({expr} [, {max} [, {stride}]])
-                               List    items from {expr} to {max}
-readblob({fname})              Blob    read a |Blob| from {fname}
-readdir({dir} [, {expr} [, {dict}]])
-                               List    file names in {dir} selected by {expr}
-readdirex({dir} [, {expr} [, {dict}]])
-                               List    file info in {dir} selected by {expr}
-readfile({fname} [, {type} [, {max}]])
-                               List    get list of lines from file {fname}
-reduce({object}, {func} [, {initial}])
-                               any     reduce {object} using {func}
-reg_executing()                        String  get the executing register name
-reg_recording()                        String  get the recording register name
-reltime([{start} [, {end}]])   List    get time value
-reltimefloat({time})           Float   turn the time value into a Float
-reltimestr({time})             String  turn time value into a String
-remote_expr({server}, {string} [, {idvar} [, {timeout}]])
-                               String  send expression
-remote_foreground({server})    Number  bring Vim server to the foreground
-remote_peek({serverid} [, {retvar}])
-                               Number  check for reply string
-remote_read({serverid} [, {timeout}])
-                               String  read reply string
-remote_send({server}, {string} [, {idvar}])
-                               String  send key sequence
-remote_startserver({name})     none    become server {name}
-remove({list}, {idx} [, {end}])        any/List
-                                       remove items {idx}-{end} from {list}
-remove({blob}, {idx} [, {end}])        Number/Blob
-                                       remove bytes {idx}-{end} from {blob}
-remove({dict}, {key})          any     remove entry {key} from {dict}
-rename({from}, {to})           Number  rename (move) file from {from} to {to}
-repeat({expr}, {count})                String  repeat {expr} {count} times
-resolve({filename})            String  get filename a shortcut points to
-reverse({list})                        List    reverse {list} in-place
-round({expr})                  Float   round off {expr}
-rubyeval({expr})               any     evaluate |Ruby| expression
-screenattr({row}, {col})       Number  attribute at screen position
-screenchar({row}, {col})       Number  character at screen position
-screenchars({row}, {col})      List    List of characters at screen position
-screencol()                    Number  current cursor column
-screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character
-screenrow()                    Number  current cursor row
-screenstring({row}, {col})     String  characters at screen position
-search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
-                               Number  search for {pattern}
-searchcount([{options}])       Dict    get or update search stats
-searchdecl({name} [, {global} [, {thisblock}]])
-                               Number  search for variable declaration
-searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
-                               Number  search for other end of start/end pair
-searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
-                               List    search for other end of start/end pair
-searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
-                               List    search for {pattern}
-server2client({clientid}, {string})
-                               Number  send reply string
-serverlist()                   String  get a list of available servers
-setbufline({expr}, {lnum}, {text})
-                               Number  set line {lnum} to {text} in buffer
-                                       {expr}
-setbufvar({buf}, {varname}, {val})
-                               none    set {varname} in buffer {buf} to {val}
-setcellwidths({list})          none    set character cell width overrides
-setcharpos({expr}, {list})     Number  set the {expr} position to {list}
-setcharsearch({dict})          Dict    set character search from {dict}
-setcmdpos({pos})               Number  set cursor position in command-line
-setcursorcharpos({list})       Number  move cursor to position in {list}
-setenv({name}, {val})          none    set environment variable
-setfperm({fname}, {mode})      Number  set {fname} file permissions to {mode}
-setline({lnum}, {line})                Number  set line {lnum} to {line}
-setloclist({nr}, {list} [, {action}])
-                               Number  modify location list using {list}
-setloclist({nr}, {list}, {action}, {what})
-                               Number  modify specific location list props
-setmatches({list} [, {win}])   Number  restore a list of matches
-setpos({expr}, {list})         Number  set the {expr} position to {list}
-setqflist({list} [, {action}]) Number  modify quickfix list using {list}
-setqflist({list}, {action}, {what})
-                               Number  modify specific quickfix list props
-setreg({n}, {v} [, {opt}])     Number  set register to value and type
-settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
-settabwinvar({tabnr}, {winnr}, {varname}, {val})
-                               none    set {varname} in window {winnr} in tab
-                                       page {tabnr} to {val}
-settagstack({nr}, {dict} [, {action}])
-                               Number  modify tag stack using {dict}
-setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val}
-sha256({string})               String  SHA256 checksum of {string}
-shellescape({string} [, {special}])
-                               String  escape {string} for use as shell
-                                       command argument
-shiftwidth([{col}])            Number  effective value of 'shiftwidth'
-sign_define({name} [, {dict}]) Number  define or update a sign
-sign_define({list})            List    define or update a list of signs
-sign_getdefined([{name}])      List    get a list of defined signs
-sign_getplaced([{buf} [, {dict}]])
-                               List    get a list of placed signs
-sign_jump({id}, {group}, {buf})
-                               Number  jump to a sign
-sign_place({id}, {group}, {name}, {buf} [, {dict}])
-                               Number  place a sign
-sign_placelist({list})         List    place a list of signs
-sign_undefine([{name}])                Number  undefine a sign
-sign_undefine({list})          List    undefine a list of signs
-sign_unplace({group} [, {dict}])
-                               Number  unplace a sign
-sign_unplacelist({list})       List    unplace a list of signs
-simplify({filename})           String  simplify filename as much as possible
-sin({expr})                    Float   sine of {expr}
-sinh({expr})                   Float   hyperbolic sine of {expr}
-slice({expr}, {start} [, {end}])  String, List or Blob
-                                       slice of a String, List or Blob
-sort({list} [, {func} [, {dict}]])
-                               List    sort {list}, using {func} to compare
-sound_clear()                  none    stop playing all sounds
-sound_playevent({name} [, {callback}])
-                               Number  play an event sound
-sound_playfile({path} [, {callback}])
-                               Number  play sound file {path}
-sound_stop({id})               none    stop playing sound {id}
-soundfold({word})              String  sound-fold {word}
-spellbadword()                 String  badly spelled word at cursor
-spellsuggest({word} [, {max} [, {capital}]])
-                               List    spelling suggestions
-split({expr} [, {pat} [, {keepempty}]])
-                               List    make |List| from {pat} separated {expr}
-sqrt({expr})                   Float   square root of {expr}
-srand([{expr}])                        List    get seed for |rand()|
-state([{what}])                        String  current state of Vim
-str2float({expr} [, {quoted}]) Float   convert String to Float
-str2list({expr} [, {utf8}])    List    convert each character of {expr} to
-                                       ASCII/UTF-8 value
-str2nr({expr} [, {base} [, {quoted}]])
-                               Number  convert String to Number
-strcharlen({expr})             Number  character length of the String {expr}
-strcharpart({str}, {start} [, {len} [, {skipcc}]])
-                               String  {len} characters of {str} at
-                                       character {start}
-strchars({expr} [, {skipcc}])  Number  character count of the String {expr}
-strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
-strftime({format} [, {time}])  String  format time with a specified format
-strgetchar({str}, {index})     Number  get char {index} from {str}
-stridx({haystack}, {needle} [, {start}])
-                               Number  index of {needle} in {haystack}
-string({expr})                 String  String representation of {expr} value
-strlen({expr})                 Number  length of the String {expr}
-strpart({str}, {start} [, {len} [, {chars}]])
-                               String  {len} bytes/chars of {str} at
-                                       byte {start}
-strptime({format}, {timestring})
-                               Number  Convert {timestring} to unix timestamp
-strridx({haystack}, {needle} [, {start}])
-                               Number  last index of {needle} in {haystack}
-strtrans({expr})               String  translate string to make it printable
-strwidth({expr})               Number  display cell length of the String {expr}
-submatch({nr} [, {list}])      String or List
-                                       specific match in ":s" or substitute()
-substitute({expr}, {pat}, {sub}, {flags})
-                               String  all {pat} in {expr} replaced with {sub}
-swapinfo({fname})              Dict    information about swap file {fname}
-swapname({buf})                        String  swap file of buffer {buf}
-synID({lnum}, {col}, {trans})  Number  syntax ID at {lnum} and {col}
-synIDattr({synID}, {what} [, {mode}])
-                               String  attribute {what} of syntax ID {synID}
-synIDtrans({synID})            Number  translated syntax ID of {synID}
-synconcealed({lnum}, {col})    List    info about concealing
-synstack({lnum}, {col})                List    stack of syntax IDs at {lnum} and {col}
-system({expr} [, {input}])     String  output of shell command/filter {expr}
-systemlist({expr} [, {input}]) List    output of shell command/filter {expr}
-tabpagebuflist([{arg}])                List    list of buffer numbers in tab page
-tabpagenr([{arg}])             Number  number of current or last tab page
-tabpagewinnr({tabarg} [, {arg}]) Number        number of current window in tab page
-tagfiles()                     List    tags files used
-taglist({expr} [, {filename}]) List    list of tags matching {expr}
-tan({expr})                    Float   tangent of {expr}
-tanh({expr})                   Float   hyperbolic tangent of {expr}
-tempname()                     String  name for a temporary file
-term_dumpdiff({filename}, {filename} [, {options}])
-                               Number  display difference between two dumps
-term_dumpload({filename} [, {options}])
-                               Number  displaying a screen dump
-term_dumpwrite({buf}, {filename} [, {options}])
-                               none    dump terminal window contents
-term_getaltscreen({buf})       Number  get the alternate screen flag
-term_getansicolors({buf})      List    get ANSI palette in GUI color mode
-term_getattr({attr}, {what})   Number  get the value of attribute {what}
-term_getcursor({buf})          List    get the cursor position of a terminal
-term_getjob({buf})             Job     get the job associated with a terminal
-term_getline({buf}, {row})     String  get a line of text from a terminal
-term_getscrolled({buf})                Number  get the scroll count of a terminal
-term_getsize({buf})            List    get the size of a terminal
-term_getstatus({buf})          String  get the status of a terminal
-term_gettitle({buf})           String  get the title of a terminal
-term_gettty({buf}, [{input}])  String  get the tty name of a terminal
-term_list()                    List    get the list of terminal buffers
-term_scrape({buf}, {row})      List    get row of a terminal screen
-term_sendkeys({buf}, {keys})   none    send keystrokes to a terminal
-term_setansicolors({buf}, {colors})
-                               none    set ANSI palette in GUI color mode
-term_setapi({buf}, {expr})     none    set |terminal-api| function name prefix
-term_setkill({buf}, {how})     none    set signal to stop job in terminal
-term_setrestore({buf}, {command}) none set command to restore terminal
-term_setsize({buf}, {rows}, {cols})
-                               none    set the size of a terminal
-term_start({cmd} [, {options}])        Number  open a terminal window and run a job
-term_wait({buf} [, {time}])    Number  wait for screen to be updated
-terminalprops()                        Dict    properties of the terminal
-test_alloc_fail({id}, {countdown}, {repeat})
-                               none    make memory allocation fail
-test_autochdir()               none    enable 'autochdir' during startup
-test_feedinput({string})       none    add key sequence to input buffer
-test_garbagecollect_now()      none    free memory right now for testing
-test_garbagecollect_soon()     none    free memory soon for testing
-test_getvalue({string})                any     get value of an internal variable
-test_gui_drop_files({list}, {row}, {col}, {mods})
-                               none    drop a list of files in a window
-test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
-                               none    add a mouse event to the input buffer
-test_ignore_error({expr})      none    ignore a specific error
-test_null_blob()               Blob    null value for testing
-test_null_channel()            Channel null value for testing
-test_null_dict()               Dict    null value for testing
-test_null_function()           Funcref null value for testing
-test_null_job()                        Job     null value for testing
-test_null_list()               List    null value for testing
-test_null_partial()            Funcref null value for testing
-test_null_string()             String  null value for testing
-test_option_not_set({name})    none    reset flag indicating option was set
-test_override({expr}, {val})   none    test with Vim internal overrides
-test_refcount({expr})          Number  get the reference count of {expr}
-test_scrollbar({which}, {value}, {dragging})
-                               none    scroll in the GUI for testing
-test_setmouse({row}, {col})    none    set the mouse position for testing
-test_settime({expr})           none    set current time for testing
-test_srand_seed([seed])                none    set seed for testing srand()
-test_unknown()                 any     unknown value for testing
-test_void()                    any     void value for testing
-timer_info([{id}])             List    information about timers
-timer_pause({id}, {pause})     none    pause or unpause a timer
-timer_start({time}, {callback} [, {options}])
-                               Number  create a timer
-timer_stop({timer})            none    stop a timer
-timer_stopall()                        none    stop all timers
-tolower({expr})                        String  the String {expr} switched to lowercase
-toupper({expr})                        String  the String {expr} switched to uppercase
-tr({src}, {fromstr}, {tostr})  String  translate chars of {src} in {fromstr}
-                                       to chars in {tostr}
-trim({text} [, {mask} [, {dir}]])
-                               String  trim characters in {mask} from {text}
-trunc({expr})                  Float   truncate Float {expr}
-type({expr})                   Number  type of value {expr}
-typename({expr})               String  representation of the type of {expr}
-undofile({name})               String  undo file name for {name}
-undotree()                     List    undo file tree
-uniq({list} [, {func} [, {dict}]])
-                               List    remove adjacent duplicates from a list
-values({dict})                 List    values in {dict}
-virtcol({expr})                        Number  screen column of cursor or mark
-visualmode([expr])             String  last visual mode used
-wildmenumode()                 Number  whether 'wildmenu' mode is active
-win_execute({id}, {command} [, {silent}])
-                               String  execute {command} in window {id}
-win_findbuf({bufnr})           List    find windows containing {bufnr}
-win_getid([{win} [, {tab}]])   Number  get window ID for {win} in {tab}
-win_gettype([{nr}])            String  type of window {nr}
-win_gotoid({expr})             Number  go to window with ID {expr}
-win_id2tabwin({expr})          List    get tab and window nr from window ID
-win_id2win({expr})             Number  get window nr from window ID
-win_screenpos({nr})            List    get screen position of window {nr}
-win_splitmove({nr}, {target} [, {options}])
-                               Number  move window {nr} to split of {target}
-winbufnr({nr})                 Number  buffer number of window {nr}
-wincol()                       Number  window column of the cursor
-windowsversion()               String  MS-Windows OS version
-winheight({nr})                        Number  height of window {nr}
-winlayout([{tabnr}])           List    layout of windows in tab {tabnr}
-winline()                      Number  window line of the cursor
-winnr([{expr}])                        Number  number of current window
-winrestcmd()                   String  returns command to restore window sizes
-winrestview({dict})            none    restore view of current window
-winsaveview()                  Dict    save view of current window
-winwidth({nr})                 Number  width of window {nr}
-wordcount()                    Dict    get byte/char/word statistics
-writefile({object}, {fname} [, {flags}])
-                               Number  write |Blob| or |List| of lines to file
-xor({expr}, {expr})            Number  bitwise XOR
-
-
-abs({expr})                                                    *abs()*
-               Return the absolute value of {expr}.  When {expr} evaluates to
-               a |Float| abs() returns a |Float|.  When {expr} can be
-               converted to a |Number| abs() returns a |Number|.  Otherwise
-               abs() gives an error message and returns -1.
-               Examples: >
-                       echo abs(1.456)
-<                      1.456  >
-                       echo abs(-5.456)
-<                      5.456  >
-                       echo abs(-4)
-<                      4
-
-               Can also be used as a |method|: >
-                       Compute()->abs()
-
-<              {only available when compiled with the |+float| feature}
-
-
-acos({expr})                                                   *acos()*
-               Return the arc cosine of {expr} measured in radians, as a
-               |Float| in the range of [0, pi].
-               {expr} must evaluate to a |Float| or a |Number| in the range
-               [-1, 1].
-               Examples: >
-                       :echo acos(0)
-<                      1.570796 >
-                       :echo acos(-0.5)
-<                      2.094395
-
-               Can also be used as a |method|: >
-                       Compute()->acos()
-
-<              {only available when compiled with the |+float| feature}
-
-
-add({object}, {expr})                                  *add()*
-               Append the item {expr} to |List| or |Blob| {object}.  Returns
-               the resulting |List| or |Blob|.  Examples: >
-                       :let alist = add([1, 2, 3], item)
-                       :call add(mylist, "woodstock")
-<              Note that when {expr} is a |List| it is appended as a single
-               item.  Use |extend()| to concatenate |Lists|.
-               When {object} is a |Blob| then  {expr} must be a number.
-               Use |insert()| to add an item at another position.
-
-               Can also be used as a |method|: >
-                       mylist->add(val1)->add(val2)
-
-
-and({expr}, {expr})                                    *and()*
-               Bitwise AND on the two arguments.  The arguments are converted
-               to a number.  A List, Dict or Float argument causes an error.
-               Example: >
-                       :let flag = and(bits, 0x80)
-<              Can also be used as a |method|: >
-                       :let flag = bits->and(0x80)
-
-
-append({lnum}, {text})                                 *append()*
-               When {text} is a |List|: Append each item of the |List| as a
-               text line below line {lnum} in the current buffer.
-               Otherwise append {text} as one text line below line {lnum} in
-               the current buffer.
-               Any type of item is accepted and converted to a String.
-               {lnum} can be zero to insert a line before the first one.
-               {lnum} is used like with |getline()|.
-               Returns 1 for failure ({lnum} out of range or out of memory),
-               0 for success.  Example: >
-                       :let failed = append(line('$'), "# THE END")
-                       :let failed = append(0, ["Chapter 1", "the beginning"])
-
-<              Can also be used as a |method| after a List, the base is
-               passed as the second argument: >
-                       mylist->append(lnum)
-
-
-appendbufline({buf}, {lnum}, {text})                   *appendbufline()*
-               Like |append()| but append the text in buffer {buf}.
-
-               This function works only for loaded buffers. First call
-               |bufload()| if needed.
-
-               For the use of {buf}, see |bufname()|.
-
-               {lnum} is used like with |append()|.  Note that using |line()|
-               would use the current buffer, not the one appending to.
-               Use "$" to append at the end of the buffer.
-
-               On success 0 is returned, on failure 1 is returned.
-
-               If {buf} is not a valid buffer or {lnum} is not valid, an
-               error message is given. Example: >
-                       :let failed = appendbufline(13, 0, "# THE START")
-<
-               Can also be used as a |method| after a List, the base is
-               passed as the second argument: >
-                       mylist->appendbufline(buf, lnum)
-
-
-argc([{winid}])                                        *argc()*
-               The result is the number of files in the argument list.  See
-               |arglist|.
-               If {winid} is not supplied, the argument list of the current
-               window is used.
-               If {winid} is -1, the global argument list is used.
-               Otherwise {winid} specifies the window of which the argument
-               list is used: either the window number or the window ID.
-               Returns -1 if the {winid} argument is invalid.
-
-                                                       *argidx()*
-argidx()       The result is the current index in the argument list.  0 is
-               the first file.  argc() - 1 is the last one.  See |arglist|.
-
-                                                       *arglistid()*
-arglistid([{winnr} [, {tabnr}]])
-               Return the argument list ID.  This is a number which
-               identifies the argument list being used.  Zero is used for the
-               global argument list.  See |arglist|.
-               Returns -1 if the arguments are invalid.
-
-               Without arguments use the current window.
-               With {winnr} only use this window in the current tab page.
-               With {winnr} and {tabnr} use the window in the specified tab
-               page.
-               {winnr} can be the window number or the |window-ID|.
-
-                                                       *argv()*
-argv([{nr} [, {winid}]])
-               The result is the {nr}th file in the argument list.  See
-               |arglist|.  "argv(0)" is the first one.  Example: >
-       :let i = 0
-       :while i < argc()
-       :  let f = escape(fnameescape(argv(i)), '.')
-       :  exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
-       :  let i = i + 1
-       :endwhile
-<              Without the {nr} argument, or when {nr} is -1, a |List| with
-               the whole |arglist| is returned.
-
-               The {winid} argument specifies the window ID, see |argc()|.
-               For the Vim command line arguments see |v:argv|.
-
-asin({expr})                                           *asin()*
-               Return the arc sine of {expr} measured in radians, as a |Float|
-               in the range of [-pi/2, pi/2].
-               {expr} must evaluate to a |Float| or a |Number| in the range
-               [-1, 1].
-               Examples: >
-                       :echo asin(0.8)
-<                      0.927295 >
-                       :echo asin(-0.5)
-<                      -0.523599
-
-               Can also be used as a |method|: >
-                       Compute()->asin()
-<
-               {only available when compiled with the |+float| feature}
-
-
-assert_ functions are documented here: |assert-functions-details|
-
-
-
-atan({expr})                                           *atan()*
-               Return the principal value of the arc tangent of {expr}, in
-               the range [-pi/2, +pi/2] radians, as a |Float|.
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo atan(100)
-<                      1.560797 >
-                       :echo atan(-4.01)
-<                      -1.326405
-
-               Can also be used as a |method|: >
-                       Compute()->atan()
-<
-               {only available when compiled with the |+float| feature}
-
-
-atan2({expr1}, {expr2})                                        *atan2()*
-               Return the arc tangent of {expr1} / {expr2}, measured in
-               radians, as a |Float| in the range [-pi, pi].
-               {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo atan2(-1, 1)
-<                      -0.785398 >
-                       :echo atan2(1, -1)
-<                      2.356194
-
-               Can also be used as a |method|: >
-                       Compute()->atan2(1)
-<
-               {only available when compiled with the |+float| feature}
-
-balloon_gettext()                                      *balloon_gettext()*
-               Return the current text in the balloon.  Only for the string,
-               not used for the List.
-
-balloon_show({expr})                                   *balloon_show()*
-               Show {expr} inside the balloon.  For the GUI {expr} is used as
-               a string.  For a terminal {expr} can be a list, which contains
-               the lines of the balloon.  If {expr} is not a list it will be
-               split with |balloon_split()|.
-               If {expr} is an empty string any existing balloon is removed.
-
-               Example: >
-                       func GetBalloonContent()
-                          " ... initiate getting the content
-                          return ''
-                       endfunc
-                       set balloonexpr=GetBalloonContent()
-
-                       func BalloonCallback(result)
-                         call balloon_show(a:result)
-                       endfunc
-<              Can also be used as a |method|: >
-                       GetText()->balloon_show()
-<
-               The intended use is that fetching the content of the balloon
-               is initiated from 'balloonexpr'.  It will invoke an
-               asynchronous method, in which a callback invokes
-               balloon_show().  The 'balloonexpr' itself can return an
-               empty string or a placeholder.
-
-               When showing a balloon is not possible nothing happens, no
-               error message.
-               {only available when compiled with the |+balloon_eval| or
-               |+balloon_eval_term| feature}
-
-balloon_split({msg})                                   *balloon_split()*
-               Split String {msg} into lines to be displayed in a balloon.
-               The splits are made for the current window size and optimize
-               to show debugger output.
-               Returns a |List| with the split lines.
-               Can also be used as a |method|: >
-                       GetText()->balloon_split()->balloon_show()
-
-<              {only available when compiled with the |+balloon_eval_term|
-               feature}
-
-blob2list({blob})                                      *blob2list()*
-               Return a List containing the number value of each byte in Blob
-               {blob}.  Examples: >
-                       blob2list(0z0102.0304)  returns [1, 2, 3, 4]
-                       blob2list(0z)           returns []
-<              Returns an empty List on error.  |list2blob()| does the
-               opposite.
-
-               Can also be used as a |method|: >
-                       GetBlob()->blob2list()
-
-                                                       *browse()*
-browse({save}, {title}, {initdir}, {default})
-               Put up a file requester.  This only works when "has("browse")"
-               returns |TRUE| (only in some GUI versions).
-               The input fields are:
-                   {save}      when |TRUE|, select file to write
-                   {title}     title for the requester
-                   {initdir}   directory to start browsing in
-                   {default}   default file name
-               An empty string is returned when the "Cancel" button is hit,
-               something went wrong, or browsing is not possible.
-
-                                                       *browsedir()*
-browsedir({title}, {initdir})
-               Put up a directory requester.  This only works when
-               "has("browse")" returns |TRUE| (only in some GUI versions).
-               On systems where a directory browser is not supported a file
-               browser is used.  In that case: select a file in the directory
-               to be used.
-               The input fields are:
-                   {title}     title for the requester
-                   {initdir}   directory to start browsing in
-               When the "Cancel" button is hit, something went wrong, or
-               browsing is not possible, an empty string is returned.
-
-bufadd({name})                                         *bufadd()*
-               Add a buffer to the buffer list with String {name}.
-               If a buffer for file {name} already exists, return that buffer
-               number.  Otherwise return the buffer number of the newly
-               created buffer.  When {name} is an empty string then a new
-               buffer is always created.
-               The buffer will not have 'buflisted' set and not be loaded
-               yet.  To add some text to the buffer use this: >
-                       let bufnr = bufadd('someName')
-                       call bufload(bufnr)
-                       call setbufline(bufnr, 1, ['some', 'text'])
-<              Can also be used as a |method|: >
-                       let bufnr = 'somename'->bufadd()
-
-bufexists({buf})                                       *bufexists()*
-               The result is a Number, which is |TRUE| if a buffer called
-               {buf} exists.
-               If the {buf} argument is a number, buffer numbers are used.
-               Number zero is the alternate buffer for the current window.
-
-               If the {buf} argument is a string it must match a buffer name
-               exactly.  The name can be:
-               - Relative to the current directory.
-               - A full path.
-               - The name of a buffer with 'buftype' set to "nofile".
-               - A URL name.
-               Unlisted buffers will be found.
-               Note that help files are listed by their short name in the
-               output of |:buffers|, but bufexists() requires using their
-               long name to be able to find them.
-               bufexists() may report a buffer exists, but to use the name
-               with a |:buffer| command you may need to use |expand()|.  Esp
-               for MS-Windows 8.3 names in the form "c:\DOCUME~1"
-               Use "bufexists(0)" to test for the existence of an alternate
-               file name.
-
-               Can also be used as a |method|: >
-                       let exists = 'somename'->bufexists()
-<
-               Obsolete name: buffer_exists().         *buffer_exists()*
-
-buflisted({buf})                                       *buflisted()*
-               The result is a Number, which is |TRUE| if a buffer called
-               {buf} exists and is listed (has the 'buflisted' option set).
-               The {buf} argument is used like with |bufexists()|.
-
-               Can also be used as a |method|: >
-                       let listed = 'somename'->buflisted()
-
-bufload({buf})                                         *bufload()*
-               Ensure the buffer {buf} is loaded.  When the buffer name
-               refers to an existing file then the file is read.  Otherwise
-               the buffer will be empty.  If the buffer was already loaded
-               then there is no change.
-               If there is an existing swap file for the file of the buffer,
-               there will be no dialog, the buffer will be loaded anyway.
-               The {buf} argument is used like with |bufexists()|.
-
-               Can also be used as a |method|: >
-                       eval 'somename'->bufload()
-
-bufloaded({buf})                                       *bufloaded()*
-               The result is a Number, which is |TRUE| if a buffer called
-               {buf} exists and is loaded (shown in a window or hidden).
-               The {buf} argument is used like with |bufexists()|.
-
-               Can also be used as a |method|: >
-                       let loaded = 'somename'->bufloaded()
-
-bufname([{buf}])                                       *bufname()*
-               The result is the name of a buffer.  Mostly as it is displayed
-               by the `:ls` command, but not using special names such as
-               "[No Name]".
-               If {buf} is omitted the current buffer is used.
-               If {buf} is a Number, that buffer number's name is given.
-               Number zero is the alternate buffer for the current window.
-               If {buf} is a String, it is used as a |file-pattern| to match
-               with the buffer names.  This is always done like 'magic' is
-               set and 'cpoptions' is empty.  When there is more than one
-               match an empty string is returned.
-               "" or "%" can be used for the current buffer, "#" for the
-               alternate buffer.
-               A full match is preferred, otherwise a match at the start, end
-               or middle of the buffer name is accepted.  If you only want a
-               full match then put "^" at the start and "$" at the end of the
-               pattern.
-               Listed buffers are found first.  If there is a single match
-               with a listed buffer, that one is returned.  Next unlisted
-               buffers are searched for.
-               If the {buf} is a String, but you want to use it as a buffer
-               number, force it to be a Number by adding zero to it: >
-                       :echo bufname("3" + 0)
-<              Can also be used as a |method|: >
-                       echo bufnr->bufname()
-
-<              If the buffer doesn't exist, or doesn't have a name, an empty
-               string is returned. >
-       bufname("#")            alternate buffer name
-       bufname(3)              name of buffer 3
-       bufname("%")            name of current buffer
-       bufname("file2")        name of buffer where "file2" matches.
-<                                                      *buffer_name()*
-               Obsolete name: buffer_name().
-
-                                                       *bufnr()*
-bufnr([{buf} [, {create}]])
-               The result is the number of a buffer, as it is displayed by
-               the `:ls` command.  For the use of {buf}, see |bufname()|
-               above.
-
-               If the buffer doesn't exist, -1 is returned.  Or, if the
-               {create} argument is present and TRUE, a new, unlisted,
-               buffer is created and its number is returned.  Example: >
-                       let newbuf = bufnr('Scratch001', 1)
-<              Using an empty name uses the current buffer. To create a new
-               buffer with an empty name use |bufadd()|.
-
-               bufnr("$") is the last buffer: >
-                       :let last_buffer = bufnr("$")
-<              The result is a Number, which is the highest buffer number
-               of existing buffers.  Note that not all buffers with a smaller
-               number necessarily exist, because ":bwipeout" may have removed
-               them.  Use bufexists() to test for the existence of a buffer.
-
-               Can also be used as a |method|: >
-                       echo bufref->bufnr()
-<
-               Obsolete name: buffer_number().         *buffer_number()*
-                                                       *last_buffer_nr()*
-               Obsolete name for bufnr("$"): last_buffer_nr().
-
-bufwinid({buf})                                                *bufwinid()*
-               The result is a Number, which is the |window-ID| of the first
-               window associated with buffer {buf}.  For the use of {buf},
-               see |bufname()| above.  If buffer {buf} doesn't exist or
-               there is no such window, -1 is returned.  Example: >
-
-       echo "A window containing buffer 1 is " . (bufwinid(1))
-<
-               Only deals with the current tab page.
-
-               Can also be used as a |method|: >
-                       FindBuffer()->bufwinid()
-
-bufwinnr({buf})                                                *bufwinnr()*
-               Like |bufwinid()| but return the window number instead of the
-               |window-ID|.
-               If buffer {buf} doesn't exist or there is no such window, -1
-               is returned.  Example: >
-
-       echo "A window containing buffer 1 is " . (bufwinnr(1))
-
-<              The number can be used with |CTRL-W_w| and ":wincmd w"
-               |:wincmd|.
-
-               Can also be used as a |method|: >
-                       FindBuffer()->bufwinnr()
-
-byte2line({byte})                                      *byte2line()*
-               Return the line number that contains the character at byte
-               count {byte} in the current buffer.  This includes the
-               end-of-line character, depending on the 'fileformat' option
-               for the current buffer.  The first character has byte count
-               one.
-               Also see |line2byte()|, |go| and |:goto|.
-
-               Can also be used as a |method|: >
-                       GetOffset()->byte2line()
-
-<              {not available when compiled without the |+byte_offset|
-               feature}
-
-byteidx({expr}, {nr})                                  *byteidx()*
-               Return byte index of the {nr}'th character in the String
-               {expr}.  Use zero for the first character, it then returns
-               zero.
-               If there are no multibyte characters the returned value is
-               equal to {nr}.
-               Composing characters are not counted separately, their byte
-               length is added to the preceding base character.  See
-               |byteidxcomp()| below for counting composing characters
-               separately.
-               Example : >
-                       echo matchstr(str, ".", byteidx(str, 3))
-<              will display the fourth character.  Another way to do the
-               same: >
-                       let s = strpart(str, byteidx(str, 3))
-                       echo strpart(s, 0, byteidx(s, 1))
-<              Also see |strgetchar()| and |strcharpart()|.
-
-               If there are less than {nr} characters -1 is returned.
-               If there are exactly {nr} characters the length of the string
-               in bytes is returned.
-
-               Can also be used as a |method|: >
-                       GetName()->byteidx(idx)
-
-byteidxcomp({expr}, {nr})                                      *byteidxcomp()*
-               Like byteidx(), except that a composing character is counted
-               as a separate character.  Example: >
-                       let s = 'e' . nr2char(0x301)
-                       echo byteidx(s, 1)
-                       echo byteidxcomp(s, 1)
-                       echo byteidxcomp(s, 2)
-<              The first and third echo result in 3 ('e' plus composing
-               character is 3 bytes), the second echo results in 1 ('e' is
-               one byte).
-               Only works differently from byteidx() when 'encoding' is set
-               to a Unicode encoding.
-
-               Can also be used as a |method|: >
-                       GetName()->byteidxcomp(idx)
-
-call({func}, {arglist} [, {dict}])                     *call()* *E699*
-               Call function {func} with the items in |List| {arglist} as
-               arguments.
-               {func} can either be a |Funcref| or the name of a function.
-               a:firstline and a:lastline are set to the cursor line.
-               Returns the return value of the called function.
-               {dict} is for functions with the "dict" attribute.  It will be
-               used to set the local variable "self". |Dictionary-function|
-
-               Can also be used as a |method|: >
-                       GetFunc()->call([arg, arg], dict)
-
-ceil({expr})                                                   *ceil()*
-               Return the smallest integral value greater than or equal to
-               {expr} as a |Float| (round up).
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       echo ceil(1.456)
-<                      2.0  >
-                       echo ceil(-5.456)
-<                      -5.0  >
-                       echo ceil(4.0)
-<                      4.0
-
-               Can also be used as a |method|: >
-                       Compute()->ceil()
-<
-               {only available when compiled with the |+float| feature}
-
-
-ch_ functions are documented here: |channel-functions-details|
-
-
-changenr()                                             *changenr()*
-               Return the number of the most recent change.  This is the same
-               number as what is displayed with |:undolist| and can be used
-               with the |:undo| command.
-               When a change was made it is the number of that change.  After
-               redo it is the number of the redone change.  After undo it is
-               one less than the number of the undone change.
-
-char2nr({string} [, {utf8}])                                   *char2nr()*
-               Return number value of the first char in {string}.
-               Examples: >
-                       char2nr(" ")            returns 32
-                       char2nr("ABC")          returns 65
-<              When {utf8} is omitted or zero, the current 'encoding' is used.
-               Example for "utf-8": >
-                       char2nr("á")           returns 225
-                       char2nr("á"[0])                returns 195
-<              When {utf8} is TRUE, always treat as UTF-8 characters.
-               A combining character is a separate character.
-               |nr2char()| does the opposite.
-               To turn a string into a list of character numbers: >
-                   let str = "ABC"
-                   let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
-<              Result: [65, 66, 67]
-
-               Can also be used as a |method|: >
-                       GetChar()->char2nr()
-
-
-charclass({string})                                    *charclass()*
-               Return the character class of the first character in {string}.
-               The character class is one of:
-                       0       blank
-                       1       punctuation
-                       2       word character
-                       3       emoji
-                       other   specific Unicode class
-               The class is used in patterns and word motions.
-
-
-charcol({expr})                                                *charcol()*
-               Same as |col()| but returns the character index of the column
-               position given with {expr} instead of the byte position.
-
-               Example:
-               With the cursor on '세' in line 5 with text "여보세요": >
-                       charcol('.')            returns 3
-                       col('.')                returns 7
-
-<              Can also be used as a |method|: >
-                       GetPos()->col()
-<
-                                                       *charidx()*
-charidx({string}, {idx} [, {countcc}])
-               Return the character index of the byte at {idx} in {string}.
-               The index of the first character is zero.
-               If there are no multibyte characters the returned value is
-               equal to {idx}.
-               When {countcc} is omitted or |FALSE|, then composing characters
-               are not counted separately, their byte length is
-               added to the preceding base character.
-               When {countcc} is |TRUE|, then composing characters are
-               counted as separate characters.
-               Returns -1 if the arguments are invalid or if {idx} is greater
-               than the index of the last byte in {string}.  An error is
-               given if the first argument is not a string, the second
-               argument is not a number or when the third argument is present
-               and is not zero or one.
-               See |byteidx()| and |byteidxcomp()| for getting the byte index
-               from the character index.
-               Examples: >
-                       echo charidx('áb́ć', 3)            returns 1
-                       echo charidx('áb́ć', 6, 1) returns 4
-                       echo charidx('áb́ć', 16)           returns -1
-<
-               Can also be used as a |method|: >
-                       GetName()->charidx(idx)
-
-chdir({dir})                                           *chdir()*
-               Change the current working directory to {dir}.  The scope of
-               the directory change depends on the directory of the current
-               window:
-                       - If the current window has a window-local directory
-                         (|:lcd|), then changes the window local directory.
-                       - Otherwise, if the current tabpage has a local
-                         directory (|:tcd|) then changes the tabpage local
-                         directory.
-                       - Otherwise, changes the global directory.
-               {dir} must be a String.
-               If successful, returns the previous working directory.  Pass
-               this to another chdir() to restore the directory.
-               On failure, returns an empty string.
-
-               Example: >
-                       let save_dir = chdir(newdir)
-                       if save_dir != ""
-                          " ... do some work
-                          call chdir(save_dir)
-                       endif
-
-<              Can also be used as a |method|: >
-                       GetDir()->chdir()
-<
-cindent({lnum})                                                *cindent()*
-               Get the amount of indent for line {lnum} according the C
-               indenting rules, as with 'cindent'.
-               The indent is counted in spaces, the value of 'tabstop' is
-               relevant.  {lnum} is used just like in |getline()|.
-               When {lnum} is invalid or Vim was not compiled the |+cindent|
-               feature, -1 is returned.
-               See |C-indenting|.
-
-               Can also be used as a |method|: >
-                       GetLnum()->cindent()
-
-clearmatches([{win}])                                  *clearmatches()*
-               Clears all matches previously defined for the current window
-               by |matchadd()| and the |:match| commands.
-               If {win} is specified, use the window with this number or
-               window ID instead of the current window.
-
-               Can also be used as a |method|: >
-                       GetWin()->clearmatches()
-<
-                                                       *col()*
-col({expr})    The result is a Number, which is the byte index of the column
-               position given with {expr}.  The accepted positions are:
-                   .       the cursor position
-                   $       the end of the cursor line (the result is the
-                           number of bytes in the cursor line plus one)
-                   'x      position of mark x (if the mark is not set, 0 is
-                           returned)
-                   v       In Visual mode: the start of the Visual area (the
-                           cursor is the end).  When not in Visual mode
-                           returns the cursor position.  Differs from |'<| in
-                           that it's updated right away.
-               Additionally {expr} can be [lnum, col]: a |List| with the line
-               and column number. Most useful when the column is "$", to get
-               the last column of a specific line.  When "lnum" or "col" is
-               out of range then col() returns zero.
-               To get the line number use |line()|.  To get both use
-               |getpos()|.
-               For the screen column position use |virtcol()|.  For the
-               character position use |charcol()|.
-               Note that only marks in the current file can be used.
-               Examples: >
-                       col(".")                column of cursor
-                       col("$")                length of cursor line plus one
-                       col("'t")               column of mark t
-                       col("'" . markname)     column of mark markname
-<              The first column is 1.  0 is returned for an error.
-               For an uppercase mark the column may actually be in another
-               buffer.
-               For the cursor position, when 'virtualedit' is active, the
-               column is one higher if the cursor is after the end of the
-               line.  This can be used to obtain the column in Insert mode: >
-                       :imap <F2> <C-O>:let save_ve = &ve<CR>
-                               \<C-O>:set ve=all<CR>
-                               \<C-O>:echo col(".") . "\n" <Bar>
-                               \let &ve = save_ve<CR>
-
-<              Can also be used as a |method|: >
-                       GetPos()->col()
-<
-
-complete({startcol}, {matches})                        *complete()* *E785*
-               Set the matches for Insert mode completion.
-               Can only be used in Insert mode.  You need to use a mapping
-               with CTRL-R = (see |i_CTRL-R|).  It does not work after CTRL-O
-               or with an expression mapping.
-               {startcol} is the byte offset in the line where the completed
-               text start.  The text up to the cursor is the original text
-               that will be replaced by the matches.  Use col('.') for an
-               empty string.  "col('.') - 1" will replace one character by a
-               match.
-               {matches} must be a |List|.  Each |List| item is one match.
-               See |complete-items| for the kind of items that are possible.
-               "longest" in 'completeopt' is ignored.
-               Note that the after calling this function you need to avoid
-               inserting anything that would cause completion to stop.
-               The match can be selected with CTRL-N and CTRL-P as usual with
-               Insert mode completion.  The popup menu will appear if
-               specified, see |ins-completion-menu|.
-               Example: >
-       inoremap <F5> <C-R>=ListMonths()<CR>
-
-       func! ListMonths()
-         call complete(col('.'), ['January', 'February', 'March',
-               \ 'April', 'May', 'June', 'July', 'August', 'September',
-               \ 'October', 'November', 'December'])
-         return ''
-       endfunc
-<              This isn't very useful, but it shows how it works.  Note that
-               an empty string is returned to avoid a zero being inserted.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetMatches()->complete(col('.'))
-
-complete_add({expr})                           *complete_add()*
-               Add {expr} to the list of matches.  Only to be used by the
-               function specified with the 'completefunc' option.
-               Returns 0 for failure (empty string or out of memory),
-               1 when the match was added, 2 when the match was already in
-               the list.
-               See |complete-functions| for an explanation of {expr}.  It is
-               the same as one item in the list that 'omnifunc' would return.
-
-               Can also be used as a |method|: >
-                       GetMoreMatches()->complete_add()
-
-complete_check()                               *complete_check()*
-               Check for a key typed while looking for completion matches.
-               This is to be used when looking for matches takes some time.
-               Returns |TRUE| when searching for matches is to be aborted,
-               zero otherwise.
-               Only to be used by the function specified with the
-               'completefunc' option.
-
-
-complete_info([{what}])                                *complete_info()*
-               Returns a |Dictionary| with information about Insert mode
-               completion.  See |ins-completion|.
-               The items are:
-                  mode         Current completion mode name string.
-                               See |complete_info_mode| for the values.
-                  pum_visible  |TRUE| if popup menu is visible.
-                               See |pumvisible()|.
-                  items        List of completion matches.  Each item is a
-                               dictionary containing the entries "word",
-                               "abbr", "menu", "kind", "info" and "user_data".
-                               See |complete-items|.
-                  selected     Selected item index.  First index is zero.
-                               Index is -1 if no item is selected (showing
-                               typed text only, or the last completion after
-                               no item is selected when using the <Up> or
-                               <Down> keys)
-                  inserted     Inserted string. [NOT IMPLEMENT YET]
-
-                                                       *complete_info_mode*
-               mode values are:
-                  ""                Not in completion mode
-                  "keyword"         Keyword completion |i_CTRL-X_CTRL-N|
-                  "ctrl_x"          Just pressed CTRL-X |i_CTRL-X|
-                  "scroll"          Scrolling with |i_CTRL-X_CTRL-E| or
-                                    |i_CTRL-X_CTRL-Y|
-                  "whole_line"      Whole lines |i_CTRL-X_CTRL-L|
-                  "files"           File names |i_CTRL-X_CTRL-F|
-                  "tags"            Tags |i_CTRL-X_CTRL-]|
-                  "path_defines"    Definition completion |i_CTRL-X_CTRL-D|
-                  "path_patterns"   Include completion |i_CTRL-X_CTRL-I|
-                  "dictionary"      Dictionary |i_CTRL-X_CTRL-K|
-                  "thesaurus"       Thesaurus |i_CTRL-X_CTRL-T|
-                  "cmdline"         Vim Command line |i_CTRL-X_CTRL-V|
-                  "function"        User defined completion |i_CTRL-X_CTRL-U|
-                  "omni"            Omni completion |i_CTRL-X_CTRL-O|
-                  "spell"           Spelling suggestions |i_CTRL-X_s|
-                  "eval"            |complete()| completion
-                  "unknown"         Other internal modes
-
-               If the optional {what} list argument is supplied, then only
-               the items listed in {what} are returned.  Unsupported items in
-               {what} are silently ignored.
-
-               To get the position and size of the popup menu, see
-               |pum_getpos()|. It's also available in |v:event| during the
-               |CompleteChanged| event.
-
-               Examples: >
-                       " Get all items
-                       call complete_info()
-                       " Get only 'mode'
-                       call complete_info(['mode'])
-                       " Get only 'mode' and 'pum_visible'
-                       call complete_info(['mode', 'pum_visible'])
-
-<              Can also be used as a |method|: >
-                       GetItems()->complete_info()
-<
-                                               *confirm()*
-confirm({msg} [, {choices} [, {default} [, {type}]]])
-               confirm() offers the user a dialog, from which a choice can be
-               made.  It returns the number of the choice.  For the first
-               choice this is 1.
-               Note: confirm() is only supported when compiled with dialog
-               support, see |+dialog_con| and |+dialog_gui|.
-
-               {msg} is displayed in a |dialog| with {choices} as the
-               alternatives.  When {choices} is missing or empty, "&OK" is
-               used (and translated).
-               {msg} is a String, use '\n' to include a newline.  Only on
-               some systems the string is wrapped when it doesn't fit.
-
-               {choices} is a String, with the individual choices separated
-               by '\n', e.g. >
-                       confirm("Save changes?", "&Yes\n&No\n&Cancel")
-<              The letter after the '&' is the shortcut key for that choice.
-               Thus you can type 'c' to select "Cancel".  The shortcut does
-               not need to be the first letter: >
-                       confirm("file has been modified", "&Save\nSave &All")
-<              For the console, the first letter of each choice is used as
-               the default shortcut key.  Case is ignored.
-
-               The optional {default} argument is the number of the choice
-               that is made if the user hits <CR>.  Use 1 to make the first
-               choice the default one.  Use 0 to not set a default.  If
-               {default} is omitted, 1 is used.
-
-               The optional {type} String argument gives the type of dialog.
-               This is only used for the icon of the GTK, Mac, Motif and
-               Win32 GUI.  It can be one of these values: "Error",
-               "Question", "Info", "Warning" or "Generic".  Only the first
-               character is relevant.  When {type} is omitted, "Generic" is
-               used.
-
-               If the user aborts the dialog by pressing <Esc>, CTRL-C,
-               or another valid interrupt key, confirm() returns 0.
-
-               An example: >
-   :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
-   :if choice == 0
-   :   echo "make up your mind!"
-   :elseif choice == 3
-   :   echo "tasteful"
-   :else
-   :   echo "I prefer bananas myself."
-   :endif
-<              In a GUI dialog, buttons are used.  The layout of the buttons
-               depends on the 'v' flag in 'guioptions'.  If it is included,
-               the buttons are always put vertically.  Otherwise,  confirm()
-               tries to put the buttons in one horizontal line.  If they
-               don't fit, a vertical layout is used anyway.  For some systems
-               the horizontal layout is always used.
-
-               Can also be used as a |method|in: >
-                       BuildMessage()->confirm("&Yes\n&No")
-<
-                                                       *copy()*
-copy({expr})   Make a copy of {expr}.  For Numbers and Strings this isn't
-               different from using {expr} directly.
-               When {expr} is a |List| a shallow copy is created.  This means
-               that the original |List| can be changed without changing the
-               copy, and vice versa.  But the items are identical, thus
-               changing an item changes the contents of both |Lists|.
-               A |Dictionary| is copied in a similar way as a |List|.
-               Also see |deepcopy()|.
-               Can also be used as a |method|: >
-                       mylist->copy()
-
-cos({expr})                                            *cos()*
-               Return the cosine of {expr}, measured in radians, as a |Float|.
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo cos(100)
-<                      0.862319 >
-                       :echo cos(-4.01)
-<                      -0.646043
-
-               Can also be used as a |method|: >
-                       Compute()->cos()
-<
-               {only available when compiled with the |+float| feature}
-
-
-cosh({expr})                                           *cosh()*
-               Return the hyperbolic cosine of {expr} as a |Float| in the range
-               [1, inf].
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo cosh(0.5)
-<                      1.127626 >
-                       :echo cosh(-0.5)
-<                      -1.127626
-
-               Can also be used as a |method|: >
-                       Compute()->cosh()
-<
-               {only available when compiled with the |+float| feature}
-
-
-count({comp}, {expr} [, {ic} [, {start}]])                     *count()*
-               Return the number of times an item with value {expr} appears
-               in |String|, |List| or |Dictionary| {comp}.
-
-               If {start} is given then start with the item with this index.
-               {start} can only be used with a |List|.
-
-               When {ic} is given and it's |TRUE| then case is ignored.
-
-               When {comp} is a string then the number of not overlapping
-               occurrences of {expr} is returned. Zero is returned when
-               {expr} is an empty string.
-
-               Can also be used as a |method|: >
-                       mylist->count(val)
-<
-                                                       *cscope_connection()*
-cscope_connection([{num} , {dbpath} [, {prepend}]])
-               Checks for the existence of a |cscope| connection.  If no
-               parameters are specified, then the function returns:
-                       0, if cscope was not available (not compiled in), or
-                          if there are no cscope connections;
-                       1, if there is at least one cscope connection.
-
-               If parameters are specified, then the value of {num}
-               determines how existence of a cscope connection is checked:
-
-               {num}   Description of existence check
-               -----   ------------------------------
-               0       Same as no parameters (e.g., "cscope_connection()").
-               1       Ignore {prepend}, and use partial string matches for
-                       {dbpath}.
-               2       Ignore {prepend}, and use exact string matches for
-                       {dbpath}.
-               3       Use {prepend}, use partial string matches for both
-                       {dbpath} and {prepend}.
-               4       Use {prepend}, use exact string matches for both
-                       {dbpath} and {prepend}.
-
-               Note: All string comparisons are case sensitive!
-
-               Examples.  Suppose we had the following (from ":cs show"): >
-
-  # pid    database name                       prepend path
-  0 27664  cscope.out                          /usr/local
-<
-               Invocation                                      Return Val ~
-               ----------                                      ---------- >
-               cscope_connection()                                     1
-               cscope_connection(1, "out")                             1
-               cscope_connection(2, "out")                             0
-               cscope_connection(3, "out")                             0
-               cscope_connection(3, "out", "local")                    1
-               cscope_connection(4, "out")                             0
-               cscope_connection(4, "out", "local")                    0
-               cscope_connection(4, "cscope.out", "/usr/local")        1
-<
-cursor({lnum}, {col} [, {off}])                                *cursor()*
-cursor({list})
-               Positions the cursor at the column (byte count) {col} in the
-               line {lnum}.  The first column is one.
-
-               When there is one argument {list} this is used as a |List|
-               with two, three or four item:
-                       [{lnum}, {col}]
-                       [{lnum}, {col}, {off}]
-                       [{lnum}, {col}, {off}, {curswant}]
-               This is like the return value of |getpos()| or |getcurpos()|,
-               but without the first item.
-
-               To position the cursor using the character count, use
-               |setcursorcharpos()|.
-
-               Does not change the jumplist.
-               {lnum} is used like with |getline()|.
-               If {lnum} is greater than the number of lines in the buffer,
-               the cursor will be positioned at the last line in the buffer.
-               If {lnum} is zero, the cursor will stay in the current line.
-               If {col} is greater than the number of bytes in the line,
-               the cursor will be positioned at the last character in the
-               line.
-               If {col} is zero, the cursor will stay in the current column.
-               If {curswant} is given it is used to set the preferred column
-               for vertical movement.  Otherwise {col} is used.
-
-               When 'virtualedit' is used {off} specifies the offset in
-               screen columns from the start of the character.  E.g., a
-               position within a <Tab> or after the last character.
-               Returns 0 when the position could be set, -1 otherwise.
-
-               Can also be used as a |method|: >
-                       GetCursorPos()->cursor()
-
-debugbreak({pid})                                      *debugbreak()*
-               Specifically used to interrupt a program being debugged.  It
-               will cause process {pid} to get a SIGTRAP.  Behavior for other
-               processes is undefined. See |terminal-debugger|.
-               {only available on MS-Windows}
-
-               Can also be used as a |method|: >
-                       GetPid()->debugbreak()
-
-deepcopy({expr} [, {noref}])                           *deepcopy()* *E698*
-               Make a copy of {expr}.  For Numbers and Strings this isn't
-               different from using {expr} directly.
-               When {expr} is a |List| a full copy is created.  This means
-               that the original |List| can be changed without changing the
-               copy, and vice versa.  When an item is a |List| or
-               |Dictionary|, a copy for it is made, recursively.  Thus
-               changing an item in the copy does not change the contents of
-               the original |List|.
-               A |Dictionary| is copied in a similar way as a |List|.
-
-               When {noref} is omitted or zero a contained |List| or
-               |Dictionary| is only copied once.  All references point to
-               this single copy.  With {noref} set to 1 every occurrence of a
-               |List| or |Dictionary| results in a new copy.  This also means
-               that a cyclic reference causes deepcopy() to fail.
-                                                               *E724*
-               Nesting is possible up to 100 levels.  When there is an item
-               that refers back to a higher level making a deep copy with
-               {noref} set to 1 will fail.
-               Also see |copy()|.
-
-               Can also be used as a |method|: >
-                       GetObject()->deepcopy()
-
-delete({fname} [, {flags}])                            *delete()*
-               Without {flags} or with {flags} empty: Deletes the file by the
-               name {fname}.  This also works when {fname} is a symbolic link.
-
-               When {flags} is "d": Deletes the directory by the name
-               {fname}.  This fails when directory {fname} is not empty.
-
-               When {flags} is "rf": Deletes the directory by the name
-               {fname} and everything in it, recursively.  BE CAREFUL!
-               Note: on MS-Windows it is not possible to delete a directory
-               that is being used.
-
-               A symbolic link itself is deleted, not what it points to.
-
-               The result is a Number, which is 0/false if the delete
-               operation was successful and -1/true when the deletion failed
-               or partly failed.
-
-               Use |remove()| to delete an item from a |List|.
-               To delete a line from the buffer use |:delete| or
-               |deletebufline()|.
-
-               Can also be used as a |method|: >
-                       GetName()->delete()
-
-deletebufline({buf}, {first} [, {last}])               *deletebufline()*
-               Delete lines {first} to {last} (inclusive) from buffer {buf}.
-               If {last} is omitted then delete line {first} only.
-               On success 0 is returned, on failure 1 is returned.
-
-               This function works only for loaded buffers. First call
-               |bufload()| if needed.
-
-               For the use of {buf}, see |bufname()| above.
-
-               {first} and {last} are used like with |getline()|. Note that
-               when using |line()| this refers to the current buffer. Use "$"
-               to refer to the last line in buffer {buf}.
-
-               Can also be used as a |method|: >
-                       GetBuffer()->deletebufline(1)
-<
-                                                       *did_filetype()*
-did_filetype() Returns |TRUE| when autocommands are being executed and the
-               FileType event has been triggered at least once.  Can be used
-               to avoid triggering the FileType event again in the scripts
-               that detect the file type. |FileType|
-               Returns |FALSE| when `:setf FALLBACK` was used.
-               When editing another file, the counter is reset, thus this
-               really checks if the FileType event has been triggered for the
-               current buffer.  This allows an autocommand that starts
-               editing another buffer to set 'filetype' and load a syntax
-               file.
-
-diff_filler({lnum})                                    *diff_filler()*
-               Returns the number of filler lines above line {lnum}.
-               These are the lines that were inserted at this point in
-               another diff'ed window.  These filler lines are shown in the
-               display but don't exist in the buffer.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-               Returns 0 if the current window is not in diff mode.
-
-               Can also be used as a |method|: >
-                       GetLnum()->diff_filler()
-
-diff_hlID({lnum}, {col})                               *diff_hlID()*
-               Returns the highlight ID for diff mode at line {lnum} column
-               {col} (byte index).  When the current line does not have a
-               diff change zero is returned.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-               {col} is 1 for the leftmost column, {lnum} is 1 for the first
-               line.
-               The highlight ID can be used with |synIDattr()| to obtain
-               syntax information about the highlighting.
-
-               Can also be used as a |method|: >
-                       GetLnum()->diff_hlID(col)
-<
-
-digraph_get({chars})                                   *digraph_get()* *E1214*
-               Return the digraph of {chars}.  This should be a string with
-               exactly two characters.  If {chars} are not just two
-               characters, or the digraph of {chars} does not exist, an error
-               is given and an empty string is returned.
-
-               The character will be converted from Unicode to 'encoding'
-               when needed.  This does require the conversion to be
-               available, it might fail.
-
-               Also see |digraph_getlist()|.
-
-               Examples: >
-               " Get a built-in digraph
-               :echo digraph_get('00')         " Returns '∞'
-
-               " Get a user-defined digraph
-               :call digraph_set('aa', 'あ')
-               :echo digraph_get('aa')         " Returns 'あ'
-<
-               Can also be used as a |method|: >
-                       GetChars()->digraph_get()
-<
-               This function works only when compiled with the |+digraphs|
-               feature.  If this feature is disabled, this function will
-               display an error message.
-
-
-digraph_getlist([{listall}])                           *digraph_getlist()*
-               Return a list of digraphs.  If the {listall} argument is given
-               and it is TRUE, return all digraphs, including the default
-               digraphs.  Otherwise, return only user-defined digraphs.
-
-               The characters will be converted from Unicode to 'encoding'
-               when needed.  This does require the conservation to be
-               available, it might fail.
-
-               Also see |digraph_get()|.
-
-               Examples: >
-               " Get user-defined digraphs
-               :echo digraph_getlist()
-
-               " Get all the digraphs, including default digraphs
-               :echo digraph_getlist(1)
-<
-               Can also be used as a |method|: >
-                       GetNumber()->digraph_getlist()
-<
-               This function works only when compiled with the |+digraphs|
-               feature.  If this feature is disabled, this function will
-               display an error message.
-
-
-digraph_set({chars}, {digraph})                                *digraph_set()* *E1205*
-               Add digraph {chars} to the list.  {chars} must be a string
-               with two characters.  {digraph} is a string with one UTF-8
-               encoded character. Be careful, composing characters are NOT
-               ignored.  This function is similar to |:digraphs| command, but
-               useful to add digraphs start with a white space.
-
-               The function result is v:true if |digraph| is registered.  If
-               this fails an error message is given and v:false is returned.
-
-               If you want to define multiple digraphs at once, you can use
-               |digraph_setlist()|.
-
-               Example: >
-                       call digraph_set('  ', 'あ')
-<
-               Can be used as a |method|: >
-                       GetString()->digraph_set('あ')
-<
-               This function works only when compiled with the |+digraphs|
-               feature.  If this feature is disabled, this function will
-               display an error message.
-
-
-digraph_setlist({digraphlist})                         *digraph_setlist()*
-               Similar to |digraph_set()| but this function can add multiple
-               digraphs at once.  {digraphlist} is a list composed of lists,
-               where each list contains two strings with {chars} and
-               {digraph} as in |digraph_set()|.
-               Example: >
-                   call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
-<
-               It is similar to the following: >
-                   for [chars, digraph] in [['aa', 'あ'], ['ii', 'い']]
-                         call digraph_set(chars, digraph)
-                   endfor
-<              Except that the function returns after the first error,
-               following digraphs will not be added.
-
-               Can be used as a |method|: >
-                   GetList()->digraph_setlist()
-<
-               This function works only when compiled with the |+digraphs|
-               feature.  If this feature is disabled, this function will
-               display an error message.
-
-
-echoraw({string})                                      *echoraw()*
-               Output {string} as-is, including unprintable characters.
-               This can be used to output a terminal code. For example, to
-               disable modifyOtherKeys: >
-                       call echoraw(&t_TE)
-<              and to enable it again: >
-                       call echoraw(&t_TI)
-<              Use with care, you can mess up the terminal this way.
-
-
-empty({expr})                                          *empty()*
-               Return the Number 1 if {expr} is empty, zero otherwise.
-               - A |List| or |Dictionary| is empty when it does not have any
-                 items.
-               - A |String| is empty when its length is zero.
-               - A |Number| and |Float| are empty when their value is zero.
-               - |v:false|, |v:none| and |v:null| are empty, |v:true| is not.
-               - A |Job| is empty when it failed to start.
-               - A |Channel| is empty when it is closed.
-               - A |Blob| is empty when its length is zero.
-
-               For a long |List| this is much faster than comparing the
-               length with zero.
-
-               Can also be used as a |method|: >
-                       mylist->empty()
-
-environ()                                              *environ()*
-               Return all of environment variables as dictionary. You can
-               check if an environment variable exists like this: >
-                       :echo has_key(environ(), 'HOME')
-<              Note that the variable name may be CamelCase; to ignore case
-               use this: >
-                       :echo index(keys(environ()), 'HOME', 0, 1) != -1
-
-escape({string}, {chars})                              *escape()*
-               Escape the characters in {chars} that occur in {string} with a
-               backslash.  Example: >
-                       :echo escape('c:\program files\vim', ' \')
-<              results in: >
-                       c:\\program\ files\\vim
-<              Also see |shellescape()| and |fnameescape()|.
-
-               Can also be used as a |method|: >
-                       GetText()->escape(' \')
-<
-                                                       *eval()*
-eval({string}) Evaluate {string} and return the result.  Especially useful to
-               turn the result of |string()| back into the original value.
-               This works for Numbers, Floats, Strings, Blobs and composites
-               of them.  Also works for |Funcref|s that refer to existing
-               functions.
-
-               Can also be used as a |method|: >
-                       argv->join()->eval()
-
-eventhandler()                                         *eventhandler()*
-               Returns 1 when inside an event handler.  That is that Vim got
-               interrupted while waiting for the user to type a character,
-               e.g., when dropping a file on Vim.  This means interactive
-               commands cannot be used.  Otherwise zero is returned.
-
-executable({expr})                                     *executable()*
-               This function checks if an executable with the name {expr}
-               exists.  {expr} must be the name of the program without any
-               arguments.
-               executable() uses the value of $PATH and/or the normal
-               searchpath for programs.                *PATHEXT*
-               On MS-Windows the ".exe", ".bat", etc. can optionally be
-               included.  Then the extensions in $PATHEXT are tried.  Thus if
-               "foo.exe" does not exist, "foo.exe.bat" can be found.  If
-               $PATHEXT is not set then ".com;.exe;.bat;.cmd" is used.  A dot
-               by itself can be used in $PATHEXT to try using the name
-               without an extension.  When 'shell' looks like a Unix shell,
-               then the name is also tried without adding an extension.
-               On MS-Windows it only checks if the file exists and is not a
-               directory, not if it's really executable.
-               On MS-Windows an executable in the same directory as Vim is
-               always found.  Since this directory is added to $PATH it
-               should also work to execute it |win32-PATH|.
-               The result is a Number:
-                       1       exists
-                       0       does not exist
-                       -1      not implemented on this system
-               |exepath()| can be used to get the full path of an executable.
-
-               Can also be used as a |method|: >
-                       GetCommand()->executable()
-
-execute({command} [, {silent}])                                        *execute()*
-               Execute an Ex command or commands and return the output as a
-               string.
-               {command} can be a string or a List.  In case of a List the
-               lines are executed one by one.
-               This is equivalent to: >
-                       redir => var
-                       {command}
-                       redir END
-<
-               The optional {silent} argument can have these values:
-                       ""              no `:silent` used
-                       "silent"        `:silent` used
-                       "silent!"       `:silent!` used
-               The default is "silent".  Note that with "silent!", unlike
-               `:redir`, error messages are dropped.  When using an external
-               command the screen may be messed up, use `system()` instead.
-                                                       *E930*
-               It is not possible to use `:redir` anywhere in {command}.
-
-               To get a list of lines use |split()| on the result: >
-                       split(execute('args'), "\n")
-
-<              To execute a command in another window than the current one
-               use `win_execute()`.
-
-               When used recursively the output of the recursive call is not
-               included in the output of the higher level call.
-
-               Can also be used as a |method|: >
-                       GetCommand()->execute()
-
-exepath({expr})                                                *exepath()*
-               If {expr} is an executable and is either an absolute path, a
-               relative path or found in $PATH, return the full path.
-               Note that the current directory is used when {expr} starts
-               with "./", which may be a problem for Vim: >
-                       echo exepath(v:progpath)
-<              If {expr} cannot be found in $PATH or is not executable then
-               an empty string is returned.
-
-               Can also be used as a |method|: >
-                       GetCommand()->exepath()
-<
-                                                       *exists()*
-exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
-               zero otherwise.
-
-               Note: In a compiled |:def| function the evaluation is done at
-               runtime.  Use `exists_compiled()` to evaluate the expression
-               at compile time.
-
-               For checking for a supported feature use |has()|.
-               For checking if a file exists use |filereadable()|.
-
-               The {expr} argument is a string, which contains one of these:
-                       &option-name    Vim option (only checks if it exists,
-                                       not if it really works)
-                       +option-name    Vim option that works.
-                       $ENVNAME        environment variable (could also be
-                                       done by comparing with an empty
-                                       string)
-                       *funcname       built-in function (see |functions|)
-                                       or user defined function (see
-                                       |user-functions|) that is implemented.
-                                       Also works for a variable that is a
-                                       Funcref.
-                       ?funcname       built-in function that could be
-                                       implemented; to be used to check if
-                                       "funcname" is valid
-                       varname         internal variable (see
-                                       |internal-variables|).  Also works
-                                       for |curly-braces-names|, |Dictionary|
-                                       entries, |List| items, etc.
-                                       Does not work for local variables in a
-                                       compiled `:def` function.
-                                       Beware that evaluating an index may
-                                       cause an error message for an invalid
-                                       expression.  E.g.: >
-                                          :let l = [1, 2, 3]
-                                          :echo exists("l[5]")
-<                                         0 >
-                                          :echo exists("l[xx]")
-<                                         E121: Undefined variable: xx
-                                          0
-                       :cmdname        Ex command: built-in command, user
-                                       command or command modifier |:command|.
-                                       Returns:
-                                       1  for match with start of a command
-                                       2  full match with a command
-                                       3  matches several user commands
-                                       To check for a supported command
-                                       always check the return value to be 2.
-                       :2match         The |:2match| command.
-                       :3match         The |:3match| command.
-                       #event          autocommand defined for this event
-                       #event#pattern  autocommand defined for this event and
-                                       pattern (the pattern is taken
-                                       literally and compared to the
-                                       autocommand patterns character by
-                                       character)
-                       #group          autocommand group exists
-                       #group#event    autocommand defined for this group and
-                                       event.
-                       #group#event#pattern
-                                       autocommand defined for this group,
-                                       event and pattern.
-                       ##event         autocommand for this event is
-                                       supported.
-
-               Examples: >
-                       exists("&shortname")
-                       exists("$HOSTNAME")
-                       exists("*strftime")
-                       exists("*s:MyFunc")
-                       exists("bufcount")
-                       exists(":Make")
-                       exists("#CursorHold")
-                       exists("#BufReadPre#*.gz")
-                       exists("#filetypeindent")
-                       exists("#filetypeindent#FileType")
-                       exists("#filetypeindent#FileType#*")
-                       exists("##ColorScheme")
-<              There must be no space between the symbol (&/$/*/#) and the
-               name.
-               There must be no extra characters after the name, although in
-               a few cases this is ignored.  That may become more strict in
-               the future, thus don't count on it!
-               Working example: >
-                       exists(":make")
-<              NOT working example: >
-                       exists(":make install")
-
-<              Note that the argument must be a string, not the name of the
-               variable itself.  For example: >
-                       exists(bufcount)
-<              This doesn't check for existence of the "bufcount" variable,
-               but gets the value of "bufcount", and checks if that exists.
-
-               Can also be used as a |method|: >
-                       Varname()->exists()
-<
-
-exists_compiled({expr})                                        *exists_compiled()*
-               Like `exists()` but evaluated at compile time.  This is useful
-               to skip a block where a function is used that would otherwise
-               give an error: >
-                       if exists_compiled('*ThatFunction')
-                          ThatFunction('works')
-                       endif
-<              If `exists()` were used then a compilation error would be
-               given if ThatFunction() is not defined.
-
-               {expr} must be a literal string. *E1232*
-               Can only be used in a |:def| function. *E1233*
-               This does not work to check for arguments or local variables.
-
-
-exp({expr})                                                    *exp()*
-               Return the exponential of {expr} as a |Float| in the range
-               [0, inf].
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo exp(2)
-<                      7.389056 >
-                       :echo exp(-1)
-<                      0.367879
-
-               Can also be used as a |method|: >
-                       Compute()->exp()
-<
-               {only available when compiled with the |+float| feature}
-
-
-expand({string} [, {nosuf} [, {list}]])                                *expand()*
-               Expand wildcards and the following special keywords in
-               {string}.  'wildignorecase' applies.
-
-               If {list} is given and it is |TRUE|, a List will be returned.
-               Otherwise the result is a String and when there are several
-               matches, they are separated by <NL> characters.  [Note: in
-               version 5.0 a space was used, which caused problems when a
-               file name contains a space]
-
-               If the expansion fails, the result is an empty string.  A name
-               for a non-existing file is not included, unless {string} does
-               not start with '%', '#' or '<', see below.
-
-               When {string} starts with '%', '#' or '<', the expansion is
-               done like for the |cmdline-special| variables with their
-               associated modifiers.  Here is a short overview:
-
-                       %               current file name
-                       #               alternate file name
-                       #n              alternate file name n
-                       <cfile>         file name under the cursor
-                       <afile>         autocmd file name
-                       <abuf>          autocmd buffer number (as a String!)
-                       <amatch>        autocmd matched name
-                       <cexpr>         C expression under the cursor
-                       <sfile>         sourced script file or function name
-                       <slnum>         sourced script line number or function
-                                       line number
-                       <sflnum>        script file line number, also when in
-                                       a function
-                       <SID>           "<SNR>123_"  where "123" is the
-                                       current script ID  |<SID>|
-                       <stack>         call stack
-                       <cword>         word under the cursor
-                       <cWORD>         WORD under the cursor
-                       <client>        the {clientid} of the last received
-                                       message |server2client()|
-               Modifiers:
-                       :p              expand to full path
-                       :h              head (last path component removed)
-                       :t              tail (last path component only)
-                       :r              root (one extension removed)
-                       :e              extension only
-
-               Example: >
-                       :let &tags = expand("%:p:h") . "/tags"
-<              Note that when expanding a string that starts with '%', '#' or
-               '<', any following text is ignored.  This does NOT work: >
-                       :let doesntwork = expand("%:h.bak")
-<              Use this: >
-                       :let doeswork = expand("%:h") . ".bak"
-<              Also note that expanding "<cfile>" and others only returns the
-               referenced file name without further expansion.  If "<cfile>"
-               is "~/.cshrc", you need to do another expand() to have the
-               "~/" expanded into the path of the home directory: >
-                       :echo expand(expand("<cfile>"))
-<
-               There cannot be white space between the variables and the
-               following modifier.  The |fnamemodify()| function can be used
-               to modify normal file names.
-
-               When using '%' or '#', and the current or alternate file name
-               is not defined, an empty string is used.  Using "%:p" in a
-               buffer with no name, results in the current directory, with a
-               '/' added.
-
-               When {string} does not start with '%', '#' or '<', it is
-               expanded like a file name is expanded on the command line.
-               'suffixes' and 'wildignore' are used, unless the optional
-               {nosuf} argument is given and it is |TRUE|.
-               Names for non-existing files are included.  The "**" item can
-               be used to search in a directory tree.  For example, to find
-               all "README" files in the current directory and below: >
-                       :echo expand("**/README")
-<
-               expand() can also be used to expand variables and environment
-               variables that are only known in a shell.  But this can be
-               slow, because a shell may be used to do the expansion.  See
-               |expr-env-expand|.
-               The expanded variable is still handled like a list of file
-               names.  When an environment variable cannot be expanded, it is
-               left unchanged.  Thus ":echo expand('$FOOBAR')" results in
-               "$FOOBAR".
-
-               See |glob()| for finding existing files.  See |system()| for
-               getting the raw output of an external command.
-
-               Can also be used as a |method|: >
-                       Getpattern()->expand()
-
-expandcmd({string})                                    *expandcmd()*
-               Expand special items in String {string} like what is done for
-               an Ex command such as `:edit`.  This expands special keywords,
-               like with |expand()|, and environment variables, anywhere in
-               {string}.  "~user" and "~/path" are only expanded at the
-               start.
-               Returns the expanded string.  Example: >
-                       :echo expandcmd('make %<.o')
-
-<              Can also be used as a |method|: >
-                       GetCommand()->expandcmd()
-<
-extend({expr1}, {expr2} [, {expr3}])                   *extend()*
-               {expr1} and {expr2} must be both |Lists| or both
-               |Dictionaries|.
-
-               If they are |Lists|: Append {expr2} to {expr1}.
-               If {expr3} is given insert the items of {expr2} before the
-               item with index {expr3} in {expr1}.  When {expr3} is zero
-               insert before the first item.  When {expr3} is equal to
-               len({expr1}) then {expr2} is appended.
-               Examples: >
-                       :echo sort(extend(mylist, [7, 5]))
-                       :call extend(mylist, [2, 3], 1)
-<              When {expr1} is the same List as {expr2} then the number of
-               items copied is equal to the original length of the List.
-               E.g., when {expr3} is 1 you get N new copies of the first item
-               (where N is the original length of the List).
-               Use |add()| to concatenate one item to a list.  To concatenate
-               two lists into a new list use the + operator: >
-                       :let newlist = [1, 2, 3] + [4, 5]
-<
-               If they are |Dictionaries|:
-               Add all entries from {expr2} to {expr1}.
-               If a key exists in both {expr1} and {expr2} then {expr3} is
-               used to decide what to do:
-               {expr3} = "keep": keep the value of {expr1}
-               {expr3} = "force": use the value of {expr2}
-               {expr3} = "error": give an error message                *E737*
-               When {expr3} is omitted then "force" is assumed.
-
-               {expr1} is changed when {expr2} is not empty.  If necessary
-               make a copy of {expr1} first.
-               {expr2} remains unchanged.
-               When {expr1} is locked and {expr2} is not empty the operation
-               fails.
-               Returns {expr1}.
-
-               Can also be used as a |method|: >
-                       mylist->extend(otherlist)
-
-
-extendnew({expr1}, {expr2} [, {expr3}])                        *extendnew()*
-               Like |extend()| but instead of adding items to {expr1} a new
-               List or Dictionary is created and returned.  {expr1} remains
-               unchanged.  Items can still be changed by {expr2}, if you
-               don't want that use |deepcopy()| first.
-
-
-feedkeys({string} [, {mode}])                          *feedkeys()*
-               Characters in {string} are queued for processing as if they
-               come from a mapping or were typed by the user.
-
-               By default the string is added to the end of the typeahead
-               buffer, thus if a mapping is still being executed the
-               characters come after them.  Use the 'i' flag to insert before
-               other characters, they will be executed next, before any
-               characters from a mapping.
-
-               The function does not wait for processing of keys contained in
-               {string}.
-
-               To include special keys into {string}, use double-quotes
-               and "\..." notation |expr-quote|. For example,
-               feedkeys("\<CR>") simulates pressing of the <Enter> key. But
-               feedkeys('\<CR>') pushes 5 characters.
-               A special code that might be useful is <Ignore>, it exits the
-               wait for a character without doing anything.  *<Ignore>*
-
-               {mode} is a String, which can contain these character flags:
-               'm'     Remap keys. This is default.  If {mode} is absent,
-                       keys are remapped.
-               'n'     Do not remap keys.
-               't'     Handle keys as if typed; otherwise they are handled as
-                       if coming from a mapping.  This matters for undo,
-                       opening folds, etc.
-               'L'     Lowlevel input.  Only works for Unix or when using the
-                       GUI. Keys are used as if they were coming from the
-                       terminal.  Other flags are not used.  *E980*
-                       When a CTRL-C interrupts and 't' is included it sets
-                       the internal "got_int" flag.
-               'i'     Insert the string instead of appending (see above).
-               'x'     Execute commands until typeahead is empty.  This is
-                       similar to using ":normal!".  You can call feedkeys()
-                       several times without 'x' and then one time with 'x'
-                       (possibly with an empty {string}) to execute all the
-                       typeahead.  Note that when Vim ends in Insert mode it
-                       will behave as if <Esc> is typed, to avoid getting
-                       stuck, waiting for a character to be typed before the
-                       script continues.
-                       Note that if you manage to call feedkeys() while
-                       executing commands, thus calling it recursively, then
-                       all typeahead will be consumed by the last call.
-               '!'     When used with 'x' will not end Insert mode. Can be
-                       used in a test when a timer is set to exit Insert mode
-                       a little later.  Useful for testing CursorHoldI.
-
-               Return value is always 0.
-
-               Can also be used as a |method|: >
-                       GetInput()->feedkeys()
-
-filereadable({file})                                   *filereadable()*
-               The result is a Number, which is |TRUE| when a file with the
-               name {file} exists, and can be read.  If {file} doesn't exist,
-               or is a directory, the result is |FALSE|.  {file} is any
-               expression, which is used as a String.
-               If you don't care about the file being readable you can use
-               |glob()|.
-               {file} is used as-is, you may want to expand wildcards first: >
-                       echo filereadable('~/.vimrc')
-                       0
-                       echo filereadable(expand('~/.vimrc'))
-                       1
-
-<              Can also be used as a |method|: >
-                       GetName()->filereadable()
-<                                                      *file_readable()*
-               Obsolete name: file_readable().
-
-
-filewritable({file})                                   *filewritable()*
-               The result is a Number, which is 1 when a file with the
-               name {file} exists, and can be written.  If {file} doesn't
-               exist, or is not writable, the result is 0.  If {file} is a
-               directory, and we can write to it, the result is 2.
-
-               Can also be used as a |method|: >
-                       GetName()->filewritable()
-
-
-filter({expr1}, {expr2})                               *filter()*
-               {expr1} must be a |List|, |String|, |Blob| or |Dictionary|.
-               For each item in {expr1} evaluate {expr2} and when the result
-               is zero or false remove the item from the |List| or
-               |Dictionary|.  Similarly for each byte in a |Blob| and each
-               charactor in a |String|.
-
-               {expr2} must be a |string| or |Funcref|.
-
-               If {expr2} is a |string|, inside {expr2} |v:val| has the value
-               of the current item.  For a |Dictionary| |v:key| has the key
-               of the current item and for a |List| |v:key| has the index of
-               the current item.  For a |Blob| |v:key| has the index of the
-               current byte. For a |String| |v:key| has the index of the
-               current character.
-               Examples: >
-                       call filter(mylist, 'v:val !~ "OLD"')
-<              Removes the items where "OLD" appears. >
-                       call filter(mydict, 'v:key >= 8')
-<              Removes the items with a key below 8. >
-                       call filter(var, 0)
-<              Removes all the items, thus clears the |List| or |Dictionary|.
-
-               Note that {expr2} is the result of expression and is then
-               used as an expression again.  Often it is good to use a
-               |literal-string| to avoid having to double backslashes.
-
-               If {expr2} is a |Funcref| it must take two arguments:
-                       1. the key or the index of the current item.
-                       2. the value of the current item.
-               The function must return |TRUE| if the item should be kept.
-               Example that keeps the odd items of a list: >
-                       func Odd(idx, val)
-                         return a:idx % 2 == 1
-                       endfunc
-                       call filter(mylist, function('Odd'))
-<              It is shorter when using a |lambda|: >
-                       call filter(myList, {idx, val -> idx * val <= 42})
-<              If you do not use "val" you can leave it out: >
-                       call filter(myList, {idx -> idx % 2 == 1})
-<
-               In |Vim9| script the result must be true, false, zero or one.
-               Other values will result in a type error.
-
-               For a |List| and a |Dictionary| the operation is done
-               in-place.  If you want it to remain unmodified make a copy
-               first: >
-                       :let l = filter(copy(mylist), 'v:val =~ "KEEP"')
-
-<              Returns {expr1}, the |List| or |Dictionary| that was filtered,
-               or a new |Blob| or |String|. 
-               When an error is encountered while evaluating {expr2} no
-               further items in {expr1} are processed.
-               When {expr2} is a Funcref errors inside a function are ignored,
-               unless it was defined with the "abort" flag.
-
-               Can also be used as a |method|: >
-                       mylist->filter(expr2)
-
-finddir({name} [, {path} [, {count}]])                         *finddir()*
-               Find directory {name} in {path}.  Supports both downwards and
-               upwards recursive directory searches.  See |file-searching|
-               for the syntax of {path}.
-
-               Returns the path of the first found match.  When the found
-               directory is below the current directory a relative path is
-               returned.  Otherwise a full path is returned.
-               If {path} is omitted or empty then 'path' is used.
-
-               If the optional {count} is given, find {count}'s occurrence of
-               {name} in {path} instead of the first one.
-               When {count} is negative return all the matches in a |List|.
-
-               This is quite similar to the ex-command `:find`.
-               {only available when compiled with the |+file_in_path|
-               feature}
-
-               Can also be used as a |method|: >
-                       GetName()->finddir()
-
-findfile({name} [, {path} [, {count}]])                                *findfile()*
-               Just like |finddir()|, but find a file instead of a directory.
-               Uses 'suffixesadd'.
-               Example: >
-                       :echo findfile("tags.vim", ".;")
-<              Searches from the directory of the current file upwards until
-               it finds the file "tags.vim".
-
-               Can also be used as a |method|: >
-                       GetName()->findfile()
-
-flatten({list} [, {maxdepth}])                                 *flatten()*
-               Flatten {list} up to {maxdepth} levels.  Without {maxdepth}
-               the result is a |List| without nesting, as if {maxdepth} is
-               a very large number.
-               The {list} is changed in place, use |flattennew()| if you do
-               not want that.
-               In Vim9 script flatten() cannot be used, you must always use
-               |flattennew()|.
-                                                               *E900*
-               {maxdepth} means how deep in nested lists changes are made.
-               {list} is not modified when {maxdepth} is 0.
-               {maxdepth} must be positive number.
-
-               If there is an error the number zero is returned.
-
-               Example: >
-                       :echo flatten([1, [2, [3, 4]], 5])
-<                      [1, 2, 3, 4, 5] >
-                       :echo flatten([1, [2, [3, 4]], 5], 1)
-<                      [1, 2, [3, 4], 5]
-
-               Can also be used as a |method|: >
-                       mylist->flatten()
-<
-flattennew({list} [, {maxdepth}])                      *flattennew()*
-               Like |flatten()| but first make a copy of {list}.
-
-
-float2nr({expr})                                       *float2nr()*
-               Convert {expr} to a Number by omitting the part after the
-               decimal point.
-               {expr} must evaluate to a |Float| or a Number.
-               When the value of {expr} is out of range for a |Number| the
-               result is truncated to 0x7fffffff or -0x7fffffff (or when
-               64-bit Number support is enabled, 0x7fffffffffffffff or
-               -0x7fffffffffffffff).  NaN results in -0x80000000 (or when
-               64-bit Number support is enabled, -0x8000000000000000).
-               Examples: >
-                       echo float2nr(3.95)
-<                      3  >
-                       echo float2nr(-23.45)
-<                      -23  >
-                       echo float2nr(1.0e100)
-<                      2147483647  (or 9223372036854775807) >
-                       echo float2nr(-1.0e150)
-<                      -2147483647 (or -9223372036854775807) >
-                       echo float2nr(1.0e-100)
-<                      0
-
-               Can also be used as a |method|: >
-                       Compute()->float2nr()
-<
-               {only available when compiled with the |+float| feature}
-
-
-floor({expr})                                                  *floor()*
-               Return the largest integral value less than or equal to
-               {expr} as a |Float| (round down).
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       echo floor(1.856)
-<                      1.0  >
-                       echo floor(-5.456)
-<                      -6.0  >
-                       echo floor(4.0)
-<                      4.0
-
-               Can also be used as a |method|: >
-                       Compute()->floor()
-<
-               {only available when compiled with the |+float| feature}
-
-
-fmod({expr1}, {expr2})                                 *fmod()*
-               Return the remainder of {expr1} / {expr2}, even if the
-               division is not representable.  Returns {expr1} - i * {expr2}
-               for some integer i such that if {expr2} is non-zero, the
-               result has the same sign as {expr1} and magnitude less than
-               the magnitude of {expr2}.  If {expr2} is zero, the value
-               returned is zero.  The value returned is a |Float|.
-               {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo fmod(12.33, 1.22)
-<                      0.13 >
-                       :echo fmod(-12.33, 1.22)
-<                      -0.13
-
-               Can also be used as a |method|: >
-                       Compute()->fmod(1.22)
-<
-               {only available when compiled with |+float| feature}
-
-
-fnameescape({string})                                  *fnameescape()*
-               Escape {string} for use as file name command argument.  All
-               characters that have a special meaning, such as '%' and '|'
-               are escaped with a backslash.
-               For most systems the characters escaped are
-               " \t\n*?[{`$\\%#'\"|!<".  For systems where a backslash
-               appears in a filename, it depends on the value of 'isfname'.
-               A leading '+' and '>' is also escaped (special after |:edit|
-               and |:write|).  And a "-" by itself (special after |:cd|).
-               Example: >
-                       :let fname = '+some str%nge|name'
-                       :exe "edit " . fnameescape(fname)
-<              results in executing: >
-                       edit \+some\ str\%nge\|name
-<
-               Can also be used as a |method|: >
-                       GetName()->fnameescape()
-
-fnamemodify({fname}, {mods})                           *fnamemodify()*
-               Modify file name {fname} according to {mods}.  {mods} is a
-               string of characters like it is used for file names on the
-               command line.  See |filename-modifiers|.
-               Example: >
-                       :echo fnamemodify("main.c", ":p:h")
-<              results in: >
-                       /home/mool/vim/vim/src
-<              If {mods} is empty then {fname} is returned.
-               Note: Environment variables don't work in {fname}, use
-               |expand()| first then.
-
-               Can also be used as a |method|: >
-                       GetName()->fnamemodify(':p:h')
-
-foldclosed({lnum})                                     *foldclosed()*
-               The result is a Number.  If the line {lnum} is in a closed
-               fold, the result is the number of the first line in that fold.
-               If the line {lnum} is not in a closed fold, -1 is returned.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-
-               Can also be used as a |method|: >
-                       GetLnum()->foldclosed()
-
-foldclosedend({lnum})                                  *foldclosedend()*
-               The result is a Number.  If the line {lnum} is in a closed
-               fold, the result is the number of the last line in that fold.
-               If the line {lnum} is not in a closed fold, -1 is returned.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-
-               Can also be used as a |method|: >
-                       GetLnum()->foldclosedend()
-
-foldlevel({lnum})                                      *foldlevel()*
-               The result is a Number, which is the foldlevel of line {lnum}
-               in the current buffer.  For nested folds the deepest level is
-               returned.  If there is no fold at line {lnum}, zero is
-               returned.  It doesn't matter if the folds are open or closed.
-               When used while updating folds (from 'foldexpr') -1 is
-               returned for lines where folds are still to be updated and the
-               foldlevel is unknown.  As a special case the level of the
-               previous line is usually available.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-
-               Can also be used as a |method|: >
-                       GetLnum()->foldlevel()
-<
-                                                       *foldtext()*
-foldtext()     Returns a String, to be displayed for a closed fold.  This is
-               the default function used for the 'foldtext' option and should
-               only be called from evaluating 'foldtext'.  It uses the
-               |v:foldstart|, |v:foldend| and |v:folddashes| variables.
-               The returned string looks like this: >
-                       +-- 45 lines: abcdef
-<              The number of leading dashes depends on the foldlevel.  The
-               "45" is the number of lines in the fold.  "abcdef" is the text
-               in the first non-blank line of the fold.  Leading white space,
-               "//" or "/*" and the text from the 'foldmarker' and
-               'commentstring' options is removed.
-               When used to draw the actual foldtext, the rest of the line
-               will be filled with the fold char from the 'fillchars'
-               setting.
-               {not available when compiled without the |+folding| feature}
-
-foldtextresult({lnum})                                 *foldtextresult()*
-               Returns the text that is displayed for the closed fold at line
-               {lnum}.  Evaluates 'foldtext' in the appropriate context.
-               When there is no closed fold at {lnum} an empty string is
-               returned.
-               {lnum} is used like with |getline()|.  Thus "." is the current
-               line, "'m" mark m, etc.
-               Useful when exporting folded text, e.g., to HTML.
-               {not available when compiled without the |+folding| feature}
-
-
-               Can also be used as a |method|: >
-                       GetLnum()->foldtextresult()
-<
-                                                       *foreground()*
-foreground()   Move the Vim window to the foreground.  Useful when sent from
-               a client to a Vim server. |remote_send()|
-               On Win32 systems this might not work, the OS does not always
-               allow a window to bring itself to the foreground.  Use
-               |remote_foreground()| instead.
-               {only in the Win32, Athena, Motif and GTK GUI versions and the
-               Win32 console version}
-
-fullcommand({name})                                            *fullcommand()*
-               Get the full command name from a short abbreviated command
-               name; see |20.2| for details on command abbreviations.
-
-               The string argument {name} may start with a `:` and can
-               include a [range], these are skipped and not returned.
-               Returns an empty string if a command doesn't exist or if it's
-               ambiguous (for user-defined commands).
-
-               For example `fullcommand('s')`, `fullcommand('sub')`,
-               `fullcommand(':%substitute')` all return "substitute".
-
-               Can also be used as a |method|: >
-                       GetName()->fullcommand()
-<
-                                               *funcref()*
-funcref({name} [, {arglist}] [, {dict}])
-               Just like |function()|, but the returned Funcref will lookup
-               the function by reference, not by name.  This matters when the
-               function {name} is redefined later.
-
-               Unlike |function()|, {name} must be an existing user function.
-               Also for autoloaded functions. {name} cannot be a builtin
-               function.
-
-               Can also be used as a |method|: >
-                       GetFuncname()->funcref([arg])
-<
-                               *function()* *partial* *E700* *E922* *E923*
-function({name} [, {arglist}] [, {dict}])
-               Return a |Funcref| variable that refers to function {name}.
-               {name} can be the name of a user defined function or an
-               internal function.
-
-               {name} can also be a Funcref or a partial.  When it is a
-               partial the dict stored in it will be used and the {dict}
-               argument is not allowed. E.g.: >
-                       let FuncWithArg = function(dict.Func, [arg])
-                       let Broken = function(dict.Func, [arg], dict)
-<
-               When using the Funcref the function will be found by {name},
-               also when it was redefined later.  Use |funcref()| to keep the
-               same function.
-
-               When {arglist} or {dict} is present this creates a partial.
-               That means the argument list and/or the dictionary is stored in
-               the Funcref and will be used when the Funcref is called.
-
-               The arguments are passed to the function in front of other
-               arguments, but after any argument from |method|.  Example: >
-                       func Callback(arg1, arg2, name)
-                       ...
-                       let Partial = function('Callback', ['one', 'two'])
-                       ...
-                       call Partial('name')
-<              Invokes the function as with: >
-                       call Callback('one', 'two', 'name')
-
-<              With a |method|: >
-                       func Callback(one, two, three)
-                       ...
-                       let Partial = function('Callback', ['two'])
-                       ...
-                       eval 'one'->Partial('three')
-<              Invokes the function as with: >
-                       call Callback('one', 'two', 'three')
-
-<              The function() call can be nested to add more arguments to the
-               Funcref.  The extra arguments are appended to the list of
-               arguments.  Example: >
-                       func Callback(arg1, arg2, name)
-                       ...
-                       let Func = function('Callback', ['one'])
-                       let Func2 = function(Func, ['two'])
-                       ...
-                       call Func2('name')
-<              Invokes the function as with: >
-                       call Callback('one', 'two', 'name')
-
-<              The Dictionary is only useful when calling a "dict" function.
-               In that case the {dict} is passed in as "self". Example: >
-                       function Callback() dict
-                          echo "called for " . self.name
-                       endfunction
-                       ...
-                       let context = {"name": "example"}
-                       let Func = function('Callback', context)
-                       ...
-                       call Func()     " will echo: called for example
-<              The use of function() is not needed when there are no extra
-               arguments, these two are equivalent: >
-                       let Func = function('Callback', context)
-                       let Func = context.Callback
-
-<              The argument list and the Dictionary can be combined: >
-                       function Callback(arg1, count) dict
-                       ...
-                       let context = {"name": "example"}
-                       let Func = function('Callback', ['one'], context)
-                       ...
-                       call Func(500)
-<              Invokes the function as with: >
-                       call context.Callback('one', 500)
-<
-               Can also be used as a |method|: >
-                       GetFuncname()->function([arg])
-
-
-garbagecollect([{atexit}])                             *garbagecollect()*
-               Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs|
-               that have circular references.
-
-               There is hardly ever a need to invoke this function, as it is
-               automatically done when Vim runs out of memory or is waiting
-               for the user to press a key after 'updatetime'.  Items without
-               circular references are always freed when they become unused.
-               This is useful if you have deleted a very big |List| and/or
-               |Dictionary| with circular references in a script that runs
-               for a long time.
-
-               When the optional {atexit} argument is one, garbage
-               collection will also be done when exiting Vim, if it wasn't
-               done before.  This is useful when checking for memory leaks.
-
-               The garbage collection is not done immediately but only when
-               it's safe to perform.  This is when waiting for the user to
-               type a character.  To force garbage collection immediately use
-               |test_garbagecollect_now()|.
-
-get({list}, {idx} [, {default}])                       *get()*
-               Get item {idx} from |List| {list}.  When this item is not
-               available return {default}.  Return zero when {default} is
-               omitted.
-               Preferably used as a |method|: >
-                       mylist->get(idx)
-get({blob}, {idx} [, {default}])
-               Get byte {idx} from |Blob| {blob}.  When this byte is not
-               available return {default}.  Return -1 when {default} is
-               omitted.
-               Preferably used as a |method|: >
-                       myblob->get(idx)
-get({dict}, {key} [, {default}])
-               Get item with key {key} from |Dictionary| {dict}.  When this
-               item is not available return {default}.  Return zero when
-               {default} is omitted.  Useful example: >
-                       let val = get(g:, 'var_name', 'default')
-<              This gets the value of g:var_name if it exists, and uses
-               'default' when it does not exist.
-               Preferably used as a |method|: >
-                       mydict->get(key)
-get({func}, {what})
-               Get an item with from Funcref {func}.  Possible values for
-               {what} are:
-                       "name"  The function name
-                       "func"  The function
-                       "dict"  The dictionary
-                       "args"  The list with arguments
-               Preferably used as a |method|: >
-                       myfunc->get(what)
-<
-                                                       *getbufinfo()*
-getbufinfo([{buf}])
-getbufinfo([{dict}])
-               Get information about buffers as a List of Dictionaries.
-
-               Without an argument information about all the buffers is
-               returned.
-
-               When the argument is a |Dictionary| only the buffers matching
-               the specified criteria are returned.  The following keys can
-               be specified in {dict}:
-                       buflisted       include only listed buffers.
-                       bufloaded       include only loaded buffers.
-                       bufmodified     include only modified buffers.
-
-               Otherwise, {buf} specifies a particular buffer to return
-               information for.  For the use of {buf}, see |bufname()|
-               above.  If the buffer is found the returned List has one item.
-               Otherwise the result is an empty list.
-
-               Each returned List item is a dictionary with the following
-               entries:
-                       bufnr           Buffer number.
-                       changed         TRUE if the buffer is modified.
-                       changedtick     Number of changes made to the buffer.
-                       hidden          TRUE if the buffer is hidden.
-                       lastused        Timestamp in seconds, like
-                                       |localtime()|, when the buffer was
-                                       last used.
-                                       {only with the |+viminfo| feature}
-                       listed          TRUE if the buffer is listed.
-                       lnum            Line number used for the buffer when
-                                       opened in the current window.
-                                       Only valid if the buffer has been
-                                       displayed in the window in the past.
-                                       If you want the line number of the
-                                       last known cursor position in a given
-                                       window, use |line()|: >
-                                               :echo line('.', {winid})
-<
-                       linecount       Number of lines in the buffer (only
-                                       valid when loaded)
-                       loaded          TRUE if the buffer is loaded.
-                       name            Full path to the file in the buffer.
-                       signs           List of signs placed in the buffer.
-                                       Each list item is a dictionary with
-                                       the following fields:
-                                           id    sign identifier
-                                           lnum  line number
-                                           name  sign name
-                       variables       A reference to the dictionary with
-                                       buffer-local variables.
-                       windows         List of |window-ID|s that display this
-                                       buffer
-                       popups          List of popup |window-ID|s that
-                                       display this buffer
-
-               Examples: >
-                       for buf in getbufinfo()
-                           echo buf.name
-                       endfor
-                       for buf in getbufinfo({'buflisted':1})
-                           if buf.changed
-                               ....
-                           endif
-                       endfor
-<
-               To get buffer-local options use: >
-                       getbufvar({bufnr}, '&option_name')
-<
-               Can also be used as a |method|: >
-                       GetBufnr()->getbufinfo()
-<
-
-                                                       *getbufline()*
-getbufline({buf}, {lnum} [, {end}])
-               Return a |List| with the lines starting from {lnum} to {end}
-               (inclusive) in the buffer {buf}.  If {end} is omitted, a
-               |List| with only the line {lnum} is returned.
-
-               For the use of {buf}, see |bufname()| above.
-
-               For {lnum} and {end} "$" can be used for the last line of the
-               buffer.  Otherwise a number must be used.
-
-               When {lnum} is smaller than 1 or bigger than the number of
-               lines in the buffer, an empty |List| is returned.
-
-               When {end} is greater than the number of lines in the buffer,
-               it is treated as {end} is set to the number of lines in the
-               buffer.  When {end} is before {lnum} an empty |List| is
-               returned.
-
-               This function works only for loaded buffers.  For unloaded and
-               non-existing buffers, an empty |List| is returned.
-
-               Example: >
-                       :let lines = getbufline(bufnr("myfile"), 1, "$")
-
-<              Can also be used as a |method|: >
-                       GetBufnr()->getbufline(lnum)
-
-getbufvar({buf}, {varname} [, {def}])                          *getbufvar()*
-               The result is the value of option or local buffer variable
-               {varname} in buffer {buf}.  Note that the name without "b:"
-               must be used.
-               The {varname} argument is a string.
-               When {varname} is empty returns a |Dictionary| with all the
-               buffer-local variables.
-               When {varname} is equal to "&" returns a |Dictionary| with all
-               the buffer-local options.
-               Otherwise, when {varname} starts with "&" returns the value of
-               a buffer-local option.
-               This also works for a global or buffer-local option, but it
-               doesn't work for a global variable, window-local variable or
-               window-local option.
-               For the use of {buf}, see |bufname()| above.
-               When the buffer or variable doesn't exist {def} or an empty
-               string is returned, there is no error message.
-               Examples: >
-                       :let bufmodified = getbufvar(1, "&mod")
-                       :echo "todo myvar = " . getbufvar("todo", "myvar")
-
-<              Can also be used as a |method|: >
-                       GetBufnr()->getbufvar(varname)
-<
-getchangelist([{buf}])                                 *getchangelist()*
-               Returns the |changelist| for the buffer {buf}. For the use
-               of {buf}, see |bufname()| above. If buffer {buf} doesn't
-               exist, an empty list is returned.
-
-               The returned list contains two entries: a list with the change
-               locations and the current position in the list.  Each
-               entry in the change list is a dictionary with the following
-               entries:
-                       col             column number
-                       coladd          column offset for 'virtualedit'
-                       lnum            line number
-               If buffer {buf} is the current buffer, then the current
-               position refers to the position in the list. For other
-               buffers, it is set to the length of the list.
-
-               Can also be used as a |method|: >
-                       GetBufnr()->getchangelist()
-
-getchar([expr])                                                *getchar()*
-               Get a single character from the user or input stream.
-               If [expr] is omitted, wait until a character is available.
-               If [expr] is 0, only get a character when one is available.
-                       Return zero otherwise.
-               If [expr] is 1, only check if a character is available, it is
-                       not consumed.  Return zero if no character available.
-               If you prefer always getting a string use |getcharstr()|.
-
-               Without [expr] and when [expr] is 0 a whole character or
-               special key is returned.  If it is a single character, the
-               result is a number.  Use nr2char() to convert it to a String.
-               Otherwise a String is returned with the encoded character.
-               For a special key it's a String with a sequence of bytes
-               starting with 0x80 (decimal: 128).  This is the same value as
-               the String "\<Key>", e.g., "\<Left>".  The returned value is
-               also a String when a modifier (shift, control, alt) was used
-               that is not included in the character.
-
-               When [expr] is 0 and Esc is typed, there will be a short delay
-               while Vim waits to see if this is the start of an escape
-               sequence.
-
-               When [expr] is 1 only the first byte is returned.  For a
-               one-byte character it is the character itself as a number.
-               Use nr2char() to convert it to a String.
-
-               Use getcharmod() to obtain any additional modifiers.
-
-               When the user clicks a mouse button, the mouse event will be
-               returned.  The position can then be found in |v:mouse_col|,
-               |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
-               |getmousepos()| can also be used.  Mouse move events will be
-               ignored.
-               This example positions the mouse as it would normally happen: >
-                       let c = getchar()
-                       if c == "\<LeftMouse>" && v:mouse_win > 0
-                         exe v:mouse_win . "wincmd w"
-                         exe v:mouse_lnum
-                         exe "normal " . v:mouse_col . "|"
-                       endif
-<
-               When using bracketed paste only the first character is
-               returned, the rest of the pasted text is dropped.
-               |xterm-bracketed-paste|.
-
-               There is no prompt, you will somehow have to make clear to the
-               user that a character has to be typed.  The screen is not
-               redrawn, e.g. when resizing the window.  When using a popup
-               window it should work better with a |popup-filter|.
-
-               There is no mapping for the character.
-               Key codes are replaced, thus when the user presses the <Del>
-               key you get the code for the <Del> key, not the raw character
-               sequence.  Examples: >
-                       getchar() == "\<Del>"
-                       getchar() == "\<S-Left>"
-<              This example redefines "f" to ignore case: >
-                       :nmap f :call FindChar()<CR>
-                       :function FindChar()
-                       :  let c = nr2char(getchar())
-                       :  while col('.') < col('$') - 1
-                       :    normal l
-                       :    if getline('.')[col('.') - 1] ==? c
-                       :      break
-                       :    endif
-                       :  endwhile
-                       :endfunction
-<
-               You may also receive synthetic characters, such as
-               |<CursorHold>|. Often you will want to ignore this and get
-               another character: >
-                       :function GetKey()
-                       :  let c = getchar()
-                       :  while c == "\<CursorHold>"
-                       :    let c = getchar()
-                       :  endwhile
-                       :  return c
-                       :endfunction
-
-getcharmod()                                           *getcharmod()*
-               The result is a Number which is the state of the modifiers for
-               the last obtained character with getchar() or in another way.
-               These values are added together:
-                       2       shift
-                       4       control
-                       8       alt (meta)
-                       16      meta (when it's different from ALT)
-                       32      mouse double click
-                       64      mouse triple click
-                       96      mouse quadruple click (== 32 + 64)
-                       128     command (Macintosh only)
-               Only the modifiers that have not been included in the
-               character itself are obtained.  Thus Shift-a results in "A"
-               without a modifier.
-
-                                                       *getcharpos()*
-getcharpos({expr})
-               Get the position for String {expr}. Same as |getpos()| but the
-               column number in the returned List is a character index
-               instead of a byte index.
-               If |getpos()| returns a very large column number, such as
-               2147483647, then getcharpos() will return the character index
-               of the last character.
-
-               Example:
-               With the cursor on '세' in line 5 with text "여보세요": >
-                       getcharpos('.')         returns [0, 5, 3, 0]
-                       getpos('.')             returns [0, 5, 7, 0]
-<
-               Can also be used as a |method|: >
-                       GetMark()->getcharpos()
-
-getcharsearch()                                                *getcharsearch()*
-               Return the current character search information as a {dict}
-               with the following entries:
-
-                   char        character previously used for a character
-                               search (|t|, |f|, |T|, or |F|); empty string
-                               if no character search has been performed
-                   forward     direction of character search; 1 for forward,
-                               0 for backward
-                   until       type of character search; 1 for a |t| or |T|
-                               character search, 0 for an |f| or |F|
-                               character search
-
-               This can be useful to always have |;| and |,| search
-               forward/backward regardless of the direction of the previous
-               character search: >
-                       :nnoremap <expr> ; getcharsearch().forward ? ';' : ','
-                       :nnoremap <expr> , getcharsearch().forward ? ',' : ';'
-<              Also see |setcharsearch()|.
-
-
-getcharstr([expr])                                     *getcharstr()*
-               Get a single character from the user or input stream as a
-               string.
-               If [expr] is omitted, wait until a character is available.
-               If [expr] is 0 or false, only get a character when one is
-                       available.  Return an empty string otherwise.
-               If [expr] is 1 or true, only check if a character is
-                       available, it is not consumed.  Return an empty string
-                       if no character is available.
-               Otherwise this works like |getchar()|, except that a number
-               result is converted to a string.
-
-
-getcmdline()                                           *getcmdline()*
-               Return the current command-line.  Only works when the command
-               line is being edited, thus requires use of |c_CTRL-\_e| or
-               |c_CTRL-R_=|.
-               Example: >
-                       :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
-<              Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
-               Returns an empty string when entering a password or using
-               |inputsecret()|.
-
-getcmdpos()                                            *getcmdpos()*
-               Return the position of the cursor in the command line as a
-               byte count.  The first column is 1.
-               Only works when editing the command line, thus requires use of
-               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
-               Returns 0 otherwise.
-               Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
-
-getcmdtype()                                           *getcmdtype()*
-               Return the current command-line type. Possible return values
-               are:
-                   :   normal Ex command
-                   >   debug mode command |debug-mode|
-                   /   forward search command
-                   ?   backward search command
-                   @   |input()| command
-                   -   |:insert| or |:append| command
-                   =   |i_CTRL-R_=|
-               Only works when editing the command line, thus requires use of
-               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
-               Returns an empty string otherwise.
-               Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
-
-getcmdwintype()                                                *getcmdwintype()*
-               Return the current |command-line-window| type. Possible return
-               values are the same as |getcmdtype()|. Returns an empty string
-               when not in the command-line window.
-
-getcompletion({pat}, {type} [, {filtered}])            *getcompletion()*
-               Return a list of command-line completion matches. The String
-               {type} argument specifies what for.  The following completion
-               types are supported:
-
-               arglist         file names in argument list
-               augroup         autocmd groups
-               buffer          buffer names
-               behave          :behave suboptions
-               color           color schemes
-               command         Ex command
-               cmdline         |cmdline-completion| result
-               compiler        compilers
-               cscope          |:cscope| suboptions
-               diff_buffer     |:diffget| and |:diffput| completion
-               dir             directory names
-               environment     environment variable names
-               event           autocommand events
-               expression      Vim expression
-               file            file and directory names
-               file_in_path    file and directory names in |'path'|
-               filetype        filetype names |'filetype'|
-               function        function name
-               help            help subjects
-               highlight       highlight groups
-               history         :history suboptions
-               locale          locale names (as output of locale -a)
-               mapclear        buffer argument
-               mapping         mapping name
-               menu            menus
-               messages        |:messages| suboptions
-               option          options
-               packadd         optional package |pack-add| names
-               shellcmd        Shell command
-               sign            |:sign| suboptions
-               syntax          syntax file names |'syntax'|
-               syntime         |:syntime| suboptions
-               tag             tags
-               tag_listfiles   tags, file names
-               user            user names
-               var             user variables
-
-               If {pat} is an empty string, then all the matches are
-               returned.  Otherwise only items matching {pat} are returned.
-               See |wildcards| for the use of special characters in {pat}.
-
-               If the optional {filtered} flag is set to 1, then 'wildignore'
-               is applied to filter the results.  Otherwise all the matches
-               are returned. The 'wildignorecase' option always applies.
-
-               If {type} is "cmdline", then the |cmdline-completion| result is
-               returned.  For example, to complete the possible values after
-               a ":call" command: >
-                       echo getcompletion('call ', 'cmdline')
-<
-               If there are no matches, an empty list is returned.  An
-               invalid value for {type} produces an error.
-
-               Can also be used as a |method|: >
-                       GetPattern()->getcompletion('color')
-<
-                                                       *getcurpos()*
-getcurpos([{winid}])
-               Get the position of the cursor.  This is like getpos('.'), but
-               includes an extra "curswant" item in the list:
-                   [0, lnum, col, off, curswant] ~
-               The "curswant" number is the preferred column when moving the
-               cursor vertically.  Also see |getcursorcharpos()| and
-               |getpos()|.
-               The first "bufnum" item is always zero. The byte position of
-               the cursor is returned in 'col'. To get the character
-               position, use |getcursorcharpos()|.
-
-               The optional {winid} argument can specify the window.  It can
-               be the window number or the |window-ID|.  The last known
-               cursor position is returned, this may be invalid for the
-               current value of the buffer if it is not the current window.
-               If {winid} is invalid a list with zeroes is returned.
-
-               This can be used to save and restore the cursor position: >
-                       let save_cursor = getcurpos()
-                       MoveTheCursorAround
-                       call setpos('.', save_cursor)
-<              Note that this only works within the window.  See
-               |winrestview()| for restoring more state.
-
-               Can also be used as a |method|: >
-                       GetWinid()->getcurpos()
-<
-                                                       *getcursorcharpos()*
-getcursorcharpos([{winid}])
-               Same as |getcurpos()| but the column number in the returned
-               List is a character index instead of a byte index.
-
-               Example:
-               With the cursor on '보' in line 3 with text "여보세요": >
-                       getcursorcharpos()      returns [0, 3, 2, 0, 3]
-                       getcurpos()             returns [0, 3, 4, 0, 3]
-<
-               Can also be used as a |method|: >
-                       GetWinid()->getcursorcharpos()
-
-<                                                      *getcwd()*
-getcwd([{winnr} [, {tabnr}]])
-               The result is a String, which is the name of the current
-               working directory.  'autochdir' is ignored.
-
-               With {winnr} return the local current directory of this window
-               in the current tab page.  {winnr} can be the window number or
-               the |window-ID|.
-               If {winnr} is -1 return the name of the global working
-               directory.  See also |haslocaldir()|.
-
-               With {winnr} and {tabnr} return the local current directory of
-               the window in the specified tab page. If {winnr} is -1 return
-               the working directory of the tabpage.
-               If {winnr} is zero use the current window, if {tabnr} is zero
-               use the current tabpage.
-               Without any arguments, return the actual working directory of
-               the current window.
-               Return an empty string if the arguments are invalid.
-
-               Examples: >
-                       " Get the working directory of the current window
-                       :echo getcwd()
-                       :echo getcwd(0)
-                       :echo getcwd(0, 0)
-                       " Get the working directory of window 3 in tabpage 2
-                       :echo getcwd(3, 2)
-                       " Get the global working directory
-                       :echo getcwd(-1)
-                       " Get the working directory of tabpage 3
-                       :echo getcwd(-1, 3)
-                       " Get the working directory of current tabpage
-                       :echo getcwd(-1, 0)
-
-<              Can also be used as a |method|: >
-                       GetWinnr()->getcwd()
-
-getenv({name})                                         *getenv()*
-               Return the value of environment variable {name}.  The {name}
-               argument is a string, without a leading '$'.  Example: >
-                       myHome = getenv('HOME')
-
-<              When the variable does not exist |v:null| is returned.  That
-               is different from a variable set to an empty string, although
-               some systems interpret the empty value as the variable being
-               deleted.  See also |expr-env|.
-
-               Can also be used as a |method|: >
-                       GetVarname()->getenv()
-
-getfontname([{name}])                                  *getfontname()*
-               Without an argument returns the name of the normal font being
-               used.  Like what is used for the Normal highlight group
-               |hl-Normal|.
-               With an argument a check is done whether String {name} is a
-               valid font name.  If not then an empty string is returned.
-               Otherwise the actual font name is returned, or {name} if the
-               GUI does not support obtaining the real name.
-               Only works when the GUI is running, thus not in your vimrc or
-               gvimrc file.  Use the |GUIEnter| autocommand to use this
-               function just after the GUI has started.
-               Note that the GTK GUI accepts any font name, thus checking for
-               a valid name does not work.
-
-getfperm({fname})                                      *getfperm()*
-               The result is a String, which is the read, write, and execute
-               permissions of the given file {fname}.
-               If {fname} does not exist or its directory cannot be read, an
-               empty string is returned.
-               The result is of the form "rwxrwxrwx", where each group of
-               "rwx" flags represent, in turn, the permissions of the owner
-               of the file, the group the file belongs to, and other users.
-               If a user does not have a given permission the flag for this
-               is replaced with the string "-".  Examples: >
-                       :echo getfperm("/etc/passwd")
-                       :echo getfperm(expand("~/.vimrc"))
-<              This will hopefully (from a security point of view) display
-               the string "rw-r--r--" or even "rw-------".
-
-               Can also be used as a |method|: >
-                       GetFilename()->getfperm()
-<
-               For setting permissions use |setfperm()|.
-
-getfsize({fname})                                      *getfsize()*
-               The result is a Number, which is the size in bytes of the
-               given file {fname}.
-               If {fname} is a directory, 0 is returned.
-               If the file {fname} can't be found, -1 is returned.
-               If the size of {fname} is too big to fit in a Number then -2
-               is returned.
-
-               Can also be used as a |method|: >
-                       GetFilename()->getfsize()
-
-getftime({fname})                                      *getftime()*
-               The result is a Number, which is the last modification time of
-               the given file {fname}.  The value is measured as seconds
-               since 1st Jan 1970, and may be passed to strftime().  See also
-               |localtime()| and |strftime()|.
-               If the file {fname} can't be found -1 is returned.
-
-               Can also be used as a |method|: >
-                       GetFilename()->getftime()
-
-getftype({fname})                                      *getftype()*
-               The result is a String, which is a description of the kind of
-               file of the given file {fname}.
-               If {fname} does not exist an empty string is returned.
-               Here is a table over different kinds of files and their
-               results:
-                       Normal file             "file"
-                       Directory               "dir"
-                       Symbolic link           "link"
-                       Block device            "bdev"
-                       Character device        "cdev"
-                       Socket                  "socket"
-                       FIFO                    "fifo"
-                       All other               "other"
-               Example: >
-                       getftype("/home")
-<              Note that a type such as "link" will only be returned on
-               systems that support it.  On some systems only "dir" and
-               "file" are returned.  On MS-Windows a symbolic link to a
-               directory returns "dir" instead of "link".
-
-               Can also be used as a |method|: >
-                       GetFilename()->getftype()
-
-getimstatus()                                          *getimstatus()*
-               The result is a Number, which is |TRUE| when the IME status is
-               active.
-               See 'imstatusfunc'.
-
-getjumplist([{winnr} [, {tabnr}]])                     *getjumplist()*
-               Returns the |jumplist| for the specified window.
-
-               Without arguments use the current window.
-               With {winnr} only use this window in the current tab page.
-               {winnr} can also be a |window-ID|.
-               With {winnr} and {tabnr} use the window in the specified tab
-               page.
-
-               The returned list contains two entries: a list with the jump
-               locations and the last used jump position number in the list.
-               Each entry in the jump location list is a dictionary with
-               the following entries:
-                       bufnr           buffer number
-                       col             column number
-                       coladd          column offset for 'virtualedit'
-                       filename        filename if available
-                       lnum            line number
-
-               Can also be used as a |method|: >
-                       GetWinnr()->getjumplist()
-
-<                                                      *getline()*
-getline({lnum} [, {end}])
-               Without {end} the result is a String, which is line {lnum}
-               from the current buffer.  Example: >
-                       getline(1)
-<              When {lnum} is a String that doesn't start with a
-               digit, |line()| is called to translate the String into a Number.
-               To get the line under the cursor: >
-                       getline(".")
-<              When {lnum} is a number smaller than 1 or bigger than the
-               number of lines in the buffer, an empty string is returned.
-
-               When {end} is given the result is a |List| where each item is
-               a line from the current buffer in the range {lnum} to {end},
-               including line {end}.
-               {end} is used in the same way as {lnum}.
-               Non-existing lines are silently omitted.
-               When {end} is before {lnum} an empty |List| is returned.
-               Example: >
-                       :let start = line('.')
-                       :let end = search("^$") - 1
-                       :let lines = getline(start, end)
-
-<              Can also be used as a |method|: >
-                       ComputeLnum()->getline()
-
-<              To get lines from another buffer see |getbufline()|
-
-getloclist({nr} [, {what}])                            *getloclist()*
-               Returns a |List| with all the entries in the location list for
-               window {nr}.  {nr} can be the window number or the |window-ID|.
-               When {nr} is zero the current window is used.
-
-               For a location list window, the displayed location list is
-               returned.  For an invalid window number {nr}, an empty list is
-               returned. Otherwise, same as |getqflist()|.
-
-               If the optional {what} dictionary argument is supplied, then
-               returns the items listed in {what} as a dictionary. Refer to
-               |getqflist()| for the supported items in {what}.
-
-               In addition to the items supported by |getqflist()| in {what},
-               the following item is supported by |getloclist()|:
-
-                       filewinid       id of the window used to display files
-                                       from the location list. This field is
-                                       applicable only when called from a
-                                       location list window. See
-                                       |location-list-file-window| for more
-                                       details.
-
-               Returns a |Dictionary| with default values if there is no
-               location list for the window {nr}.
-               Returns an empty Dictionary if window {nr} does not exist.
-
-               Examples (See also |getqflist-examples|): >
-                       :echo getloclist(3, {'all': 0})
-                       :echo getloclist(5, {'filewinid': 0})
-
-
-getmarklist([{buf}])                                   *getmarklist()*
-               Without the {buf} argument returns a |List| with information
-               about all the global marks. |mark|
-
-               If the optional {buf} argument is specified, returns the
-               local marks defined in buffer {buf}.  For the use of {buf},
-               see |bufname()|.
-
-               Each item in the returned List is a |Dict| with the following:
-                   mark   name of the mark prefixed by "'"
-                   pos    a |List| with the position of the mark:
-                               [bufnum, lnum, col, off]
-                          Refer to |getpos()| for more information.
-                   file   file name
-
-               Refer to |getpos()| for getting information about a specific
-               mark.
-
-               Can also be used as a |method|: >
-                       GetBufnr()->getmarklist()
-
-getmatches([{win}])                                    *getmatches()*
-               Returns a |List| with all matches previously defined for the
-               current window by |matchadd()| and the |:match| commands.
-               |getmatches()| is useful in combination with |setmatches()|,
-               as |setmatches()| can restore a list of matches saved by
-               |getmatches()|.
-               If {win} is specified, use the window with this number or
-               window ID instead of the current window.
-               Example: >
-                       :echo getmatches()
-<                      [{'group': 'MyGroup1', 'pattern': 'TODO',
-                       'priority': 10, 'id': 1}, {'group': 'MyGroup2',
-                       'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
-                       :let m = getmatches()
-                       :call clearmatches()
-                       :echo getmatches()
-<                      [] >
-                       :call setmatches(m)
-                       :echo getmatches()
-<                      [{'group': 'MyGroup1', 'pattern': 'TODO',
-                       'priority': 10, 'id': 1}, {'group': 'MyGroup2',
-                       'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
-                       :unlet m
-<
-getmousepos()                                          *getmousepos()*
-               Returns a |Dictionary| with the last known position of the
-               mouse.  This can be used in a mapping for a mouse click or in
-               a filter of a popup window.  The items are:
-                       screenrow       screen row
-                       screencol       screen column
-                       winid           Window ID of the click
-                       winrow          row inside "winid"
-                       wincol          column inside "winid"
-                       line            text line inside "winid"
-                       column          text column inside "winid"
-               All numbers are 1-based.
-
-               If not over a window, e.g. when in the command line, then only
-               "screenrow" and "screencol" are valid, the others are zero.
-
-               When on the status line below a window or the vertical
-               separator right of a window, the "line" and "column" values
-               are zero.
-
-               When the position is after the text then "column" is the
-               length of the text in bytes plus one.
-
-               If the mouse is over a popup window then that window is used.
-
-               When using |getchar()| the Vim variables |v:mouse_lnum|,
-               |v:mouse_col| and |v:mouse_winid| also provide these values.
-
-                                                       *getpid()*
-getpid()       Return a Number which is the process ID of the Vim process.
-               On Unix and MS-Windows this is a unique number, until Vim
-               exits.
-
-                                                       *getpos()*
-getpos({expr}) Get the position for String {expr}.  For possible values of
-               {expr} see |line()|.  For getting the cursor position see
-               |getcurpos()|.
-               The result is a |List| with four numbers:
-                   [bufnum, lnum, col, off]
-               "bufnum" is zero, unless a mark like '0 or 'A is used, then it
-               is the buffer number of the mark.
-               "lnum" and "col" are the position in the buffer.  The first
-               column is 1.
-               The "off" number is zero, unless 'virtualedit' is used.  Then
-               it is the offset in screen columns from the start of the
-               character.  E.g., a position within a <Tab> or after the last
-               character.
-               Note that for '< and '> Visual mode matters: when it is "V"
-               (visual line mode) the column of '< is zero and the column of
-               '> is a large number.
-               The column number in the returned List is the byte position
-               within the line. To get the character position in the line,
-               use |getcharpos()|.
-               The column number can be very large, e.g. 2147483647, in which
-               case it means "after the end of the line".
-               This can be used to save and restore the position of a mark: >
-                       let save_a_mark = getpos("'a")
-                       ...
-                       call setpos("'a", save_a_mark)
-<              Also see |getcharpos()|, |getcurpos()| and |setpos()|.
-
-               Can also be used as a |method|: >
-                       GetMark()->getpos()
-
-getqflist([{what}])                                    *getqflist()*
-               Returns a |List| with all the current quickfix errors.  Each
-               list item is a dictionary with these entries:
-                       bufnr   number of buffer that has the file name, use
-                               bufname() to get the name
-                       module  module name
-                       lnum    line number in the buffer (first line is 1)
-                       end_lnum
-                               end of line number if the item is multiline
-                       col     column number (first column is 1)
-                       end_col end of column number if the item has range
-                       vcol    |TRUE|: "col" is visual column
-                               |FALSE|: "col" is byte index
-                       nr      error number
-                       pattern search pattern used to locate the error
-                       text    description of the error
-                       type    type of the error, 'E', '1', etc.
-                       valid   |TRUE|: recognized error message
-
-               When there is no error list or it's empty, an empty list is
-               returned. Quickfix list entries with a non-existing buffer
-               number are returned with "bufnr" set to zero (Note: some
-               functions accept buffer number zero for the alternate buffer,
-               you may need to explicitly check for zero).
-
-               Useful application: Find pattern matches in multiple files and
-               do something with them: >
-                       :vimgrep /theword/jg *.c
-                       :for d in getqflist()
-                       :   echo bufname(d.bufnr) ':' d.lnum '=' d.text
-                       :endfor
-<
-               If the optional {what} dictionary argument is supplied, then
-               returns only the items listed in {what} as a dictionary. The
-               following string items are supported in {what}:
-                       changedtick     get the total number of changes made
-                                       to the list |quickfix-changedtick|
-                       context get the |quickfix-context|
-                       efm     errorformat to use when parsing "lines". If
-                               not present, then the 'errorformat' option
-                               value is used.
-                       id      get information for the quickfix list with
-                               |quickfix-ID|; zero means the id for the
-                               current list or the list specified by "nr"
-                       idx     get information for the quickfix entry at this
-                               index in the list specified by 'id' or 'nr'.
-                               If set to zero, then uses the current entry.
-                               See |quickfix-index|
-                       items   quickfix list entries
-                       lines   parse a list of lines using 'efm' and return
-                               the resulting entries.  Only a |List| type is
-                               accepted.  The current quickfix list is not
-                               modified. See |quickfix-parse|.
-                       nr      get information for this quickfix list; zero
-                               means the current quickfix list and "$" means
-                               the last quickfix list
-                       qfbufnr number of the buffer displayed in the quickfix
-                               window. Returns 0 if the quickfix buffer is
-                               not present. See |quickfix-buffer|.
-                       size    number of entries in the quickfix list
-                       title   get the list title |quickfix-title|
-                       winid   get the quickfix |window-ID|
-                       all     all of the above quickfix properties
-               Non-string items in {what} are ignored. To get the value of a
-               particular item, set it to zero.
-               If "nr" is not present then the current quickfix list is used.
-               If both "nr" and a non-zero "id" are specified, then the list
-               specified by "id" is used.
-               To get the number of lists in the quickfix stack, set "nr" to
-               "$" in {what}. The "nr" value in the returned dictionary
-               contains the quickfix stack size.
-               When "lines" is specified, all the other items except "efm"
-               are ignored.  The returned dictionary contains the entry
-               "items" with the list of entries.
-
-               The returned dictionary contains the following entries:
-                       changedtick     total number of changes made to the
-                                       list |quickfix-changedtick|
-                       context quickfix list context. See |quickfix-context|
-                               If not present, set to "".
-                       id      quickfix list ID |quickfix-ID|. If not
-                               present, set to 0.
-                       idx     index of the quickfix entry in the list. If not
-                               present, set to 0.
-                       items   quickfix list entries. If not present, set to
-                               an empty list.
-                       nr      quickfix list number. If not present, set to 0
-                       qfbufnr number of the buffer displayed in the quickfix
-                               window. If not present, set to 0.
-                       size    number of entries in the quickfix list. If not
-                               present, set to 0.
-                       title   quickfix list title text. If not present, set
-                               to "".
-                       winid   quickfix |window-ID|. If not present, set to 0
-
-               Examples (See also |getqflist-examples|): >
-                       :echo getqflist({'all': 1})
-                       :echo getqflist({'nr': 2, 'title': 1})
-                       :echo getqflist({'lines' : ["F1:10:L10"]})
-<
-getreg([{regname} [, 1 [, {list}]]])                   *getreg()*
-               The result is a String, which is the contents of register
-               {regname}.  Example: >
-                       :let cliptext = getreg('*')
-<              When register {regname} was not set the result is an empty
-               string.
-               The {regname} argument must be a string.
-
-               getreg('=') returns the last evaluated value of the expression
-               register.  (For use in maps.)
-               getreg('=', 1) returns the expression itself, so that it can
-               be restored with |setreg()|.  For other registers the extra
-               argument is ignored, thus you can always give it.
-
-               If {list} is present and |TRUE|, the result type is changed
-               to |List|. Each list item is one text line. Use it if you care
-               about zero bytes possibly present inside register: without
-               third argument both NLs and zero bytes are represented as NLs
-               (see |NL-used-for-Nul|).
-               When the register was not set an empty list is returned.
-
-               If {regname} is "", the unnamed register '"' is used.
-               If {regname} is not specified, |v:register| is used.
-               In |Vim9-script| {regname} must be one character.
-
-               Can also be used as a |method|: >
-                       GetRegname()->getreg()
-
-getreginfo([{regname}])                                        *getreginfo()*
-               Returns detailed information about register {regname} as a
-               Dictionary with the following entries:
-                       regcontents     List of lines contained in register
-                                       {regname}, like
-                                       |getreg|({regname}, 1, 1).
-                       regtype         the type of register {regname}, as in
-                                       |getregtype()|.
-                       isunnamed       Boolean flag, v:true if this register
-                                       is currently pointed to by the unnamed
-                                       register.
-                       points_to       for the unnamed register, gives the
-                                       single letter name of the register
-                                       currently pointed to (see |quotequote|).
-                                       For example, after deleting a line
-                                       with `dd`, this field will be "1",
-                                       which is the register that got the
-                                       deleted text.
-
-               The {regname} argument is a string.  If {regname} is invalid
-               or not set, an empty Dictionary will be returned.
-               If {regname} is "" or "@", the unnamed register '"' is used.
-               If {regname} is not specified, |v:register| is used.
-               The returned Dictionary can be passed to |setreg()|.
-               In |Vim9-script| {regname} must be one character.
-
-               Can also be used as a |method|: >
-                       GetRegname()->getreginfo()
-
-getregtype([{regname}])                                        *getregtype()*
-               The result is a String, which is type of register {regname}.
-               The value will be one of:
-                   "v"                 for |characterwise| text
-                   "V"                 for |linewise| text
-                   "<CTRL-V>{width}"   for |blockwise-visual| text
-                   ""                  for an empty or unknown register
-               <CTRL-V> is one character with value 0x16.
-               The {regname} argument is a string.  If {regname} is "", the
-               unnamed register '"' is used.  If {regname} is not specified,
-               |v:register| is used.
-               In |Vim9-script| {regname} must be one character.
-
-               Can also be used as a |method|: >
-                       GetRegname()->getregtype()
-
-gettabinfo([{tabnr}])                                  *gettabinfo()*
-               If {tabnr} is not specified, then information about all the
-               tab pages is returned as a |List|. Each List item is a
-               |Dictionary|.  Otherwise, {tabnr} specifies the tab page
-               number and information about that one is returned.  If the tab
-               page does not exist an empty List is returned.
-
-               Each List item is a |Dictionary| with the following entries:
-                       tabnr           tab page number.
-                       variables       a reference to the dictionary with
-                                       tabpage-local variables
-                       windows         List of |window-ID|s in the tab page.
-
-               Can also be used as a |method|: >
-                       GetTabnr()->gettabinfo()
-
-gettabvar({tabnr}, {varname} [, {def}])                                *gettabvar()*
-               Get the value of a tab-local variable {varname} in tab page
-               {tabnr}. |t:var|
-               Tabs are numbered starting with one.
-               The {varname} argument is a string.  When {varname} is empty a
-               dictionary with all tab-local variables is returned.
-               Note that the name without "t:" must be used.
-               When the tab or variable doesn't exist {def} or an empty
-               string is returned, there is no error message.
-
-               Can also be used as a |method|: >
-                       GetTabnr()->gettabvar(varname)
-
-gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])            *gettabwinvar()*
-               Get the value of window-local variable {varname} in window
-               {winnr} in tab page {tabnr}.
-               The {varname} argument is a string.  When {varname} is empty a
-               dictionary with all window-local variables is returned.
-               When {varname} is equal to "&" get the values of all
-               window-local options in a |Dictionary|.
-               Otherwise, when {varname} starts with "&" get the value of a
-               window-local option.
-               Note that {varname} must be the name without "w:".
-               Tabs are numbered starting with one.  For the current tabpage
-               use |getwinvar()|.
-               {winnr} can be the window number or the |window-ID|.
-               When {winnr} is zero the current window is used.
-               This also works for a global option, buffer-local option and
-               window-local option, but it doesn't work for a global variable
-               or buffer-local variable.
-               When the tab, window or variable doesn't exist {def} or an
-               empty string is returned, there is no error message.
-               Examples: >
-                       :let list_is_on = gettabwinvar(1, 2, '&list')
-                       :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
-<
-               To obtain all window-local variables use: >
-                       gettabwinvar({tabnr}, {winnr}, '&')
-
-<              Can also be used as a |method|: >
-                       GetTabnr()->gettabwinvar(winnr, varname)
-
-gettagstack([{winnr}])                                 *gettagstack()*
-               The result is a Dict, which is the tag stack of window {winnr}.
-               {winnr} can be the window number or the |window-ID|.
-               When {winnr} is not specified, the current window is used.
-               When window {winnr} doesn't exist, an empty Dict is returned.
-
-               The returned dictionary contains the following entries:
-                       curidx          Current index in the stack. When at
-                                       top of the stack, set to (length + 1).
-                                       Index of bottom of the stack is 1.
-                       items           List of items in the stack. Each item
-                                       is a dictionary containing the
-                                       entries described below.
-                       length          Number of entries in the stack.
-
-               Each item in the stack is a dictionary with the following
-               entries:
-                       bufnr           buffer number of the current jump
-                       from            cursor position before the tag jump.
-                                       See |getpos()| for the format of the
-                                       returned list.
-                       matchnr         current matching tag number. Used when
-                                       multiple matching tags are found for a
-                                       name.
-                       tagname         name of the tag
-
-               See |tagstack| for more information about the tag stack.
-
-               Can also be used as a |method|: >
-                       GetWinnr()->gettagstack()
-
-
-gettext({text})                                                *gettext()*
-               Translate String {text} if possible.
-               This is mainly for use in the distributed Vim scripts.  When
-               generating message translations the {text} is extracted by
-               xgettext, the translator can add the translated message in the
-               .po file and Vim will lookup the translation when gettext() is
-               called.
-               For {text} double quoted strings are preferred, because
-               xgettext does not understand escaping in single quoted
-               strings.
-
-
-getwininfo([{winid}])                                  *getwininfo()*
-               Returns information about windows as a |List| with Dictionaries.
-
-               If {winid} is given Information about the window with that ID
-               is returned, as a |List| with one item.  If the window does not
-               exist the result is an empty list.
-
-               Without {winid} information about all the windows in all the
-               tab pages is returned.
-
-               Each List item is a |Dictionary| with the following entries:
-                       botline         last complete displayed buffer line
-                       bufnr           number of buffer in the window
-                       height          window height (excluding winbar)
-                       loclist         1 if showing a location list
-                                       {only with the +quickfix feature}
-                       quickfix        1 if quickfix or location list window
-                                       {only with the +quickfix feature}
-                       terminal        1 if a terminal window
-                                       {only with the +terminal feature}
-                       tabnr           tab page number
-                       topline         first displayed buffer line
-                       variables       a reference to the dictionary with
-                                       window-local variables
-                       width           window width
-                       winbar          1 if the window has a toolbar, 0
-                                       otherwise
-                       wincol          leftmost screen column of the window;
-                                       "col" from |win_screenpos()|
-                       textoff         number of columns occupied by any
-                                       'foldcolumn', 'signcolumn' and line
-                                       number in front of the text
-                       winid           |window-ID|
-                       winnr           window number
-                       winrow          topmost screen line of the window;
-                                       "row" from |win_screenpos()|
-
-               Can also be used as a |method|: >
-                       GetWinnr()->getwininfo()
-
-getwinpos([{timeout}])                                 *getwinpos()*
-               The result is a |List| with two numbers, the result of
-               |getwinposx()| and |getwinposy()| combined:
-                       [x-pos, y-pos]
-               {timeout} can be used to specify how long to wait in msec for
-               a response from the terminal.  When omitted 100 msec is used.
-               Use a longer time for a remote terminal.
-               When using a value less than 10 and no response is received
-               within that time, a previously reported position is returned,
-               if available.  This can be used to poll for the position and
-               do some work in the meantime: >
-                       while 1
-                         let res = getwinpos(1)
-                         if res[0] >= 0
-                           break
-                         endif
-                         " Do some work here
-                       endwhile
-<
-
-               Can also be used as a |method|: >
-                       GetTimeout()->getwinpos()
-<
-                                                       *getwinposx()*
-getwinposx()   The result is a Number, which is the X coordinate in pixels of
-               the left hand side of the GUI Vim window. Also works for an
-               xterm (uses a timeout of 100 msec).
-               The result will be -1 if the information is not available.
-               The value can be used with `:winpos`.
-
-                                                       *getwinposy()*
-getwinposy()   The result is a Number, which is the Y coordinate in pixels of
-               the top of the GUI Vim window.  Also works for an xterm (uses
-               a timeout of 100 msec).
-               The result will be -1 if the information is not available.
-               The value can be used with `:winpos`.
-
-getwinvar({winnr}, {varname} [, {def}])                                *getwinvar()*
-               Like |gettabwinvar()| for the current tabpage.
-               Examples: >
-                       :let list_is_on = getwinvar(2, '&list')
-                       :echo "myvar = " . getwinvar(1, 'myvar')
-
-<              Can also be used as a |method|: >
-                       GetWinnr()->getwinvar(varname)
-<
-glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])             *glob()*
-               Expand the file wildcards in {expr}.  See |wildcards| for the
-               use of special characters.
-
-               Unless the optional {nosuf} argument is given and is |TRUE|,
-               the 'suffixes' and 'wildignore' options apply: Names matching
-               one of the patterns in 'wildignore' will be skipped and
-               'suffixes' affect the ordering of matches.
-               'wildignorecase' always applies.
-
-               When {list} is present and it is |TRUE| the result is a |List|
-               with all matching files. The advantage of using a List is,
-               you also get filenames containing newlines correctly.
-               Otherwise the result is a String and when there are several
-               matches, they are separated by <NL> characters.
-
-               If the expansion fails, the result is an empty String or List.
-
-               You can also use |readdir()| if you need to do complicated
-               things, such as limiting the number of matches.
-
-               A name for a non-existing file is not included.  A symbolic
-               link is only included if it points to an existing file.
-               However, when the {alllinks} argument is present and it is
-               |TRUE| then all symbolic links are included.
-
-               For most systems backticks can be used to get files names from
-               any external command.  Example: >
-                       :let tagfiles = glob("`find . -name tags -print`")
-                       :let &tags = substitute(tagfiles, "\n", ",", "g")
-<              The result of the program inside the backticks should be one
-               item per line.  Spaces inside an item are allowed.
-
-               See |expand()| for expanding special Vim variables.  See
-               |system()| for getting the raw output of an external command.
-
-               Can also be used as a |method|: >
-                       GetExpr()->glob()
-
-glob2regpat({string})                                   *glob2regpat()*
-               Convert a file pattern, as used by glob(), into a search
-               pattern.  The result can be used to match with a string that
-               is a file name.  E.g. >
-                       if filename =~ glob2regpat('Make*.mak')
-<              This is equivalent to: >
-                       if filename =~ '^Make.*\.mak$'
-<              When {string} is an empty string the result is "^$", match an
-               empty string.
-               Note that the result depends on the system.  On MS-Windows
-               a backslash usually means a path separator.
-
-               Can also be used as a |method|: >
-                       GetExpr()->glob2regpat()
-<                                                              *globpath()*
-globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
-               Perform glob() for String {expr} on all directories in {path}
-               and concatenate the results.  Example: >
-                       :echo globpath(&rtp, "syntax/c.vim")
-<
-               {path} is a comma-separated list of directory names.  Each
-               directory name is prepended to {expr} and expanded like with
-               |glob()|.  A path separator is inserted when needed.
-               To add a comma inside a directory name escape it with a
-               backslash.  Note that on MS-Windows a directory may have a
-               trailing backslash, remove it if you put a comma after it.
-               If the expansion fails for one of the directories, there is no
-               error message.
-
-               Unless the optional {nosuf} argument is given and is |TRUE|,
-               the 'suffixes' and 'wildignore' options apply: Names matching
-               one of the patterns in 'wildignore' will be skipped and
-               'suffixes' affect the ordering of matches.
-
-               When {list} is present and it is |TRUE| the result is a |List|
-               with all matching files. The advantage of using a List is, you
-               also get filenames containing newlines correctly. Otherwise
-               the result is a String and when there are several matches,
-               they are separated by <NL> characters.  Example: >
-                       :echo globpath(&rtp, "syntax/c.vim", 0, 1)
-<
-               {alllinks} is used as with |glob()|.
-
-               The "**" item can be used to search in a directory tree.
-               For example, to find all "README.txt" files in the directories
-               in 'runtimepath' and below: >
-                       :echo globpath(&rtp, "**/README.txt")
-<              Upwards search and limiting the depth of "**" is not
-               supported, thus using 'path' will not always work properly.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetExpr()->globpath(&rtp)
-<
-                                                       *has()*
-has({feature} [, {check}])
-               When {check} is omitted or is zero: The result is a Number,
-               which is 1 if the feature {feature} is supported, zero
-               otherwise.  The {feature} argument is a string, case is
-               ignored.  See |feature-list| below.
-
-               When {check} is present and not zero: The result is a Number,
-               which is 1 if the feature {feature} could ever be supported,
-               zero otherwise.  This is useful to check for a typo in
-               {feature} and to detect dead code.  Keep in mind that an older
-               Vim version will not know about a feature added later and
-               features that have been abandoned will not be known by the
-               current Vim version.
-
-               Also see |exists()| and |exists_compiled()|.
-
-               Note that to skip code that has a syntax error when the
-               feature is not available, Vim may skip the rest of the line
-               and miss a following `endif`.  Therefore put the `endif` on a
-               separate line: >
-                       if has('feature')
-                         let x = this->breaks->without->the->feature
-                       endif
-<              If the `endif` would be moved to the second line as "| endif" it
-               would not be found.
-
-
-has_key({dict}, {key})                                 *has_key()*
-               The result is a Number, which is TRUE if |Dictionary| {dict}
-               has an entry with key {key}.  FALSE otherwise. The {key}
-               argument is a string.
-
-               Can also be used as a |method|: >
-                       mydict->has_key(key)
-
-haslocaldir([{winnr} [, {tabnr}]])                     *haslocaldir()*
-               The result is a Number:
-                   1   when the window has set a local directory via |:lcd|
-                   2   when the tab-page has set a local directory via |:tcd|
-                   0   otherwise.
-
-               Without arguments use the current window.
-               With {winnr} use this window in the current tab page.
-               With {winnr} and {tabnr} use the window in the specified tab
-               page.
-               {winnr} can be the window number or the |window-ID|.
-               If {winnr} is -1 it is ignored and only the tabpage is used.
-               Return 0 if the arguments are invalid.
-               Examples: >
-                       if haslocaldir() == 1
-                         " window local directory case
-                       elseif haslocaldir() == 2
-                         " tab-local directory case
-                       else
-                         " global directory case
-                       endif
-
-                       " current window
-                       :echo haslocaldir()
-                       :echo haslocaldir(0)
-                       :echo haslocaldir(0, 0)
-                       " window n in current tab page
-                       :echo haslocaldir(n)
-                       :echo haslocaldir(n, 0)
-                       " window n in tab page m
-                       :echo haslocaldir(n, m)
-                       " tab page m
-                       :echo haslocaldir(-1, m)
-<
-               Can also be used as a |method|: >
-                       GetWinnr()->haslocaldir()
-
-hasmapto({what} [, {mode} [, {abbr}]])                 *hasmapto()*
-               The result is a Number, which is TRUE if there is a mapping
-               that contains {what} in somewhere in the rhs (what it is
-               mapped to) and this mapping exists in one of the modes
-               indicated by {mode}.
-               The arguments {what} and {mode} are strings.
-               When {abbr} is there and it is |TRUE| use abbreviations
-               instead of mappings.  Don't forget to specify Insert and/or
-               Command-line mode.
-               Both the global mappings and the mappings local to the current
-               buffer are checked for a match.
-               If no matching mapping is found FALSE is returned.
-               The following characters are recognized in {mode}:
-                       n       Normal mode
-                       v       Visual and Select mode
-                       x       Visual mode
-                       s       Select mode
-                       o       Operator-pending mode
-                       i       Insert mode
-                       l       Language-Argument ("r", "f", "t", etc.)
-                       c       Command-line mode
-               When {mode} is omitted, "nvo" is used.
-
-               This function is useful to check if a mapping already exists
-               to a function in a Vim script.  Example: >
-                       :if !hasmapto('\ABCdoit')
-                       :   map <Leader>d \ABCdoit
-                       :endif
-<              This installs the mapping to "\ABCdoit" only if there isn't
-               already a mapping to "\ABCdoit".
-
-               Can also be used as a |method|: >
-                       GetRHS()->hasmapto()
-
-histadd({history}, {item})                             *histadd()*
-               Add the String {item} to the history {history} which can be
-               one of:                                 *hist-names*
-                       "cmd"    or ":"   command line history
-                       "search" or "/"   search pattern history
-                       "expr"   or "="   typed expression history
-                       "input"  or "@"   input line history
-                       "debug"  or ">"   debug command history
-                       empty             the current or last used history
-               The {history} string does not need to be the whole name, one
-               character is sufficient.
-               If {item} does already exist in the history, it will be
-               shifted to become the newest entry.
-               The result is a Number: TRUE if the operation was successful,
-               otherwise FALSE is returned.
-
-               Example: >
-                       :call histadd("input", strftime("%Y %b %d"))
-                       :let date=input("Enter date: ")
-<              This function is not available in the |sandbox|.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetHistory()->histadd('search')
-
-histdel({history} [, {item}])                          *histdel()*
-               Clear {history}, i.e. delete all its entries.  See |hist-names|
-               for the possible values of {history}.
-
-               If the parameter {item} evaluates to a String, it is used as a
-               regular expression.  All entries matching that expression will
-               be removed from the history (if there are any).
-               Upper/lowercase must match, unless "\c" is used |/\c|.
-               If {item} evaluates to a Number, it will be interpreted as
-               an index, see |:history-indexing|.  The respective entry will
-               be removed if it exists.
-
-               The result is TRUE for a successful operation, otherwise FALSE
-               is returned.
-
-               Examples:
-               Clear expression register history: >
-                       :call histdel("expr")
-<
-               Remove all entries starting with "*" from the search history: >
-                       :call histdel("/", '^\*')
-<
-               The following three are equivalent: >
-                       :call histdel("search", histnr("search"))
-                       :call histdel("search", -1)
-                       :call histdel("search", '^'.histget("search", -1).'$')
-<
-               To delete the last search pattern and use the last-but-one for
-               the "n" command and 'hlsearch': >
-                       :call histdel("search", -1)
-                       :let @/ = histget("search", -1)
-<
-               Can also be used as a |method|: >
-                       GetHistory()->histdel()
-
-histget({history} [, {index}])                         *histget()*
-               The result is a String, the entry with Number {index} from
-               {history}.  See |hist-names| for the possible values of
-               {history}, and |:history-indexing| for {index}.  If there is
-               no such entry, an empty String is returned.  When {index} is
-               omitted, the most recent item from the history is used.
-
-               Examples:
-               Redo the second last search from history. >
-                       :execute '/' . histget("search", -2)
-
-<              Define an Ex command ":H {num}" that supports re-execution of
-               the {num}th entry from the output of |:history|. >
-                       :command -nargs=1 H execute histget("cmd", 0+<args>)
-<
-               Can also be used as a |method|: >
-                       GetHistory()->histget()
-
-histnr({history})                                      *histnr()*
-               The result is the Number of the current entry in {history}.
-               See |hist-names| for the possible values of {history}.
-               If an error occurred, -1 is returned.
-
-               Example: >
-                       :let inp_index = histnr("expr")
-
-<              Can also be used as a |method|: >
-                       GetHistory()->histnr()
-<
-hlexists({name})                                       *hlexists()*
-               The result is a Number, which is TRUE if a highlight group
-               called {name} exists.  This is when the group has been
-               defined in some way.  Not necessarily when highlighting has
-               been defined for it, it may also have been used for a syntax
-               item.
-                                                       *highlight_exists()*
-               Obsolete name: highlight_exists().
-
-               Can also be used as a |method|: >
-                       GetName()->hlexists()
-<
-hlget([{name} [, {resolve}]])                          *hlget()*
-               Returns a List of all the highlight group attributes.  If the
-               optional {name} is specified, then returns a List with only
-               the attributes of the specified highlight group.  Returns an
-               empty List if the highlight group {name} is not present.
-
-               If the optional {resolve} argument is set to v:true and the
-               highlight group {name} is linked to another group, then the
-               link is resolved recursively and the attributes of the
-               resolved highlight group are returned.
-
-               Each entry in the returned List is a Dictionary with the
-               following items:
-                       cleared boolean flag, set to v:true if the highlight
-                               group attributes are cleared or not yet
-                               specified.  See |highlight-clear|.
-                       cterm   cterm attributes. See |highlight-cterm|.
-                       ctermbg cterm background color.
-                               See |highlight-ctermbg|.
-                       ctermfg cterm foreground color.
-                               See |highlight-ctermfg|.
-                       ctermul cterm underline color.  See |highlight-ctermul|.
-                       default boolean flag, set to v:true if the highlight
-                               group link is a default link. See
-                               |highlight-default|.
-                       font    highlight group font.  See |highlight-font|.
-                       gui     gui attributes. See |highlight-gui|.
-                       guibg   gui background color.  See |highlight-guibg|.
-                       guifg   gui foreground color.  See |highlight-guifg|.
-                       guisp   gui special color.  See |highlight-guisp|.
-                       id      highlight group ID.
-                       linksto linked highlight group name.
-                               See |:highlight-link|.
-                       name    highlight group name. See |group-name|.
-                       start   start terminal keycode.  See |highlight-start|.
-                       stop    stop terminal keycode.  See |highlight-stop|.
-                       term    term attributes.  See |highlight-term|.
-
-               The 'term', 'cterm' and 'gui' items in the above Dictionary
-               have a dictionary value with the following optional boolean
-               items: 'bold', 'standout', 'underline', 'undercurl', 'italic',
-               'reverse', 'inverse' and 'strikethrough'.
-
-               Example(s): >
-                       :echo hlget()
-                       :echo hlget('ModeMsg')
-                       :echo hlget('Number', v:true)
-<
-               Can also be used as a |method|: >
-                       GetName()->hlget()
-<
-hlset({list})                                          *hlset()*
-               Creates or modifies the attributes of a List of highlight
-               groups.  Each item in {list} is a dictionary containing the
-               attributes of a highlight group. See |hlget()| for the list of
-               supported items in this dictionary.
-
-               In addition to the items described in |hlget()|, the following
-               additional items are supported in the dictionary:
-
-                       force           boolean flag to force the creation of
-                                       a link for an existing highlight group
-                                       with attributes.
-
-               The highlight group is identified using the 'name' item and
-               the 'id' item (if supplied) is ignored.  If a highlight group
-               with a specified name doesn't exist, then it is created.
-               Otherwise the attributes of an existing highlight group are
-               modified.
-
-               If an empty dictionary value is used for the 'term' or 'cterm'
-               or 'gui' entries, then the corresponding attributes are
-               cleared.  If the 'cleared' item is set to v:true, then all the
-               attributes of the highlight group are cleared.
-
-               The 'linksto' item can be used to link a highlight group to
-               another highlight group.  See |:highlight-link|.
-
-               Returns zero for success, -1 for failure.
-
-               Example(s): >
-                       " add bold attribute to the Visual highlight group
-                       :call hlset([#{name: 'Visual',
-                                       \ term: #{reverse: 1 , bold: 1}}])
-                       :call hlset([#{name: 'Type', guifg: 'DarkGreen'}])
-                       :let l = hlget()
-                       :call hlset(l)
-                       " clear the Search highlight group
-                       :call hlset([#{name: 'Search', cleared: v:true}])
-                       " clear the 'term' attributes for a highlight group
-                       :call hlset([#{name: 'Title', term: {}}])
-                       " create the MyHlg group linking it to DiffAdd
-                       :call hlset([#{name: 'MyHlg', linksto: 'DiffAdd'}])
-                       " remove the MyHlg group link
-                       :call hlset([#{name: 'MyHlg', linksto: 'NONE'}])
-                       " clear the attributes and a link
-                       :call hlset([#{name: 'MyHlg', cleared: v:true,
-                                       \ linksto: 'NONE'}])
-<
-               Can also be used as a |method|: >
-                       GetAttrList()->hlset()
-<
-                                                       *hlID()*
-hlID({name})   The result is a Number, which is the ID of the highlight group
-               with name {name}.  When the highlight group doesn't exist,
-               zero is returned.
-               This can be used to retrieve information about the highlight
-               group.  For example, to get the background color of the
-               "Comment" group: >
-       :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
-<                                                      *highlightID()*
-               Obsolete name: highlightID().
-
-               Can also be used as a |method|: >
-                       GetName()->hlID()
-
-hostname()                                             *hostname()*
-               The result is a String, which is the name of the machine on
-               which Vim is currently running.  Machine names greater than
-               256 characters long are truncated.
-
-iconv({string}, {from}, {to})                          *iconv()*
-               The result is a String, which is the text {string} converted
-               from encoding {from} to encoding {to}.
-               When the conversion completely fails an empty string is
-               returned.  When some characters could not be converted they
-               are replaced with "?".
-               The encoding names are whatever the iconv() library function
-               can accept, see ":!man 3 iconv".
-               Most conversions require Vim to be compiled with the |+iconv|
-               feature.  Otherwise only UTF-8 to latin1 conversion and back
-               can be done.
-               This can be used to display messages with special characters,
-               no matter what 'encoding' is set to.  Write the message in
-               UTF-8 and use: >
-                       echo iconv(utf8_str, "utf-8", &enc)
-<              Note that Vim uses UTF-8 for all Unicode encodings, conversion
-               from/to UCS-2 is automatically changed to use UTF-8.  You
-               cannot use UCS-2 in a string anyway, because of the NUL bytes.
-
-               Can also be used as a |method|: >
-                       GetText()->iconv('latin1', 'utf-8')
-<
-                                                       *indent()*
-indent({lnum}) The result is a Number, which is indent of line {lnum} in the
-               current buffer.  The indent is counted in spaces, the value
-               of 'tabstop' is relevant.  {lnum} is used just like in
-               |getline()|.
-               When {lnum} is invalid -1 is returned.
-
-               Can also be used as a |method|: >
-                       GetLnum()->indent()
-
-index({object}, {expr} [, {start} [, {ic}]])                   *index()*
-               If {object} is a |List| return the lowest index where the item
-               has a value equal to {expr}.  There is no automatic
-               conversion, so the String "4" is different from the Number 4.
-               And the number 4 is different from the Float 4.0.  The value
-               of 'ignorecase' is not used here, case always matters.
-
-               If {object} is |Blob| return the lowest index where the byte
-               value is equal to {expr}.
-
-               If {start} is given then start looking at the item with index
-               {start} (may be negative for an item relative to the end).
-               When {ic} is given and it is |TRUE|, ignore case.  Otherwise
-               case must match.
-               -1 is returned when {expr} is not found in {object}.
-               Example: >
-                       :let idx = index(words, "the")
-                       :if index(numbers, 123) >= 0
-
-<              Can also be used as a |method|: >
-                       GetObject()->index(what)
-
-input({prompt} [, {text} [, {completion}]])            *input()*
-               The result is a String, which is whatever the user typed on
-               the command-line.  The {prompt} argument is either a prompt
-               string, or a blank string (for no prompt).  A '\n' can be used
-               in the prompt to start a new line.
-               The highlighting set with |:echohl| is used for the prompt.
-               The input is entered just like a command-line, with the same
-               editing commands and mappings.  There is a separate history
-               for lines typed for input().
-               Example: >
-                       :if input("Coffee or beer? ") == "beer"
-                       :  echo "Cheers!"
-                       :endif
-<
-               If the optional {text} argument is present and not empty, this
-               is used for the default reply, as if the user typed this.
-               Example: >
-                       :let color = input("Color? ", "white")
-
-<              The optional {completion} argument specifies the type of
-               completion supported for the input.  Without it completion is
-               not performed.  The supported completion types are the same as
-               that can be supplied to a user-defined command using the
-               "-complete=" argument.  Refer to |:command-completion| for
-               more information.  Example: >
-                       let fname = input("File: ", "", "file")
-<
-               NOTE: This function must not be used in a startup file, for
-               the versions that only run in GUI mode (e.g., the Win32 GUI).
-               Note: When input() is called from within a mapping it will
-               consume remaining characters from that mapping, because a
-               mapping is handled like the characters were typed.
-               Use |inputsave()| before input() and |inputrestore()|
-               after input() to avoid that.  Another solution is to avoid
-               that further characters follow in the mapping, e.g., by using
-               |:execute| or |:normal|.
-
-               Example with a mapping: >
-                       :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
-                       :function GetFoo()
-                       :  call inputsave()
-                       :  let g:Foo = input("enter search pattern: ")
-                       :  call inputrestore()
-                       :endfunction
-
-<              Can also be used as a |method|: >
-                       GetPrompt()->input()
-
-inputdialog({prompt} [, {text} [, {cancelreturn}]])            *inputdialog()*
-               Like |input()|, but when the GUI is running and text dialogs
-               are supported, a dialog window pops up to input the text.
-               Example: >
-                  :let n = inputdialog("value for shiftwidth", shiftwidth())
-                  :if n != ""
-                  :  let &sw = n
-                  :endif
-<              When the dialog is cancelled {cancelreturn} is returned.  When
-               omitted an empty string is returned.
-               Hitting <Enter> works like pressing the OK button.  Hitting
-               <Esc> works like pressing the Cancel button.
-               NOTE: Command-line completion is not supported.
-
-               Can also be used as a |method|: >
-                       GetPrompt()->inputdialog()
-
-inputlist({textlist})                                  *inputlist()*
-               {textlist} must be a |List| of strings.  This |List| is
-               displayed, one string per line.  The user will be prompted to
-               enter a number, which is returned.
-               The user can also select an item by clicking on it with the
-               mouse, if the mouse is enabled in the command line ('mouse' is
-               "a" or includes "c").  For the first string 0 is returned.
-               When clicking above the first item a negative number is
-               returned.  When clicking on the prompt one more than the
-               length of {textlist} is returned.
-               Make sure {textlist} has less than 'lines' entries, otherwise
-               it won't work.  It's a good idea to put the entry number at
-               the start of the string.  And put a prompt in the first item.
-               Example: >
-                       let color = inputlist(['Select color:', '1. red',
-                               \ '2. green', '3. blue'])
-
-<              Can also be used as a |method|: >
-                       GetChoices()->inputlist()
-
-inputrestore()                                         *inputrestore()*
-               Restore typeahead that was saved with a previous |inputsave()|.
-               Should be called the same number of times inputsave() is
-               called.  Calling it more often is harmless though.
-               Returns TRUE when there is nothing to restore, FALSE otherwise.
-
-inputsave()                                            *inputsave()*
-               Preserve typeahead (also from mappings) and clear it, so that
-               a following prompt gets input from the user.  Should be
-               followed by a matching inputrestore() after the prompt.  Can
-               be used several times, in which case there must be just as
-               many inputrestore() calls.
-               Returns TRUE when out of memory, FALSE otherwise.
-
-inputsecret({prompt} [, {text}])                       *inputsecret()*
-               This function acts much like the |input()| function with but
-               two exceptions:
-               a) the user's response will be displayed as a sequence of
-               asterisks ("*") thereby keeping the entry secret, and
-               b) the user's response will not be recorded on the input
-               |history| stack.
-               The result is a String, which is whatever the user actually
-               typed on the command-line in response to the issued prompt.
-               NOTE: Command-line completion is not supported.
-
-               Can also be used as a |method|: >
-                       GetPrompt()->inputsecret()
-
-insert({object}, {item} [, {idx}])                     *insert()*
-               When {object} is a |List| or a |Blob| insert {item} at the start
-               of it.
-
-               If {idx} is specified insert {item} before the item with index
-               {idx}.  If {idx} is zero it goes before the first item, just
-               like omitting {idx}.  A negative {idx} is also possible, see
-               |list-index|.  -1 inserts just before the last item.
-
-               Returns the resulting |List| or |Blob|.  Examples: >
-                       :let mylist = insert([2, 3, 5], 1)
-                       :call insert(mylist, 4, -1)
-                       :call insert(mylist, 6, len(mylist))
-<              The last example can be done simpler with |add()|.
-               Note that when {item} is a |List| it is inserted as a single
-               item.  Use |extend()| to concatenate |Lists|.
-
-               Can also be used as a |method|: >
-                       mylist->insert(item)
-
-interrupt()                                            *interrupt()*
-               Interrupt script execution.  It works more or less like the
-               user typing CTRL-C, most commands won't execute and control
-               returns to the user.  This is useful to abort execution
-               from lower down, e.g. in an autocommand.  Example: >
-               :function s:check_typoname(file)
-               :   if fnamemodify(a:file, ':t') == '['
-               :       echomsg 'Maybe typo'
-               :       call interrupt()
-               :   endif
-               :endfunction
-               :au BufWritePre * call s:check_typoname(expand('<amatch>'))
-
-invert({expr})                                         *invert()*
-               Bitwise invert.  The argument is converted to a number.  A
-               List, Dict or Float argument causes an error.  Example: >
-                       :let bits = invert(bits)
-<              Can also be used as a |method|: >
-                       :let bits = bits->invert()
-
-isdirectory({directory})                               *isdirectory()*
-               The result is a Number, which is |TRUE| when a directory
-               with the name {directory} exists.  If {directory} doesn't
-               exist, or isn't a directory, the result is |FALSE|.  {directory}
-               is any expression, which is used as a String.
-
-               Can also be used as a |method|: >
-                       GetName()->isdirectory()
-
-isinf({expr})                                          *isinf()*
-               Return 1 if {expr} is a positive infinity, or -1 a negative
-               infinity, otherwise 0. >
-                       :echo isinf(1.0 / 0.0)
-<                      1 >
-                       :echo isinf(-1.0 / 0.0)
-<                      -1
-
-               Can also be used as a |method|: >
-                       Compute()->isinf()
-<
-               {only available when compiled with the |+float| feature}
-
-islocked({expr})                                       *islocked()* *E786*
-               The result is a Number, which is |TRUE| when {expr} is the
-               name of a locked variable.
-               The string argument {expr} must be the name of a variable,
-               |List| item or |Dictionary| entry, not the variable itself!
-               Example: >
-                       :let alist = [0, ['a', 'b'], 2, 3]
-                       :lockvar 1 alist
-                       :echo islocked('alist')         " 1
-                       :echo islocked('alist[1]')      " 0
-
-<              When {expr} is a variable that does not exist you get an error
-               message.  Use |exists()| to check for existence.
-               In Vim9 script it does not work for local variables.
-
-               Can also be used as a |method|: >
-                       GetName()->islocked()
-
-isnan({expr})                                          *isnan()*
-               Return |TRUE| if {expr} is a float with value NaN. >
-                       echo isnan(0.0 / 0.0)
-<                      1
-
-               Can also be used as a |method|: >
-                       Compute()->isnan()
-<
-               {only available when compiled with the |+float| feature}
-
-items({dict})                                          *items()*
-               Return a |List| with all the key-value pairs of {dict}.  Each
-               |List| item is a list with two items: the key of a {dict}
-               entry and the value of this entry.  The |List| is in arbitrary
-               order.  Also see |keys()| and |values()|.
-               Example: >
-                       for [key, value] in items(mydict)
-                          echo key . ': ' . value
-                       endfor
-
-<              Can also be used as a |method|: >
-                       mydict->items()
-
-job_ functions are documented here: |job-functions-details|
-
-
-join({list} [, {sep}])                                 *join()*
-               Join the items in {list} together into one String.
-               When {sep} is specified it is put in between the items.  If
-               {sep} is omitted a single space is used.
-               Note that {sep} is not added at the end.  You might want to
-               add it there too: >
-                       let lines = join(mylist, "\n") . "\n"
-<              String items are used as-is.  |Lists| and |Dictionaries| are
-               converted into a string like with |string()|.
-               The opposite function is |split()|.
-
-               Can also be used as a |method|: >
-                       mylist->join()
-
-js_decode({string})                                    *js_decode()*
-               This is similar to |json_decode()| with these differences:
-               - Object key names do not have to be in quotes.
-               - Strings can be in single quotes.
-               - Empty items in an array (between two commas) are allowed and
-                 result in v:none items.
-
-               Can also be used as a |method|: >
-                       ReadObject()->js_decode()
-
-js_encode({expr})                                      *js_encode()*
-               This is similar to |json_encode()| with these differences:
-               - Object key names are not in quotes.
-               - v:none items in an array result in an empty item between
-                 commas.
-               For example, the Vim object:
-                       [1,v:none,{"one":1},v:none] ~
-               Will be encoded as:
-                       [1,,{one:1},,] ~
-               While json_encode() would produce:
-                       [1,null,{"one":1},null] ~
-               This encoding is valid for JavaScript. It is more efficient
-               than JSON, especially when using an array with optional items.
-
-               Can also be used as a |method|: >
-                       GetObject()->js_encode()
-
-json_decode({string})                                  *json_decode()*
-               This parses a JSON formatted string and returns the equivalent
-               in Vim values.  See |json_encode()| for the relation between
-               JSON and Vim values.
-               The decoding is permissive:
-               - A trailing comma in an array and object is ignored, e.g.
-                 "[1, 2, ]" is the same as "[1, 2]".
-               - Integer keys are accepted in objects, e.g. {1:2} is the
-                 same as {"1":2}.
-               - More floating point numbers are recognized, e.g. "1." for
-                 "1.0", or "001.2" for "1.2". Special floating point values
-                 "Infinity", "-Infinity" and "NaN" (capitalization ignored)
-                 are accepted.
-               - Leading zeroes in integer numbers are ignored, e.g. "012"
-                 for "12" or "-012" for "-12".
-               - Capitalization is ignored in literal names null, true or
-                 false, e.g. "NULL" for "null", "True" for "true".
-               - Control characters U+0000 through U+001F which are not
-                 escaped in strings are accepted, e.g. "       " (tab
-                 character in string) for "\t".
-               - An empty JSON expression or made of only spaces is accepted
-                 and results in v:none.
-               - Backslash in an invalid 2-character sequence escape is
-                 ignored, e.g. "\a" is decoded as "a".
-               - A correct surrogate pair in JSON strings should normally be
-                 a 12 character sequence such as "\uD834\uDD1E", but
-                 json_decode() silently accepts truncated surrogate pairs
-                 such as "\uD834" or "\uD834\u"
-                                                               *E938*
-               A duplicate key in an object, valid in rfc7159, is not
-               accepted by json_decode() as the result must be a valid Vim
-               type, e.g. this fails: {"a":"b", "a":"c"}
-
-               Can also be used as a |method|: >
-                       ReadObject()->json_decode()
-
-json_encode({expr})                                    *json_encode()*
-               Encode {expr} as JSON and return this as a string.
-               The encoding is specified in:
-               https://tools.ietf.org/html/rfc7159.html
-               Vim values are converted as follows:
-                  |Number|             decimal number
-                  |Float|              floating point number
-                  Float nan            "NaN"
-                  Float inf            "Infinity"
-                  Float -inf           "-Infinity"
-                  |String|             in double quotes (possibly null)
-                  |Funcref|            not possible, error
-                  |List|               as an array (possibly null); when
-                                       used recursively: []
-                  |Dict|               as an object (possibly null); when
-                                       used recursively: {}
-                  |Blob|               as an array of the individual bytes
-                  v:false              "false"
-                  v:true               "true"
-                  v:none               "null"
-                  v:null               "null"
-               Note that NaN and Infinity are passed on as values.  This is
-               missing in the JSON standard, but several implementations do
-               allow it.  If not then you will get an error.
-
-               Can also be used as a |method|: >
-                       GetObject()->json_encode()
-
-keys({dict})                                           *keys()*
-               Return a |List| with all the keys of {dict}.  The |List| is in
-               arbitrary order.  Also see |items()| and |values()|.
-
-               Can also be used as a |method|: >
-                       mydict->keys()
-
-<                                                      *len()* *E701*
-len({expr})    The result is a Number, which is the length of the argument.
-               When {expr} is a String or a Number the length in bytes is
-               used, as with |strlen()|.
-               When {expr} is a |List| the number of items in the |List| is
-               returned.
-               When {expr} is a |Blob| the number of bytes is returned.
-               When {expr} is a |Dictionary| the number of entries in the
-               |Dictionary| is returned.
-               Otherwise an error is given.
-
-               Can also be used as a |method|: >
-                       mylist->len()
-
-<                                              *libcall()* *E364* *E368*
-libcall({libname}, {funcname}, {argument})
-               Call function {funcname} in the run-time library {libname}
-               with single argument {argument}.
-               This is useful to call functions in a library that you
-               especially made to be used with Vim.  Since only one argument
-               is possible, calling standard library functions is rather
-               limited.
-               The result is the String returned by the function.  If the
-               function returns NULL, this will appear as an empty string ""
-               to Vim.
-               If the function returns a number, use libcallnr()!
-               If {argument} is a number, it is passed to the function as an
-               int; if {argument} is a string, it is passed as a
-               null-terminated string.
-               This function will fail in |restricted-mode|.
-
-               libcall() allows you to write your own 'plug-in' extensions to
-               Vim without having to recompile the program.  It is NOT a
-               means to call system functions!  If you try to do so Vim will
-               very probably crash.
-
-               For Win32, the functions you write must be placed in a DLL
-               and use the normal C calling convention (NOT Pascal which is
-               used in Windows System DLLs).  The function must take exactly
-               one parameter, either a character pointer or a long integer,
-               and must return a character pointer or NULL.  The character
-               pointer returned must point to memory that will remain valid
-               after the function has returned (e.g. in static data in the
-               DLL).  If it points to allocated memory, that memory will
-               leak away.  Using a static buffer in the function should work,
-               it's then freed when the DLL is unloaded.
-
-               WARNING: If the function returns a non-valid pointer, Vim may
-               crash!  This also happens if the function returns a number,
-               because Vim thinks it's a pointer.
-               For Win32 systems, {libname} should be the filename of the DLL
-               without the ".DLL" suffix.  A full path is only required if
-               the DLL is not in the usual places.
-               For Unix: When compiling your own plugins, remember that the
-               object code must be compiled as position-independent ('PIC').
-               {only in Win32 and some Unix versions, when the |+libcall|
-               feature is present}
-               Examples: >
-                       :echo libcall("libc.so", "getenv", "HOME")
-
-<              Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetValue()->libcall("libc.so", "getenv")
-<
-                                                       *libcallnr()*
-libcallnr({libname}, {funcname}, {argument})
-               Just like |libcall()|, but used for a function that returns an
-               int instead of a string.
-               {only in Win32 on some Unix versions, when the |+libcall|
-               feature is present}
-               Examples: >
-                       :echo libcallnr("/usr/lib/libc.so", "getpid", "")
-                       :call libcallnr("libc.so", "printf", "Hello World!\n")
-                       :call libcallnr("libc.so", "sleep", 10)
-<
-               Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetValue()->libcallnr("libc.so", "printf")
-<
-
-line({expr} [, {winid}])                               *line()*
-               The result is a Number, which is the line number of the file
-               position given with {expr}.  The {expr} argument is a string.
-               The accepted positions are:
-                   .       the cursor position
-                   $       the last line in the current buffer
-                   'x      position of mark x (if the mark is not set, 0 is
-                           returned)
-                   w0      first line visible in current window (one if the
-                           display isn't updated, e.g. in silent Ex mode)
-                   w$      last line visible in current window (this is one
-                           less than "w0" if no lines are visible)
-                   v       In Visual mode: the start of the Visual area (the
-                           cursor is the end).  When not in Visual mode
-                           returns the cursor position.  Differs from |'<| in
-                           that it's updated right away.
-               Note that a mark in another file can be used.  The line number
-               then applies to another buffer.
-               To get the column number use |col()|.  To get both use
-               |getpos()|.
-               With the optional {winid} argument the values are obtained for
-               that window instead of the current window.
-               Examples: >
-                       line(".")               line number of the cursor
-                       line(".", winid)        idem, in window "winid"
-                       line("'t")              line number of mark t
-                       line("'" . marker)      line number of mark marker
-<
-               To jump to the last known position when opening a file see
-               |last-position-jump|.
-
-               Can also be used as a |method|: >
-                       GetValue()->line()
-
-line2byte({lnum})                                      *line2byte()*
-               Return the byte count from the start of the buffer for line
-               {lnum}.  This includes the end-of-line character, depending on
-               the 'fileformat' option for the current buffer.  The first
-               line returns 1. 'encoding' matters, 'fileencoding' is ignored.
-               This can also be used to get the byte count for the line just
-               below the last line: >
-                       line2byte(line("$") + 1)
-<              This is the buffer size plus one.  If 'fileencoding' is empty
-               it is the file size plus one.  {lnum} is used like with
-               |getline()|.  When {lnum} is invalid, or the |+byte_offset|
-               feature has been disabled at compile time, -1 is returned.
-               Also see |byte2line()|, |go| and |:goto|.
-
-               Can also be used as a |method|: >
-                       GetLnum()->line2byte()
-
-lispindent({lnum})                                     *lispindent()*
-               Get the amount of indent for line {lnum} according the lisp
-               indenting rules, as with 'lisp'.
-               The indent is counted in spaces, the value of 'tabstop' is
-               relevant.  {lnum} is used just like in |getline()|.
-               When {lnum} is invalid or Vim was not compiled the
-               |+lispindent| feature, -1 is returned.
-
-               Can also be used as a |method|: >
-                       GetLnum()->lispindent()
-
-list2blob({list})                                      *list2blob()*
-               Return a Blob concatenating all the number values in {list}.
-               Examples: >
-                       list2blob([1, 2, 3, 4]) returns 0z01020304
-                       list2blob([])           returns 0z
-<              Returns an empty Blob on error.  If one of the numbers is
-               negative or more than 255 error *E1239* is given.
-
-               |blob2list()| does the opposite.
-
-               Can also be used as a |method|: >
-                       GetList()->list2blob()
-
-list2str({list} [, {utf8}])                            *list2str()*
-               Convert each number in {list} to a character string can
-               concatenate them all.  Examples: >
-                       list2str([32])          returns " "
-                       list2str([65, 66, 67])  returns "ABC"
-<              The same can be done (slowly) with: >
-                       join(map(list, {nr, val -> nr2char(val)}), '')
-<              |str2list()| does the opposite.
-
-               When {utf8} is omitted or zero, the current 'encoding' is used.
-               When {utf8} is TRUE, always return UTF-8 characters.
-               With UTF-8 composing characters work as expected: >
-                       list2str([97, 769])     returns "á"
-<
-               Can also be used as a |method|: >
-                       GetList()->list2str()
-
-listener_add({callback} [, {buf}])                     *listener_add()*
-               Add a callback function that will be invoked when changes have
-               been made to buffer {buf}.
-               {buf} refers to a buffer name or number. For the accepted
-               values, see |bufname()|.  When {buf} is omitted the current
-               buffer is used.
-               Returns a unique ID that can be passed to |listener_remove()|.
-
-               The {callback} is invoked with five arguments:
-                   a:bufnr     the buffer that was changed
-                   a:start     first changed line number
-                   a:end       first line number below the change
-                   a:added     number of lines added, negative if lines were
-                               deleted
-                   a:changes   a List of items with details about the changes
-
-               Example: >
-           func Listener(bufnr, start, end, added, changes)
-             echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed'
-           endfunc
-           call listener_add('Listener', bufnr)
-
-<              The List cannot be changed.  Each item in a:changes is a
-               dictionary with these entries:
-                   lnum        the first line number of the change
-                   end         the first line below the change
-                   added       number of lines added; negative if lines were
-                               deleted
-                   col         first column in "lnum" that was affected by
-                               the change; one if unknown or the whole line
-                               was affected; this is a byte index, first
-                               character has a value of one.
-               When lines are inserted the values are:
-                   lnum        line above which the new line is added
-                   end         equal to "lnum"
-                   added       number of lines inserted
-                   col         1
-               When lines are deleted the values are:
-                   lnum        the first deleted line
-                   end         the line below the first deleted line, before
-                               the deletion was done
-                   added       negative, number of lines deleted
-                   col         1
-               When lines are changed:
-                   lnum        the first changed line
-                   end         the line below the last changed line
-                   added       0
-                   col         first column with a change or 1
-
-               The entries are in the order the changes were made, thus the
-               most recent change is at the end.  The line numbers are valid
-               when the callback is invoked, but later changes may make them
-               invalid, thus keeping a copy for later might not work.
-
-               The {callback} is invoked just before the screen is updated,
-               when |listener_flush()| is called or when a change is being
-               made that changes the line count in a way it causes a line
-               number in the list of changes to become invalid.
-
-               The {callback} is invoked with the text locked, see
-               |textlock|.  If you do need to make changes to the buffer, use
-               a timer to do this later |timer_start()|.
-
-               The {callback} is not invoked when the buffer is first loaded.
-               Use the |BufReadPost| autocmd event to handle the initial text
-               of a buffer.
-               The {callback} is also not invoked when the buffer is
-               unloaded, use the |BufUnload| autocmd event for that.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetBuffer()->listener_add(callback)
-
-listener_flush([{buf}])                                        *listener_flush()*
-               Invoke listener callbacks for buffer {buf}.  If there are no
-               pending changes then no callbacks are invoked.
-
-               {buf} refers to a buffer name or number. For the accepted
-               values, see |bufname()|.  When {buf} is omitted the current
-               buffer is used.
-
-               Can also be used as a |method|: >
-                       GetBuffer()->listener_flush()
-
-listener_remove({id})                                  *listener_remove()*
-               Remove a listener previously added with listener_add().
-               Returns FALSE when {id} could not be found, TRUE when {id} was
-               removed.
-
-               Can also be used as a |method|: >
-                       GetListenerId()->listener_remove()
-
-localtime()                                            *localtime()*
-               Return the current time, measured as seconds since 1st Jan
-               1970.  See also |strftime()|, |strptime()| and |getftime()|.
-
-
-log({expr})                                            *log()*
-               Return the natural logarithm (base e) of {expr} as a |Float|.
-               {expr} must evaluate to a |Float| or a |Number| in the range
-               (0, inf].
-               Examples: >
-                       :echo log(10)
-<                      2.302585 >
-                       :echo log(exp(5))
-<                      5.0
-
-               Can also be used as a |method|: >
-                       Compute()->log()
-<
-               {only available when compiled with the |+float| feature}
-
-
-log10({expr})                                          *log10()*
-               Return the logarithm of Float {expr} to base 10 as a |Float|.
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo log10(1000)
-<                      3.0 >
-                       :echo log10(0.01)
-<                      -2.0
-
-               Can also be used as a |method|: >
-                       Compute()->log10()
-<
-               {only available when compiled with the |+float| feature}
-
-luaeval({expr} [, {expr}])                                     *luaeval()*
-               Evaluate Lua expression {expr} and return its result converted
-               to Vim data structures. Second {expr} may hold additional
-               argument accessible as _A inside first {expr}.
-               Strings are returned as they are.
-               Boolean objects are converted to numbers.
-               Numbers are converted to |Float| values if vim was compiled
-               with |+float| and to numbers otherwise.
-               Dictionaries and lists obtained by vim.eval() are returned
-               as-is.
-               Other objects are returned as zero without any errors.
-               See |lua-luaeval| for more details.
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetExpr()->luaeval()
-
-<              {only available when compiled with the |+lua| feature}
-
-map({expr1}, {expr2})                                  *map()*
-               {expr1} must be a |List|, |String|, |Blob| or |Dictionary|.
-               When {expr1} is a |List|| or |Dictionary|, replace each
-               item in {expr1} with the result of evaluating {expr2}.
-               For a |Blob| each byte is replaced.
-               For a |String|, each character, including composing
-               characters, is replaced.
-               If the item type changes you may want to use |mapnew()| to
-               create a new List or Dictionary.  This is required when using
-               Vim9 script.
-
-               {expr2} must be a |String| or |Funcref|.
-
-               If {expr2} is a |String|, inside {expr2} |v:val| has the value
-               of the current item.  For a |Dictionary| |v:key| has the key
-               of the current item and for a |List| |v:key| has the index of
-               the current item.  For a |Blob| |v:key| has the index of the
-               current byte. For a |String| |v:key| has the index of the
-               current character.
-               Example: >
-                       :call map(mylist, '"> " . v:val . " <"')
-<              This puts "> " before and " <" after each item in "mylist".
-
-               Note that {expr2} is the result of an expression and is then
-               used as an expression again.  Often it is good to use a
-               |literal-string| to avoid having to double backslashes.  You
-               still have to double ' quotes
-
-               If {expr2} is a |Funcref| it is called with two arguments:
-                       1. The key or the index of the current item.
-                       2. the value of the current item.
-               The function must return the new value of the item. Example
-               that changes each value by "key-value": >
-                       func KeyValue(key, val)
-                         return a:key . '-' . a:val
-                       endfunc
-                       call map(myDict, function('KeyValue'))
-<              It is shorter when using a |lambda|: >
-                       call map(myDict, {key, val -> key . '-' . val})
-<              If you do not use "val" you can leave it out: >
-                       call map(myDict, {key -> 'item: ' . key})
-<              If you do not use "key" you can use a short name: >
-                       call map(myDict, {_, val -> 'item: ' . val})
-<
-               The operation is done in-place for a |List| and |Dictionary|.
-               If you want it to remain unmodified make a copy first: >
-                       :let tlist = map(copy(mylist), ' v:val . "\t"')
-
-<              Returns {expr1}, the |List| or |Dictionary| that was filtered,
-               or a new |Blob| or |String|.
-               When an error is encountered while evaluating {expr2} no
-               further items in {expr1} are processed.
-               When {expr2} is a Funcref errors inside a function are ignored,
-               unless it was defined with the "abort" flag.
-
-               Can also be used as a |method|: >
-                       mylist->map(expr2)
-
-
-maparg({name} [, {mode} [, {abbr} [, {dict}]]])                        *maparg()*
-               When {dict} is omitted or zero: Return the rhs of mapping
-               {name} in mode {mode}.  The returned String has special
-               characters translated like in the output of the ":map" command
-               listing.
-
-               When there is no mapping for {name}, an empty String is
-               returned.  When the mapping for {name} is empty, then "<Nop>"
-               is returned.
-
-               The {name} can have special key names, like in the ":map"
-               command.
-
-               {mode} can be one of these strings:
-                       "n"     Normal
-                       "v"     Visual (including Select)
-                       "o"     Operator-pending
-                       "i"     Insert
-                       "c"     Cmd-line
-                       "s"     Select
-                       "x"     Visual
-                       "l"     langmap |language-mapping|
-                       "t"     Terminal-Job
-                       ""      Normal, Visual and Operator-pending
-               When {mode} is omitted, the modes for "" are used.
-
-               When {abbr} is there and it is |TRUE| use abbreviations
-               instead of mappings.
-
-               When {dict} is there and it is |TRUE| return a dictionary
-               containing all the information of the mapping with the
-               following items:
-                 "lhs"      The {lhs} of the mapping as it would be typed
-                 "lhsraw"   The {lhs} of the mapping as raw bytes
-                 "lhsrawalt" The {lhs} of the mapping as raw bytes, alternate
-                             form, only present when it differs from "lhsraw"
-                 "rhs"      The {rhs} of the mapping as typed.
-                 "silent"   1 for a |:map-silent| mapping, else 0.
-                 "noremap"  1 if the {rhs} of the mapping is not remappable.
-                 "script"   1 if mapping was defined with <script>.
-                 "expr"     1 for an expression mapping (|:map-<expr>|).
-                 "buffer"   1 for a buffer local mapping (|:map-local|).
-                 "mode"     Modes for which the mapping is defined. In
-                            addition to the modes mentioned above, these
-                            characters will be used:
-                            " "     Normal, Visual and Operator-pending
-                            "!"     Insert and Commandline mode
-                                    (|mapmode-ic|)
-                 "sid"      The script local ID, used for <sid> mappings
-                            (|<SID>|).
-                 "lnum"     The line number in "sid", zero if unknown.
-                 "nowait"   Do not wait for other, longer mappings.
-                            (|:map-<nowait>|).
-
-               The dictionary can be used to restore a mapping with
-               |mapset()|.
-
-               The mappings local to the current buffer are checked first,
-               then the global mappings.
-               This function can be used to map a key even when it's already
-               mapped, and have it do the original mapping too.  Sketch: >
-                       exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
-
-<              Can also be used as a |method|: >
-                       GetKey()->maparg('n')
-
-mapcheck({name} [, {mode} [, {abbr}]])                 *mapcheck()*
-               Check if there is a mapping that matches with {name} in mode
-               {mode}.  See |maparg()| for {mode} and special names in
-               {name}.
-               When {abbr} is there and it is |TRUE| use abbreviations
-               instead of mappings.
-               A match happens with a mapping that starts with {name} and
-               with a mapping which is equal to the start of {name}.
-
-                       matches mapping "a"     "ab"    "abc" ~
-                  mapcheck("a")        yes     yes      yes
-                  mapcheck("abc")      yes     yes      yes
-                  mapcheck("ax")       yes     no       no
-                  mapcheck("b")        no      no       no
-
-               The difference with maparg() is that mapcheck() finds a
-               mapping that matches with {name}, while maparg() only finds a
-               mapping for {name} exactly.
-               When there is no mapping that starts with {name}, an empty
-               String is returned.  If there is one, the RHS of that mapping
-               is returned.  If there are several mappings that start with
-               {name}, the RHS of one of them is returned.  This will be
-               "<Nop>" if the RHS is empty.
-               The mappings local to the current buffer are checked first,
-               then the global mappings.
-               This function can be used to check if a mapping can be added
-               without being ambiguous.  Example: >
-       :if mapcheck("_vv") == ""
-       :   map _vv :set guifont=7x13<CR>
-       :endif
-<              This avoids adding the "_vv" mapping when there already is a
-               mapping for "_v" or for "_vvv".
-
-               Can also be used as a |method|: >
-                       GetKey()->mapcheck('n')
-
-
-mapnew({expr1}, {expr2})                                       *mapnew()*
-               Like |map()| but instead of replacing items in {expr1} a new
-               List or Dictionary is created and returned.  {expr1} remains
-               unchanged.  Items can still be changed by {expr2}, if you
-               don't want that use |deepcopy()| first.
-
-
-mapset({mode}, {abbr}, {dict})                                 *mapset()*
-               Restore a mapping from a dictionary returned by |maparg()|.
-               {mode} and {abbr} should be the same as for the call to
-               |maparg()|. *E460*
-               {mode} is used to define the mode in which the mapping is set,
-               not the "mode" entry in {dict}.
-               Example for saving and restoring a mapping: >
-                       let save_map = maparg('K', 'n', 0, 1)
-                       nnoremap K somethingelse
-                       ...
-                       call mapset('n', 0, save_map)
-<              Note that if you are going to replace a map in several modes,
-               e.g. with `:map!`, you need to save the mapping for all of
-               them, since they can differ.
-
-
-match({expr}, {pat} [, {start} [, {count}]])                   *match()*
-               When {expr} is a |List| then this returns the index of the
-               first item where {pat} matches.  Each item is used as a
-               String, |Lists| and |Dictionaries| are used as echoed.
-
-               Otherwise, {expr} is used as a String.  The result is a
-               Number, which gives the index (byte offset) in {expr} where
-               {pat} matches.
-
-               A match at the first character or |List| item returns zero.
-               If there is no match -1 is returned.
-
-               For getting submatches see |matchlist()|.
-               Example: >
-                       :echo match("testing", "ing")   " results in 4
-                       :echo match([1, 'x'], '\a')     " results in 1
-<              See |string-match| for how {pat} is used.
-                                                               *strpbrk()*
-               Vim doesn't have a strpbrk() function.  But you can do: >
-                       :let sepidx = match(line, '[.,;: \t]')
-<                                                              *strcasestr()*
-               Vim doesn't have a strcasestr() function.  But you can add
-               "\c" to the pattern to ignore case: >
-                       :let idx = match(haystack, '\cneedle')
-<
-               If {start} is given, the search starts from byte index
-               {start} in a String or item {start} in a |List|.
-               The result, however, is still the index counted from the
-               first character/item.  Example: >
-                       :echo match("testing", "ing", 2)
-<              result is again "4". >
-                       :echo match("testing", "ing", 4)
-<              result is again "4". >
-                       :echo match("testing", "t", 2)
-<              result is "3".
-               For a String, if {start} > 0 then it is like the string starts
-               {start} bytes later, thus "^" will match at {start}.  Except
-               when {count} is given, then it's like matches before the
-               {start} byte are ignored (this is a bit complicated to keep it
-               backwards compatible).
-               For a String, if {start} < 0, it will be set to 0.  For a list
-               the index is counted from the end.
-               If {start} is out of range ({start} > strlen({expr}) for a
-               String or {start} > len({expr}) for a |List|) -1 is returned.
-
-               When {count} is given use the {count}'th match.  When a match
-               is found in a String the search for the next one starts one
-               character further.  Thus this example results in 1: >
-                       echo match("testing", "..", 0, 2)
-<              In a |List| the search continues in the next item.
-               Note that when {count} is added the way {start} works changes,
-               see above.
-
-               See |pattern| for the patterns that are accepted.
-               The 'ignorecase' option is used to set the ignore-caseness of
-               the pattern.  'smartcase' is NOT used.  The matching is always
-               done like 'magic' is set and 'cpoptions' is empty.
-               Note that a match at the start is preferred, thus when the
-               pattern is using "*" (any number of matches) it tends to find
-               zero matches at the start instead of a number of matches
-               further down in the text.
-
-               Can also be used as a |method|: >
-                       GetText()->match('word')
-                       GetList()->match('word')
-<
-                               *matchadd()* *E798* *E799* *E801* *E957*
-matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
-               Defines a pattern to be highlighted in the current window (a
-               "match").  It will be highlighted with {group}.  Returns an
-               identification number (ID), which can be used to delete the
-               match using |matchdelete()|.  The ID is bound to the window.
-               Matching is case sensitive and magic, unless case sensitivity
-               or magicness are explicitly overridden in {pattern}.  The
-               'magic', 'smartcase' and 'ignorecase' options are not used.
-               The "Conceal" value is special, it causes the match to be
-               concealed.
-
-               The optional {priority} argument assigns a priority to the
-               match.  A match with a high priority will have its
-               highlighting overrule that of a match with a lower priority.
-               A priority is specified as an integer (negative numbers are no
-               exception).  If the {priority} argument is not specified, the
-               default priority is 10.  The priority of 'hlsearch' is zero,
-               hence all matches with a priority greater than zero will
-               overrule it.  Syntax highlighting (see 'syntax') is a separate
-               mechanism, and regardless of the chosen priority a match will
-               always overrule syntax highlighting.
-
-               The optional {id} argument allows the request for a specific
-               match ID.  If a specified ID is already taken, an error
-               message will appear and the match will not be added.  An ID
-               is specified as a positive integer (zero excluded).  IDs 1, 2
-               and 3 are reserved for |:match|, |:2match| and |:3match|,
-               respectively.  If the {id} argument is not specified or -1,
-               |matchadd()| automatically chooses a free ID.
-
-               The optional {dict} argument allows for further custom
-               values. Currently this is used to specify a match specific
-               conceal character that will be shown for |hl-Conceal|
-               highlighted matches. The dict can have the following members:
-
-                       conceal     Special character to show instead of the
-                                   match (only for |hl-Conceal| highlighted
-                                   matches, see |:syn-cchar|)
-                       window      Instead of the current window use the
-                                   window with this number or window ID.
-
-               The number of matches is not limited, as it is the case with
-               the |:match| commands.
-
-               Example: >
-                       :highlight MyGroup ctermbg=green guibg=green
-                       :let m = matchadd("MyGroup", "TODO")
-<              Deletion of the pattern: >
-                       :call matchdelete(m)
-
-<              A list of matches defined by |matchadd()| and |:match| are
-               available from |getmatches()|.  All matches can be deleted in
-               one operation by |clearmatches()|.
-
-               Can also be used as a |method|: >
-                       GetGroup()->matchadd('TODO')
-<
-                                                       *matchaddpos()*
-matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
-               Same as |matchadd()|, but requires a list of positions {pos}
-               instead of a pattern. This command is faster than |matchadd()|
-               because it does not require to handle regular expressions and
-               sets buffer line boundaries to redraw screen. It is supposed
-               to be used when fast match additions and deletions are
-               required, for example to highlight matching parentheses.
-
-               {pos} is a list of positions.  Each position can be one of
-               these:
-               - A number.  This whole line will be highlighted.  The first
-                 line has number 1.
-               - A list with one number, e.g., [23]. The whole line with this
-                 number will be highlighted.
-               - A list with two numbers, e.g., [23, 11]. The first number is
-                 the line number, the second one is the column number (first
-                 column is 1, the value must correspond to the byte index as
-                 |col()| would return).  The character at this position will
-                 be highlighted.
-               - A list with three numbers, e.g., [23, 11, 3]. As above, but
-                 the third number gives the length of the highlight in bytes.
-
-               The maximum number of positions in {pos} is 8.
-
-               Example: >
-                       :highlight MyGroup ctermbg=green guibg=green
-                       :let m = matchaddpos("MyGroup", [[23, 24], 34])
-<              Deletion of the pattern: >
-                       :call matchdelete(m)
-
-<              Matches added by |matchaddpos()| are returned by
-               |getmatches()|.
-
-               Can also be used as a |method|: >
-                       GetGroup()->matchaddpos([23, 11])
-
-matcharg({nr})                                                 *matcharg()*
-               Selects the {nr} match item, as set with a |:match|,
-               |:2match| or |:3match| command.
-               Return a |List| with two elements:
-                       The name of the highlight group used
-                       The pattern used.
-               When {nr} is not 1, 2 or 3 returns an empty |List|.
-               When there is no match item set returns ['', ''].
-               This is useful to save and restore a |:match|.
-               Highlighting matches using the |:match| commands are limited
-               to three matches. |matchadd()| does not have this limitation.
-
-               Can also be used as a |method|: >
-                       GetMatch()->matcharg()
-
-matchdelete({id} [, {win})                    *matchdelete()* *E802* *E803*
-               Deletes a match with ID {id} previously defined by |matchadd()|
-               or one of the |:match| commands.  Returns 0 if successful,
-               otherwise -1.  See example for |matchadd()|.  All matches can
-               be deleted in one operation by |clearmatches()|.
-               If {win} is specified, use the window with this number or
-               window ID instead of the current window.
-
-               Can also be used as a |method|: >
-                       GetMatch()->matchdelete()
-
-matchend({expr}, {pat} [, {start} [, {count}]])                        *matchend()*
-               Same as |match()|, but return the index of first character
-               after the match.  Example: >
-                       :echo matchend("testing", "ing")
-<              results in "7".
-                                                       *strspn()* *strcspn()*
-               Vim doesn't have a strspn() or strcspn() function, but you can
-               do it with matchend(): >
-                       :let span = matchend(line, '[a-zA-Z]')
-                       :let span = matchend(line, '[^a-zA-Z]')
-<              Except that -1 is returned when there are no matches.
-
-               The {start}, if given, has the same meaning as for |match()|. >
-                       :echo matchend("testing", "ing", 2)
-<              results in "7". >
-                       :echo matchend("testing", "ing", 5)
-<              result is "-1".
-               When {expr} is a |List| the result is equal to |match()|.
-
-               Can also be used as a |method|: >
-                       GetText()->matchend('word')
-
-
-matchfuzzy({list}, {str} [, {dict}])                   *matchfuzzy()*
-               If {list} is a list of strings, then returns a |List| with all
-               the strings in {list} that fuzzy match {str}. The strings in
-               the returned list are sorted based on the matching score.
-
-               The optional {dict} argument always supports the following
-               items:
-                   matchseq    When this item is present and {str} contains
-                               multiple words separated by white space, then
-                               returns only matches that contain the words in
-                               the given sequence.
-
-               If {list} is a list of dictionaries, then the optional {dict}
-               argument supports the following additional items:
-                   key         key of the item which is fuzzy matched against
-                               {str}. The value of this item should be a
-                               string.
-                   text_cb     |Funcref| that will be called for every item
-                               in {list} to get the text for fuzzy matching.
-                               This should accept a dictionary item as the
-                               argument and return the text for that item to
-                               use for fuzzy matching.
-
-               {str} is treated as a literal string and regular expression
-               matching is NOT supported.  The maximum supported {str} length
-               is 256.
-
-               When {str} has multiple words each separated by white space,
-               then the list of strings that have all the words is returned.
-
-               If there are no matching strings or there is an error, then an
-               empty list is returned. If length of {str} is greater than
-               256, then returns an empty list.
-
-               Refer to |fuzzy-match| for more information about fuzzy
-               matching strings.
-
-               Example: >
-                  :echo matchfuzzy(["clay", "crow"], "cay")
-<              results in ["clay"]. >
-                  :echo getbufinfo()->map({_, v -> v.name})->matchfuzzy("ndl")
-<              results in a list of buffer names fuzzy matching "ndl". >
-                  :echo getbufinfo()->matchfuzzy("ndl", {'key' : 'name'})
-<              results in a list of buffer information dicts with buffer
-               names fuzzy matching "ndl". >
-                  :echo getbufinfo()->matchfuzzy("spl",
-                                               \ {'text_cb' : {v -> v.name}})
-<              results in a list of buffer information dicts with buffer
-               names fuzzy matching "spl". >
-                  :echo v:oldfiles->matchfuzzy("test")
-<              results in a list of file names fuzzy matching "test". >
-                  :let l = readfile("buffer.c")->matchfuzzy("str")
-<              results in a list of lines in "buffer.c" fuzzy matching "str". >
-                  :echo ['one two', 'two one']->matchfuzzy('two one')
-<              results in ['two one', 'one two']. >
-                  :echo ['one two', 'two one']->matchfuzzy('two one',
-                                               \ {'matchseq': 1})
-<              results in ['two one'].
-
-matchfuzzypos({list}, {str} [, {dict}])                        *matchfuzzypos()*
-               Same as |matchfuzzy()|, but returns the list of matched
-               strings, the list of character positions where characters
-               in {str} matches and a list of matching scores.  You can
-               use |byteidx()| to convert a character position to a byte
-               position.
-
-               If {str} matches multiple times in a string, then only the
-               positions for the best match is returned.
-
-               If there are no matching strings or there is an error, then a
-               list with three empty list items is returned.
-
-               Example: >
-                       :echo matchfuzzypos(['testing'], 'tsg')
-<              results in [['testing'], [[0, 2, 6]], [99]] >
-                       :echo matchfuzzypos(['clay', 'lacy'], 'la')
-<              results in [['lacy', 'clay'], [[0, 1], [1, 2]], [153, 133]] >
-                       :echo [{'text': 'hello', 'id' : 10}]->matchfuzzypos('ll', {'key' : 'text'})
-<              results in [[{'id': 10, 'text': 'hello'}], [[2, 3]], [127]]
-
-matchlist({expr}, {pat} [, {start} [, {count}]])               *matchlist()*
-               Same as |match()|, but return a |List|.  The first item in the
-               list is the matched string, same as what matchstr() would
-               return.  Following items are submatches, like "\1", "\2", etc.
-               in |:substitute|.  When an optional submatch didn't match an
-               empty string is used.  Example: >
-                       echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
-<              Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
-               When there is no match an empty list is returned.
-
-               You can pass in a List, but that is not very useful.
-
-               Can also be used as a |method|: >
-                       GetText()->matchlist('word')
-
-matchstr({expr}, {pat} [, {start} [, {count}]])                        *matchstr()*
-               Same as |match()|, but return the matched string.  Example: >
-                       :echo matchstr("testing", "ing")
-<              results in "ing".
-               When there is no match "" is returned.
-               The {start}, if given, has the same meaning as for |match()|. >
-                       :echo matchstr("testing", "ing", 2)
-<              results in "ing". >
-                       :echo matchstr("testing", "ing", 5)
-<              result is "".
-               When {expr} is a |List| then the matching item is returned.
-               The type isn't changed, it's not necessarily a String.
-
-               Can also be used as a |method|: >
-                       GetText()->matchstr('word')
-
-matchstrpos({expr}, {pat} [, {start} [, {count}]])             *matchstrpos()*
-               Same as |matchstr()|, but return the matched string, the start
-               position and the end position of the match.  Example: >
-                       :echo matchstrpos("testing", "ing")
-<              results in ["ing", 4, 7].
-               When there is no match ["", -1, -1] is returned.
-               The {start}, if given, has the same meaning as for |match()|. >
-                       :echo matchstrpos("testing", "ing", 2)
-<              results in ["ing", 4, 7]. >
-                       :echo matchstrpos("testing", "ing", 5)
-<              result is ["", -1, -1].
-               When {expr} is a |List| then the matching item, the index
-               of first item where {pat} matches, the start position and the
-               end position of the match are returned. >
-                       :echo matchstrpos([1, '__x'], '\a')
-<              result is ["x", 1, 2, 3].
-               The type isn't changed, it's not necessarily a String.
-
-               Can also be used as a |method|: >
-                       GetText()->matchstrpos('word')
-<
-
-                                                       *max()*
-max({expr})    Return the maximum value of all items in {expr}. Example: >
-                       echo max([apples, pears, oranges])
-
-<              {expr} can be a |List| or a |Dictionary|.  For a Dictionary,
-               it returns the maximum of all values in the Dictionary.
-               If {expr} is neither a List nor a Dictionary, or one of the
-               items in {expr} cannot be used as a Number this results in
-               an error.  An empty |List| or |Dictionary| results in zero.
-
-               Can also be used as a |method|: >
-                       mylist->max()
-
-
-menu_info({name} [, {mode}])                           *menu_info()*
-               Return information about the specified menu {name} in
-               mode {mode}. The menu name should be specified without the
-               shortcut character ('&'). If {name} is "", then the top-level
-               menu names are returned.
-
-               {mode} can be one of these strings:
-                       "n"     Normal
-                       "v"     Visual (including Select)
-                       "o"     Operator-pending
-                       "i"     Insert
-                       "c"     Cmd-line
-                       "s"     Select
-                       "x"     Visual
-                       "t"     Terminal-Job
-                       ""      Normal, Visual and Operator-pending
-                       "!"     Insert and Cmd-line
-               When {mode} is omitted, the modes for "" are used.
-
-               Returns a |Dictionary| containing the following items:
-                 accel         menu item accelerator text |menu-text|
-                 display       display name (name without '&')
-                 enabled       v:true if this menu item is enabled
-                               Refer to |:menu-enable|
-                 icon          name of the icon file (for toolbar)
-                               |toolbar-icon|
-                 iconidx       index of a built-in icon
-                 modes         modes for which the menu is defined. In
-                               addition to the modes mentioned above, these
-                               characters will be used:
-                               " "     Normal, Visual and Operator-pending
-                 name          menu item name.
-                 noremenu      v:true if the {rhs} of the menu item is not
-                               remappable else v:false.
-                 priority      menu order priority |menu-priority|
-                 rhs           right-hand-side of the menu item. The returned
-                               string has special characters translated like
-                               in the output of the ":menu" command listing.
-                               When the {rhs} of a menu item is empty, then
-                               "<Nop>" is returned.
-                 script        v:true if script-local remapping of {rhs} is
-                               allowed else v:false.  See |:menu-script|.
-                 shortcut      shortcut key (character after '&' in
-                               the menu name) |menu-shortcut|
-                 silent        v:true if the menu item is created
-                               with <silent> argument |:menu-silent|
-                 submenus      |List| containing the names of
-                               all the submenus.  Present only if the menu
-                               item has submenus.
-
-               Returns an empty dictionary if the menu item is not found.
-
-               Examples: >
-                       :echo menu_info('Edit.Cut')
-                       :echo menu_info('File.Save', 'n')
-
-                       " Display the entire menu hierarchy in a buffer
-                       func ShowMenu(name, pfx)
-                         let m = menu_info(a:name)
-                         call append(line('$'), a:pfx .. m.display)
-                         for child in m->get('submenus', [])
-                           call ShowMenu(a:name .. '.' .. escape(child, '.'),
-                                                       \ a:pfx .. '    ')
-                         endfor
-                       endfunc
-                       new
-                       for topmenu in menu_info('').submenus
-                         call ShowMenu(topmenu, '')
-                       endfor
-<
-               Can also be used as a |method|: >
-                       GetMenuName()->menu_info('v')
-
-
-<                                                      *min()*
-min({expr})    Return the minimum value of all items in {expr}. Example:  >
-                       echo min([apples, pears, oranges])
-
-<              {expr} can be a |List| or a |Dictionary|.  For a Dictionary,
-               it returns the minimum of all values in the Dictionary.
-               If {expr} is neither a List nor a Dictionary, or one of the
-               items in {expr} cannot be used as a Number this results in
-               an error.  An empty |List| or |Dictionary| results in zero.
-
-               Can also be used as a |method|: >
-                       mylist->min()
-
-<                                                      *mkdir()* *E739*
-mkdir({name} [, {path} [, {prot}]])
-               Create directory {name}.
-
-               If {path} is "p" then intermediate directories are created as
-               necessary.  Otherwise it must be "".
-
-               If {prot} is given it is used to set the protection bits of
-               the new directory.  The default is 0o755 (rwxr-xr-x: r/w for
-               the user, readable for others).  Use 0o700 to make it
-               unreadable for others.  This is only used for the last part of
-               {name}.  Thus if you create /tmp/foo/bar then /tmp/foo will be
-               created with 0o755.
-               Example: >
-                       :call mkdir($HOME . "/tmp/foo/bar", "p", 0o700)
-
-<              This function is not available in the |sandbox|.
-
-               There is no error if the directory already exists and the "p"
-               flag is passed (since patch 8.0.1708).  However, without the
-               "p" option the call will fail.
-
-               The function result is a Number, which is TRUE if the call was
-               successful or FALSE if the directory creation failed or partly
-               failed.
-
-               Not available on all systems.  To check use: >
-                       :if exists("*mkdir")
-
-<              Can also be used as a |method|: >
-                       GetName()->mkdir()
-<
-                                                       *mode()*
-mode([expr])   Return a string that indicates the current mode.
-               If [expr] is supplied and it evaluates to a non-zero Number or
-               a non-empty String (|non-zero-arg|), then the full mode is
-               returned, otherwise only the first letter is returned.
-               Also see |state()|.
-
-                  n        Normal
-                  no       Operator-pending
-                  nov      Operator-pending (forced characterwise |o_v|)
-                  noV      Operator-pending (forced linewise |o_V|)
-                  noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|);
-                               CTRL-V is one character
-                  niI      Normal using |i_CTRL-O| in |Insert-mode|
-                  niR      Normal using |i_CTRL-O| in |Replace-mode|
-                  niV      Normal using |i_CTRL-O| in |Virtual-Replace-mode|
-                  nt       Terminal-Normal (insert goes to Terminal-Job mode)
-                  v        Visual by character
-                  vs       Visual by character using |v_CTRL-O| in Select mode
-                  V        Visual by line
-                  Vs       Visual by line using |v_CTRL-O| in Select mode
-                  CTRL-V   Visual blockwise
-                  CTRL-Vs  Visual blockwise using |v_CTRL-O| in Select mode
-                  s        Select by character
-                  S        Select by line
-                  CTRL-S   Select blockwise
-                  i        Insert
-                  ic       Insert mode completion |compl-generic|
-                  ix       Insert mode |i_CTRL-X| completion
-                  R        Replace |R|
-                  Rc       Replace mode completion |compl-generic|
-                  Rx       Replace mode |i_CTRL-X| completion
-                  Rv       Virtual Replace |gR|
-                  Rvc      Virtual Replace mode completion |compl-generic|
-                  Rvx      Virtual Replace mode |i_CTRL-X| completion
-                  c        Command-line editing
-                  cv       Vim Ex mode |gQ|
-                  ce       Normal Ex mode |Q|
-                  r        Hit-enter prompt
-                  rm       The -- more -- prompt
-                  r?       A |:confirm| query of some sort
-                  !        Shell or external command is executing
-                  t        Terminal-Job mode: keys go to the job
-
-               This is useful in the 'statusline' option or when used
-               with |remote_expr()| In most other places it always returns
-               "c" or "n".
-               Note that in the future more modes and more specific modes may
-               be added. It's better not to compare the whole string but only
-               the leading character(s).
-               Also see |visualmode()|.
-
-               Can also be used as a |method|: >
-                       DoFull()->mode()
-
-mzeval({expr})                                                 *mzeval()*
-               Evaluate MzScheme expression {expr} and return its result
-               converted to Vim data structures.
-               Numbers and strings are returned as they are.
-               Pairs (including lists and improper lists) and vectors are
-               returned as Vim |Lists|.
-               Hash tables are represented as Vim |Dictionary| type with keys
-               converted to strings.
-               All other types are converted to string with display function.
-               Examples: >
-                   :mz (define l (list 1 2 3))
-                   :mz (define h (make-hash)) (hash-set! h "list" l)
-                   :echo mzeval("l")
-                   :echo mzeval("h")
-<
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetExpr()->mzeval()
-<
-               {only available when compiled with the |+mzscheme| feature}
-
-nextnonblank({lnum})                                   *nextnonblank()*
-               Return the line number of the first line at or below {lnum}
-               that is not blank.  Example: >
-                       if getline(nextnonblank(1)) =~ "Java"
-<              When {lnum} is invalid or there is no non-blank line at or
-               below it, zero is returned.
-               {lnum} is used like with |getline()|.
-               See also |prevnonblank()|.
-
-               Can also be used as a |method|: >
-                       GetLnum()->nextnonblank()
-
-nr2char({expr} [, {utf8}])                             *nr2char()*
-               Return a string with a single character, which has the number
-               value {expr}.  Examples: >
-                       nr2char(64)             returns "@"
-                       nr2char(32)             returns " "
-<              When {utf8} is omitted or zero, the current 'encoding' is used.
-               Example for "utf-8": >
-                       nr2char(300)            returns I with bow character
-<              When {utf8} is TRUE, always return UTF-8 characters.
-               Note that a NUL character in the file is specified with
-               nr2char(10), because NULs are represented with newline
-               characters.  nr2char(0) is a real NUL and terminates the
-               string, thus results in an empty string.
-               To turn a list of character numbers into a string: >
-                   let list = [65, 66, 67]
-                   let str = join(map(list, {_, val -> nr2char(val)}), '')
-<              Result: "ABC"
-
-               Can also be used as a |method|: >
-                       GetNumber()->nr2char()
-
-or({expr}, {expr})                                     *or()*
-               Bitwise OR on the two arguments.  The arguments are converted
-               to a number.  A List, Dict or Float argument causes an error.
-               Example: >
-                       :let bits = or(bits, 0x80)
-<              Can also be used as a |method|: >
-                       :let bits = bits->or(0x80)
-
-
-pathshorten({path} [, {len}])                          *pathshorten()*
-               Shorten directory names in the path {path} and return the
-               result.  The tail, the file name, is kept as-is.  The other
-               components in the path are reduced to {len} letters in length.
-               If {len} is omitted or smaller than 1 then 1 is used (single
-               letters).  Leading '~' and '.' characters are kept.  Examples: >
-                       :echo pathshorten('~/.vim/autoload/myfile.vim')
-<                      ~/.v/a/myfile.vim ~
->
-                       :echo pathshorten('~/.vim/autoload/myfile.vim', 2)
-<                      ~/.vi/au/myfile.vim ~
-               It doesn't matter if the path exists or not.
-
-               Can also be used as a |method|: >
-                       GetDirectories()->pathshorten()
-
-perleval({expr})                                       *perleval()*
-               Evaluate Perl expression {expr} in scalar context and return
-               its result converted to Vim data structures. If value can't be
-               converted, it is returned as a string Perl representation.
-               Note: If you want an array or hash, {expr} must return a
-               reference to it.
-               Example: >
-                       :echo perleval('[1 .. 4]')
-<                      [1, 2, 3, 4]
-
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetExpr()->perleval()
-
-<              {only available when compiled with the |+perl| feature}
-
-
-popup_ functions are documented here: |popup-functions|
-
-
-pow({x}, {y})                                          *pow()*
-               Return the power of {x} to the exponent {y} as a |Float|.
-               {x} and {y} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo pow(3, 3)
-<                      27.0 >
-                       :echo pow(2, 16)
-<                      65536.0 >
-                       :echo pow(32, 0.20)
-<                      2.0
-
-               Can also be used as a |method|: >
-                       Compute()->pow(3)
-<
-               {only available when compiled with the |+float| feature}
-
-prevnonblank({lnum})                                   *prevnonblank()*
-               Return the line number of the first line at or above {lnum}
-               that is not blank.  Example: >
-                       let ind = indent(prevnonblank(v:lnum - 1))
-<              When {lnum} is invalid or there is no non-blank line at or
-               above it, zero is returned.
-               {lnum} is used like with |getline()|.
-               Also see |nextnonblank()|.
-
-               Can also be used as a |method|: >
-                       GetLnum()->prevnonblank()
-
-printf({fmt}, {expr1} ...)                             *printf()*
-               Return a String with {fmt}, where "%" items are replaced by
-               the formatted form of their respective arguments.  Example: >
-                       printf("%4d: E%d %.30s", lnum, errno, msg)
-<              May result in:
-                       "  99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
-
-               When used as a |method| the base is passed as the second
-               argument: >
-                       Compute()->printf("result: %d")
-
-<              Often used items are:
-                 %s    string
-                 %6S   string right-aligned in 6 display cells
-                 %6s   string right-aligned in 6 bytes
-                 %.9s  string truncated to 9 bytes
-                 %c    single byte
-                 %d    decimal number
-                 %5d   decimal number padded with spaces to 5 characters
-                 %x    hex number
-                 %04x  hex number padded with zeros to at least 4 characters
-                 %X    hex number using upper case letters
-                 %o    octal number
-                 %08b  binary number padded with zeros to at least 8 chars
-                 %f    floating point number as 12.23, inf, -inf or nan
-                 %F    floating point number as 12.23, INF, -INF or NAN
-                 %e    floating point number as 1.23e3, inf, -inf or nan
-                 %E    floating point number as 1.23E3, INF, -INF or NAN
-                 %g    floating point number, as %f or %e depending on value
-                 %G    floating point number, as %F or %E depending on value
-                 %%    the % character itself
-
-               Conversion specifications start with '%' and end with the
-               conversion type.  All other characters are copied unchanged to
-               the result.
-
-               The "%" starts a conversion specification.  The following
-               arguments appear in sequence:
-
-                       %  [flags]  [field-width]  [.precision]  type
-
-               flags
-                       Zero or more of the following flags:
-
-                   #         The value should be converted to an "alternate
-                             form".  For c, d, and s conversions, this option
-                             has no effect.  For o conversions, the precision
-                             of the number is increased to force the first
-                             character of the output string to a zero (except
-                             if a zero value is printed with an explicit
-                             precision of zero).
-                             For b and B conversions, a non-zero result has
-                             the string "0b" (or "0B" for B conversions)
-                             prepended to it.
-                             For x and X conversions, a non-zero result has
-                             the string "0x" (or "0X" for X conversions)
-                             prepended to it.
-
-                   0 (zero)  Zero padding.  For all conversions the converted
-                             value is padded on the left with zeros rather
-                             than blanks.  If a precision is given with a
-                             numeric conversion (d, b, B, o, x, and X), the 0
-                             flag is ignored.
-
-                   -         A negative field width flag; the converted value
-                             is to be left adjusted on the field boundary.
-                             The converted value is padded on the right with
-                             blanks, rather than on the left with blanks or
-                             zeros.  A - overrides a 0 if both are given.
-
-                   ' ' (space)  A blank should be left before a positive
-                             number produced by a signed conversion (d).
-
-                   +         A sign must always be placed before a number
-                             produced by a signed conversion.  A + overrides
-                             a space if both are used.
-
-               field-width
-                       An optional decimal digit string specifying a minimum
-                       field width.  If the converted value has fewer bytes
-                       than the field width, it will be padded with spaces on
-                       the left (or right, if the left-adjustment flag has
-                       been given) to fill out the field width.  For the S
-                       conversion the count is in cells.
-
-               .precision
-                       An optional precision, in the form of a period '.'
-                       followed by an optional digit string.  If the digit
-                       string is omitted, the precision is taken as zero.
-                       This gives the minimum number of digits to appear for
-                       d, o, x, and X conversions, the maximum number of
-                       bytes to be printed from a string for s conversions,
-                       or the maximum number of cells to be printed from a
-                       string for S conversions.
-                       For floating point it is the number of digits after
-                       the decimal point.
-
-               type
-                       A character that specifies the type of conversion to
-                       be applied, see below.
-
-               A field width or precision, or both, may be indicated by an
-               asterisk '*' instead of a digit string.  In this case, a
-               Number argument supplies the field width or precision.  A
-               negative field width is treated as a left adjustment flag
-               followed by a positive field width; a negative precision is
-               treated as though it were missing.  Example: >
-                       :echo printf("%d: %.*s", nr, width, line)
-<              This limits the length of the text used from "line" to
-               "width" bytes.
-
-               The conversion specifiers and their meanings are:
-
-                               *printf-d* *printf-b* *printf-B* *printf-o*
-                               *printf-x* *printf-X*
-               dbBoxX  The Number argument is converted to signed decimal
-                       (d), unsigned binary (b and B), unsigned octal (o), or
-                       unsigned hexadecimal (x and X) notation.  The letters
-                       "abcdef" are used for x conversions; the letters
-                       "ABCDEF" are used for X conversions.
-                       The precision, if any, gives the minimum number of
-                       digits that must appear; if the converted value
-                       requires fewer digits, it is padded on the left with
-                       zeros.
-                       In no case does a non-existent or small field width
-                       cause truncation of a numeric field; if the result of
-                       a conversion is wider than the field width, the field
-                       is expanded to contain the conversion result.
-                       The 'h' modifier indicates the argument is 16 bits.
-                       The 'l' modifier indicates the argument is 32 bits.
-                       The 'L' modifier indicates the argument is 64 bits.
-                       Generally, these modifiers are not useful. They are
-                       ignored when type is known from the argument.
-
-               i       alias for d
-               D       alias for ld
-               U       alias for lu
-               O       alias for lo
-
-                                                       *printf-c*
-               c       The Number argument is converted to a byte, and the
-                       resulting character is written.
-
-                                                       *printf-s*
-               s       The text of the String argument is used.  If a
-                       precision is specified, no more bytes than the number
-                       specified are used.
-                       If the argument is not a String type, it is
-                       automatically converted to text with the same format
-                       as ":echo".
-                                                       *printf-S*
-               S       The text of the String argument is used.  If a
-                       precision is specified, no more display cells than the
-                       number specified are used.
-
-                                                       *printf-f* *E807*
-               f F     The Float argument is converted into a string of the
-                       form 123.456.  The precision specifies the number of
-                       digits after the decimal point.  When the precision is
-                       zero the decimal point is omitted.  When the precision
-                       is not specified 6 is used.  A really big number
-                       (out of range or dividing by zero) results in "inf"
-                       or "-inf" with %f (INF or -INF with %F).
-                       "0.0 / 0.0" results in "nan" with %f (NAN with %F).
-                       Example: >
-                               echo printf("%.2f", 12.115)
-<                              12.12
-                       Note that roundoff depends on the system libraries.
-                       Use |round()| when in doubt.
-
-                                                       *printf-e* *printf-E*
-               e E     The Float argument is converted into a string of the
-                       form 1.234e+03 or 1.234E+03 when using 'E'.  The
-                       precision specifies the number of digits after the
-                       decimal point, like with 'f'.
-
-                                                       *printf-g* *printf-G*
-               g G     The Float argument is converted like with 'f' if the
-                       value is between 0.001 (inclusive) and 10000000.0
-                       (exclusive).  Otherwise 'e' is used for 'g' and 'E'
-                       for 'G'.  When no precision is specified superfluous
-                       zeroes and '+' signs are removed, except for the zero
-                       immediately after the decimal point.  Thus 10000000.0
-                       results in 1.0e7.
-
-                                                       *printf-%*
-               %       A '%' is written.  No argument is converted.  The
-                       complete conversion specification is "%%".
-
-               When a Number argument is expected a String argument is also
-               accepted and automatically converted.
-               When a Float or String argument is expected a Number argument
-               is also accepted and automatically converted.
-               Any other argument type results in an error message.
-
-                                                       *E766* *E767*
-               The number of {exprN} arguments must exactly match the number
-               of "%" items.  If there are not sufficient or too many
-               arguments an error is given.  Up to 18 arguments can be used.
-
-
-prompt_getprompt({buf})                                        *prompt_getprompt()*
-               Returns the effective prompt text for buffer {buf}.  {buf} can
-               be a buffer name or number.  See |prompt-buffer|.
-
-               If the buffer doesn't exist or isn't a prompt buffer, an empty
-               string is returned.
-
-               Can also be used as a |method|: >
-                       GetBuffer()->prompt_getprompt()
-
-<              {only available when compiled with the |+channel| feature}
-
-
-prompt_setcallback({buf}, {expr})                      *prompt_setcallback()*
-               Set prompt callback for buffer {buf} to {expr}.  When {expr}
-               is an empty string the callback is removed.  This has only
-               effect if {buf} has 'buftype' set to "prompt".
-
-               The callback is invoked when pressing Enter.  The current
-               buffer will always be the prompt buffer.  A new line for a
-               prompt is added before invoking the callback, thus the prompt
-               for which the callback was invoked will be in the last but one
-               line.
-               If the callback wants to add text to the buffer, it must
-               insert it above the last line, since that is where the current
-               prompt is.  This can also be done asynchronously.
-               The callback is invoked with one argument, which is the text
-               that was entered at the prompt.  This can be an empty string
-               if the user only typed Enter.
-               Example: >
-                  call prompt_setcallback(bufnr(), function('s:TextEntered'))
-                  func s:TextEntered(text)
-                    if a:text == 'exit' || a:text == 'quit'
-                      stopinsert
-                      close
-                    else
-                      call append(line('$') - 1, 'Entered: "' . a:text . '"')
-                      " Reset 'modified' to allow the buffer to be closed.
-                      set nomodified
-                    endif
-                  endfunc
-
-<              Can also be used as a |method|: >
-                       GetBuffer()->prompt_setcallback(callback)
-
-<              {only available when compiled with the |+channel| feature}
-
-prompt_setinterrupt({buf}, {expr})                     *prompt_setinterrupt()*
-               Set a callback for buffer {buf} to {expr}.  When {expr} is an
-               empty string the callback is removed.  This has only effect if
-               {buf} has 'buftype' set to "prompt".
-
-               This callback will be invoked when pressing CTRL-C in Insert
-               mode.  Without setting a callback Vim will exit Insert mode,
-               as in any buffer.
-
-               Can also be used as a |method|: >
-                       GetBuffer()->prompt_setinterrupt(callback)
-
-<              {only available when compiled with the |+channel| feature}
-
-prompt_setprompt({buf}, {text})                                *prompt_setprompt()*
-               Set prompt for buffer {buf} to {text}.  You most likely want
-               {text} to end in a space.
-               The result is only visible if {buf} has 'buftype' set to
-               "prompt".  Example: >
-                       call prompt_setprompt(bufnr(), 'command: ')
-<
-               Can also be used as a |method|: >
-                       GetBuffer()->prompt_setprompt('command: ')
-
-<              {only available when compiled with the |+channel| feature}
-
-prop_ functions are documented here: |text-prop-functions|
-
-pum_getpos()                                           *pum_getpos()*
-               If the popup menu (see |ins-completion-menu|) is not visible,
-               returns an empty |Dictionary|, otherwise, returns a
-               |Dictionary| with the following keys:
-                       height          nr of items visible
-                       width           screen cells
-                       row             top screen row (0 first row)
-                       col             leftmost screen column (0 first col)
-                       size            total nr of items
-                       scrollbar       |TRUE| if scrollbar is visible
-
-               The values are the same as in |v:event| during
-               |CompleteChanged|.
-
-pumvisible()                                           *pumvisible()*
-               Returns non-zero when the popup menu is visible, zero
-               otherwise.  See |ins-completion-menu|.
-               This can be used to avoid some things that would remove the
-               popup menu.
-
-py3eval({expr})                                                *py3eval()*
-               Evaluate Python expression {expr} and return its result
-               converted to Vim data structures.
-               Numbers and strings are returned as they are (strings are
-               copied though, Unicode strings are additionally converted to
-               'encoding').
-               Lists are represented as Vim |List| type.
-               Dictionaries are represented as Vim |Dictionary| type with
-               keys converted to strings.
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetExpr()->py3eval()
-
-<              {only available when compiled with the |+python3| feature}
-
-                                                       *E858* *E859*
-pyeval({expr})                                         *pyeval()*
-               Evaluate Python expression {expr} and return its result
-               converted to Vim data structures.
-               Numbers and strings are returned as they are (strings are
-               copied though).
-               Lists are represented as Vim |List| type.
-               Dictionaries are represented as Vim |Dictionary| type,
-               non-string keys result in error.
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetExpr()->pyeval()
-
-<              {only available when compiled with the |+python| feature}
-
-pyxeval({expr})                                                *pyxeval()*
-               Evaluate Python expression {expr} and return its result
-               converted to Vim data structures.
-               Uses Python 2 or 3, see |python_x| and 'pyxversion'.
-               See also: |pyeval()|, |py3eval()|
-
-               Can also be used as a |method|: >
-                       GetExpr()->pyxeval()
-
-<              {only available when compiled with the |+python| or the
-               |+python3| feature}
-
-rand([{expr}])                                         *rand()* *random*
-               Return a pseudo-random Number generated with an xoshiro128**
-               algorithm using seed {expr}.  The returned number is 32 bits,
-               also on 64 bits systems, for consistency.
-               {expr} can be initialized by |srand()| and will be updated by
-               rand().  If {expr} is omitted, an internal seed value is used
-               and updated.
-
-               Examples: >
-                       :echo rand()
-                       :let seed = srand()
-                       :echo rand(seed)
-                       :echo rand(seed) % 16  " random number 0 - 15
-<
-
-                                                       *E726* *E727*
-range({expr} [, {max} [, {stride}]])                           *range()*
-               Returns a |List| with Numbers:
-               - If only {expr} is specified: [0, 1, ..., {expr} - 1]
-               - If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
-               - If {stride} is specified: [{expr}, {expr} + {stride}, ...,
-                 {max}] (increasing {expr} with {stride} each time, not
-                 producing a value past {max}).
-               When the maximum is one before the start the result is an
-               empty list.  When the maximum is more than one before the
-               start this is an error.
-               Examples: >
-                       range(4)                " [0, 1, 2, 3]
-                       range(2, 4)             " [2, 3, 4]
-                       range(2, 9, 3)          " [2, 5, 8]
-                       range(2, -2, -1)        " [2, 1, 0, -1, -2]
-                       range(0)                " []
-                       range(2, 0)             " error!
-<
-               Can also be used as a |method|: >
-                       GetExpr()->range()
-<
-
-readblob({fname})                                      *readblob()*
-               Read file {fname} in binary mode and return a |Blob|.
-               When the file can't be opened an error message is given and
-               the result is an empty |Blob|.
-               Also see |readfile()| and |writefile()|.
-
-
-readdir({directory} [, {expr} [, {dict}]])                     *readdir()*
-               Return a list with file and directory names in {directory}.
-               You can also use |glob()| if you don't need to do complicated
-               things, such as limiting the number of matches.
-               The list will be sorted (case sensitive), see the {dict}
-               argument below for changing the sort order.
-
-               When {expr} is omitted all entries are included.
-               When {expr} is given, it is evaluated to check what to do:
-                       If {expr} results in -1 then no further entries will
-                       be handled.
-                       If {expr} results in 0 then this entry will not be
-                       added to the list.
-                       If {expr} results in 1 then this entry will be added
-                       to the list.
-               The entries "." and ".." are always excluded.
-               Each time {expr} is evaluated |v:val| is set to the entry name.
-               When {expr} is a function the name is passed as the argument.
-               For example, to get a list of files ending in ".txt": >
-                 readdir(dirname, {n -> n =~ '.txt$'})
-<              To skip hidden and backup files: >
-                 readdir(dirname, {n -> n !~ '^\.\|\~$'})
-
-<              The optional {dict} argument allows for further custom
-               values. Currently this is used to specify if and how sorting
-               should be performed. The dict can have the following members:
-
-                   sort    How to sort the result returned from the system.
-                           Valid values are:
-                               "none"      do not sort (fastest method)
-                               "case"      sort case sensitive (byte value of
-                                           each character, technically, using
-                                           strcmp()) (default)
-                               "icase"     sort case insensitive (technically
-                                           using strcasecmp())
-                               "collate"   sort using the collation order
-                                           of the "POSIX" or "C" |locale|
-                                           (technically using strcoll())
-                           Other values are silently ignored.
-
-               For example, to get a list of all files in the current
-               directory without sorting the individual entries: >
-                 readdir('.', '1', #{sort: 'none'})
-<              If you want to get a directory tree: >
-                 function! s:tree(dir)
-                     return {a:dir : map(readdir(a:dir),
-                     \ {_, x -> isdirectory(x) ?
-                     \          {x : s:tree(a:dir . '/' . x)} : x})}
-                 endfunction
-                 echo s:tree(".")
-<
-               Can also be used as a |method|: >
-                       GetDirName()->readdir()
-<
-readdirex({directory} [, {expr} [, {dict}]])                   *readdirex()*
-               Extended version of |readdir()|.
-               Return a list of Dictionaries with file and directory
-               information in {directory}.
-               This is useful if you want to get the attributes of file and
-               directory at the same time as getting a list of a directory.
-               This is much faster than calling |readdir()| then calling
-               |getfperm()|, |getfsize()|, |getftime()| and |getftype()| for
-               each file and directory especially on MS-Windows.
-               The list will by default be sorted by name (case sensitive),
-               the sorting can be changed by using the optional {dict}
-               argument, see |readdir()|.
-
-               The Dictionary for file and directory information has the
-               following items:
-                       group   Group name of the entry. (Only on Unix)
-                       name    Name of the entry.
-                       perm    Permissions of the entry. See |getfperm()|.
-                       size    Size of the entry. See |getfsize()|.
-                       time    Timestamp of the entry. See |getftime()|.
-                       type    Type of the entry.
-                               On Unix, almost same as |getftype()| except:
-                                   Symlink to a dir    "linkd"
-                                   Other symlink       "link"
-                               On MS-Windows:
-                                   Normal file         "file"
-                                   Directory           "dir"
-                                   Junction            "junction"
-                                   Symlink to a dir    "linkd"
-                                   Other symlink       "link"
-                                   Other reparse point "reparse"
-                       user    User name of the entry's owner. (Only on Unix)
-               On Unix, if the entry is a symlink, the Dictionary includes
-               the information of the target (except the "type" item).
-               On MS-Windows, it includes the information of the symlink
-               itself because of performance reasons.
-
-               When {expr} is omitted all entries are included.
-               When {expr} is given, it is evaluated to check what to do:
-                       If {expr} results in -1 then no further entries will
-                       be handled.
-                       If {expr} results in 0 then this entry will not be
-                       added to the list.
-                       If {expr} results in 1 then this entry will be added
-                       to the list.
-               The entries "." and ".." are always excluded.
-               Each time {expr} is evaluated |v:val| is set to a |Dictionary|
-               of the entry.
-               When {expr} is a function the entry is passed as the argument.
-               For example, to get a list of files ending in ".txt": >
-                 readdirex(dirname, {e -> e.name =~ '.txt$'})
-<
-               For example, to get a list of all files in the current
-               directory without sorting the individual entries: >
-                 readdirex(dirname, '1', #{sort: 'none'})
-
-<
-               Can also be used as a |method|: >
-                       GetDirName()->readdirex()
-<
-
-                                                       *readfile()*
-readfile({fname} [, {type} [, {max}]])
-               Read file {fname} and return a |List|, each line of the file
-               as an item.  Lines are broken at NL characters.  Macintosh
-               files separated with CR will result in a single long line
-               (unless a NL appears somewhere).
-               All NUL characters are replaced with a NL character.
-               When {type} contains "b" binary mode is used:
-               - When the last line ends in a NL an extra empty list item is
-                 added.
-               - No CR characters are removed.
-               Otherwise:
-               - CR characters that appear before a NL are removed.
-               - Whether the last line ends in a NL or not does not matter.
-               - When 'encoding' is Unicode any UTF-8 byte order mark is
-                 removed from the text.
-               When {max} is given this specifies the maximum number of lines
-               to be read.  Useful if you only want to check the first ten
-               lines of a file: >
-                       :for line in readfile(fname, '', 10)
-                       :  if line =~ 'Date' | echo line | endif
-                       :endfor
-<              When {max} is negative -{max} lines from the end of the file
-               are returned, or as many as there are.
-               When {max} is zero the result is an empty list.
-               Note that without {max} the whole file is read into memory.
-               Also note that there is no recognition of encoding.  Read a
-               file into a buffer if you need to.
-               Deprecated (use |readblob()| instead): When {type} contains
-               "B" a |Blob| is returned with the binary data of the file
-               unmodified.
-               When the file can't be opened an error message is given and
-               the result is an empty list.
-               Also see |writefile()|.
-
-               Can also be used as a |method|: >
-                       GetFileName()->readfile()
-
-reduce({object}, {func} [, {initial}])                 *reduce()* *E998*
-               {func} is called for every item in {object}, which can be a
-               |String|, |List| or a |Blob|.  {func} is called with two
-               arguments: the result so far and current item.  After
-               processing all items the result is returned.
-
-               {initial} is the initial result.  When omitted, the first item
-               in {object} is used and {func} is first called for the second
-               item.  If {initial} is not given and {object} is empty no
-               result can be computed, an E998 error is given.
-
-               Examples: >
-                       echo reduce([1, 3, 5], { acc, val -> acc + val })
-                       echo reduce(['x', 'y'], { acc, val -> acc .. val }, 'a')
-                       echo reduce(0z1122, { acc, val -> 2 * acc + val })
-                       echo reduce('xyz', { acc, val -> acc .. ',' .. val })
-<
-               Can also be used as a |method|: >
-                       echo mylist->reduce({ acc, val -> acc + val }, 0)
-
-
-reg_executing()                                                *reg_executing()*
-               Returns the single letter name of the register being executed.
-               Returns an empty string when no register is being executed.
-               See |@|.
-
-reg_recording()                                                *reg_recording()*
-               Returns the single letter name of the register being recorded.
-               Returns an empty string when not recording.  See |q|.
-
-reltime([{start} [, {end}]])                           *reltime()*
-               Return an item that represents a time value.  The item is a
-               list with items that depend on the system.  In Vim 9 script
-               list<any> can be used.
-               The item can be passed to |reltimestr()| to convert it to a
-               string or |reltimefloat()| to convert to a Float.
-
-               Without an argument reltime() returns the current time.
-               With one argument is returns the time passed since the time
-               specified in the argument.
-               With two arguments it returns the time passed between {start}
-               and {end}.
-
-               The {start} and {end} arguments must be values returned by
-               reltime().  If there is an error zero is returned in legacy
-               script, in Vim9 script an error is given.
-
-               Can also be used as a |method|: >
-                       GetStart()->reltime()
-<
-               {only available when compiled with the |+reltime| feature}
-
-reltimefloat({time})                           *reltimefloat()*
-               Return a Float that represents the time value of {time}.
-               Example: >
-                       let start = reltime()
-                       call MyFunction()
-                       let seconds = reltimefloat(reltime(start))
-<              See the note of reltimestr() about overhead.
-               Also see |profiling|.
-               If there is an error 0.0 is returned in legacy script, in Vim9
-               script an error is given.
-
-               Can also be used as a |method|: >
-                       reltime(start)->reltimefloat()
-
-<              {only available when compiled with the |+reltime| feature}
-
-reltimestr({time})                             *reltimestr()*
-               Return a String that represents the time value of {time}.
-               This is the number of seconds, a dot and the number of
-               microseconds.  Example: >
-                       let start = reltime()
-                       call MyFunction()
-                       echo reltimestr(reltime(start))
-<              Note that overhead for the commands will be added to the time.
-               The accuracy depends on the system.
-               Leading spaces are used to make the string align nicely.  You
-               can use split() to remove it. >
-                       echo split(reltimestr(reltime(start)))[0]
-<              Also see |profiling|.
-               If there is an error an empty string is returned in legacy
-               script, in Vim9 script an error is given.
-
-               Can also be used as a |method|: >
-                       reltime(start)->reltimestr()
-
-<              {only available when compiled with the |+reltime| feature}
-
-                                                       *remote_expr()* *E449*
-remote_expr({server}, {string} [, {idvar} [, {timeout}]])
-               Send the {string} to {server}.  The string is sent as an
-               expression and the result is returned after evaluation.
-               The result must be a String or a |List|.  A |List| is turned
-               into a String by joining the items with a line break in
-               between (not at the end), like with join(expr, "\n").
-               If {idvar} is present and not empty, it is taken as the name
-               of a variable and a {serverid} for later use with
-               |remote_read()| is stored there.
-               If {timeout} is given the read times out after this many
-               seconds.  Otherwise a timeout of 600 seconds is used.
-               See also |clientserver| |RemoteReply|.
-               This function is not available in the |sandbox|.
-               {only available when compiled with the |+clientserver| feature}
-               Note: Any errors will cause a local error message to be issued
-               and the result will be the empty string.
-
-               Variables will be evaluated in the global namespace,
-               independent of a function currently being active.  Except
-               when in debug mode, then local function variables and
-               arguments can be evaluated.
-
-               Examples: >
-                       :echo remote_expr("gvim", "2+2")
-                       :echo remote_expr("gvim1", "b:current_syntax")
-<
-               Can also be used as a |method|: >
-                       ServerName()->remote_expr(expr)
-
-remote_foreground({server})                            *remote_foreground()*
-               Move the Vim server with the name {server} to the foreground.
-               The {server} argument is a string.
-               This works like: >
-                       remote_expr({server}, "foreground()")
-<              Except that on Win32 systems the client does the work, to work
-               around the problem that the OS doesn't always allow the server
-               to bring itself to the foreground.
-               Note: This does not restore the window if it was minimized,
-               like foreground() does.
-               This function is not available in the |sandbox|.
-
-               Can also be used as a |method|: >
-                       ServerName()->remote_foreground()
-
-<              {only in the Win32, Athena, Motif and GTK GUI versions and the
-               Win32 console version}
-
-
-remote_peek({serverid} [, {retvar}])           *remote_peek()*
-               Returns a positive number if there are available strings
-               from {serverid}.  Copies any reply string into the variable
-               {retvar} if specified.  {retvar} must be a string with the
-               name of a variable.
-               Returns zero if none are available.
-               Returns -1 if something is wrong.
-               See also |clientserver|.
-               This function is not available in the |sandbox|.
-               {only available when compiled with the |+clientserver| feature}
-               Examples: >
-                       :let repl = ""
-                       :echo "PEEK: ".remote_peek(id, "repl").": ".repl
-
-<              Can also be used as a |method|: >
-                       ServerId()->remote_peek()
-
-remote_read({serverid}, [{timeout}])                   *remote_read()*
-               Return the oldest available reply from {serverid} and consume
-               it.  Unless a {timeout} in seconds is given, it blocks until a
-               reply is available.
-               See also |clientserver|.
-               This function is not available in the |sandbox|.
-               {only available when compiled with the |+clientserver| feature}
-               Example: >
-                       :echo remote_read(id)
-
-<              Can also be used as a |method|: >
-                       ServerId()->remote_read()
-<
-                                                       *remote_send()* *E241*
-remote_send({server}, {string} [, {idvar}])
-               Send the {string} to {server}.  The string is sent as input
-               keys and the function returns immediately.  At the Vim server
-               the keys are not mapped |:map|.
-               If {idvar} is present, it is taken as the name of a variable
-               and a {serverid} for later use with remote_read() is stored
-               there.
-               See also |clientserver| |RemoteReply|.
-               This function is not available in the |sandbox|.
-               {only available when compiled with the |+clientserver| feature}
-
-               Note: Any errors will be reported in the server and may mess
-               up the display.
-               Examples: >
-               :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
-                \ remote_read(serverid)
-
-               :autocmd NONE RemoteReply *
-                \ echo remote_read(expand("<amatch>"))
-               :echo remote_send("gvim", ":sleep 10 | echo ".
-                \ 'server2client(expand("<client>"), "HELLO")<CR>')
-<
-               Can also be used as a |method|: >
-                       ServerName()->remote_send(keys)
-<
-                                       *remote_startserver()* *E941* *E942*
-remote_startserver({name})
-               Become the server {name}.  This fails if already running as a
-               server, when |v:servername| is not empty.
-
-               Can also be used as a |method|: >
-                       ServerName()->remote_startserver()
-
-<              {only available when compiled with the |+clientserver| feature}
-
-remove({list}, {idx} [, {end}])                                *remove()*
-               Without {end}: Remove the item at {idx} from |List| {list} and
-               return the item.
-               With {end}: Remove items from {idx} to {end} (inclusive) and
-               return a |List| with these items.  When {idx} points to the same
-               item as {end} a list with one item is returned.  When {end}
-               points to an item before {idx} this is an error.
-               See |list-index| for possible values of {idx} and {end}.
-               Example: >
-                       :echo "last item: " . remove(mylist, -1)
-                       :call remove(mylist, 0, 9)
-<
-               Use |delete()| to remove a file.
-
-               Can also be used as a |method|: >
-                       mylist->remove(idx)
-
-remove({blob}, {idx} [, {end}])
-               Without {end}: Remove the byte at {idx} from |Blob| {blob} and
-               return the byte.
-               With {end}: Remove bytes from {idx} to {end} (inclusive) and
-               return a |Blob| with these bytes.  When {idx} points to the same
-               byte as {end} a |Blob| with one byte is returned.  When {end}
-               points to a byte before {idx} this is an error.
-               Example: >
-                       :echo "last byte: " . remove(myblob, -1)
-                       :call remove(mylist, 0, 9)
-
-remove({dict}, {key})
-               Remove the entry from {dict} with key {key} and return it.
-               Example: >
-                       :echo "removed " . remove(dict, "one")
-<              If there is no {key} in {dict} this is an error.
-
-rename({from}, {to})                                   *rename()*
-               Rename the file by the name {from} to the name {to}.  This
-               should also work to move files across file systems.  The
-               result is a Number, which is 0 if the file was renamed
-               successfully, and non-zero when the renaming failed.
-               NOTE: If {to} exists it is overwritten without warning.
-               This function is not available in the |sandbox|.
-
-               Can also be used as a |method|: >
-                       GetOldName()->rename(newname)
-
-repeat({expr}, {count})                                        *repeat()*
-               Repeat {expr} {count} times and return the concatenated
-               result.  Example: >
-                       :let separator = repeat('-', 80)
-<              When {count} is zero or negative the result is empty.
-               When {expr} is a |List| the result is {expr} concatenated
-               {count} times.  Example: >
-                       :let longlist = repeat(['a', 'b'], 3)
-<              Results in ['a', 'b', 'a', 'b', 'a', 'b'].
-
-               Can also be used as a |method|: >
-                       mylist->repeat(count)
-
-resolve({filename})                                    *resolve()* *E655*
-               On MS-Windows, when {filename} is a shortcut (a .lnk file),
-               returns the path the shortcut points to in a simplified form.
-               When {filename} is a symbolic link or junction point, return
-               the full path to the target. If the target of junction is
-               removed, return {filename}.
-               On Unix, repeat resolving symbolic links in all path
-               components of {filename} and return the simplified result.
-               To cope with link cycles, resolving of symbolic links is
-               stopped after 100 iterations.
-               On other systems, return the simplified {filename}.
-               The simplification step is done as by |simplify()|.
-               resolve() keeps a leading path component specifying the
-               current directory (provided the result is still a relative
-               path name) and also keeps a trailing path separator.
-
-               Can also be used as a |method|: >
-                       GetName()->resolve()
-
-reverse({object})                                      *reverse()*
-               Reverse the order of items in {object} in-place.
-               {object} can be a |List| or a |Blob|.
-               Returns {object}.
-               If you want an object to remain unmodified make a copy first: >
-                       :let revlist = reverse(copy(mylist))
-<              Can also be used as a |method|: >
-                       mylist->reverse()
-
-round({expr})                                                  *round()*
-               Round off {expr} to the nearest integral value and return it
-               as a |Float|.  If {expr} lies halfway between two integral
-               values, then use the larger one (away from zero).
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       echo round(0.456)
-<                      0.0  >
-                       echo round(4.5)
-<                      5.0 >
-                       echo round(-4.5)
-<                      -5.0
-
-               Can also be used as a |method|: >
-                       Compute()->round()
-<
-               {only available when compiled with the |+float| feature}
-
-rubyeval({expr})                                       *rubyeval()*
-               Evaluate Ruby expression {expr} and return its result
-               converted to Vim data structures.
-               Numbers, floats and strings are returned as they are (strings
-               are copied though).
-               Arrays are represented as Vim |List| type.
-               Hashes are represented as Vim |Dictionary| type.
-               Other objects are represented as strings resulted from their
-               "Object#to_s" method.
-               Note that in a `:def` function local variables are not visible
-               to {expr}.
-
-               Can also be used as a |method|: >
-                       GetRubyExpr()->rubyeval()
-
-<              {only available when compiled with the |+ruby| feature}
-
-screenattr({row}, {col})                                       *screenattr()*
-               Like |screenchar()|, but return the attribute.  This is a rather
-               arbitrary number that can only be used to compare to the
-               attribute at other positions.
-
-               Can also be used as a |method|: >
-                       GetRow()->screenattr(col)
-
-screenchar({row}, {col})                                       *screenchar()*
-               The result is a Number, which is the character at position
-               [row, col] on the screen.  This works for every possible
-               screen position, also status lines, window separators and the
-               command line.  The top left position is row one, column one
-               The character excludes composing characters.  For double-byte
-               encodings it may only be the first byte.
-               This is mainly to be used for testing.
-               Returns -1 when row or col is out of range.
-
-               Can also be used as a |method|: >
-                       GetRow()->screenchar(col)
-
-screenchars({row}, {col})                                      *screenchars()*
-               The result is a |List| of Numbers.  The first number is the same
-               as what |screenchar()| returns.  Further numbers are
-               composing characters on top of the base character.
-               This is mainly to be used for testing.
-               Returns an empty List when row or col is out of range.
-
-               Can also be used as a |method|: >
-                       GetRow()->screenchars(col)
-
-screencol()                                                    *screencol()*
-               The result is a Number, which is the current screen column of
-               the cursor. The leftmost column has number 1.
-               This function is mainly used for testing.
-
-               Note: Always returns the current screen column, thus if used
-               in a command (e.g. ":echo screencol()") it will return the
-               column inside the command line, which is 1 when the command is
-               executed. To get the cursor position in the file use one of
-               the following mappings: >
-                       nnoremap <expr> GG ":echom ".screencol()."\n"
-                       nnoremap <silent> GG :echom screencol()<CR>
-                       nnoremap GG <Cmd>echom screencol()<CR>
-<
-screenpos({winid}, {lnum}, {col})                              *screenpos()*
-               The result is a Dict with the screen position of the text
-               character in window {winid} at buffer line {lnum} and column
-               {col}.  {col} is a one-based byte index.
-               The Dict has these members:
-                       row     screen row
-                       col     first screen column
-                       endcol  last screen column
-                       curscol cursor screen column
-               If the specified position is not visible, all values are zero.
-               The "endcol" value differs from "col" when the character
-               occupies more than one screen cell.  E.g. for a Tab "col" can
-               be 1 and "endcol" can be 8.
-               The "curscol" value is where the cursor would be placed.  For
-               a Tab it would be the same as "endcol", while for a double
-               width character it would be the same as "col".
-               The |conceal| feature is ignored here, the column numbers are
-               as if 'conceallevel' is zero.  You can set the cursor to the
-               right position and use |screencol()| to get the value with
-               |conceal| taken into account.
-
-               Can also be used as a |method|: >
-                       GetWinid()->screenpos(lnum, col)
-
-screenrow()                                                    *screenrow()*
-               The result is a Number, which is the current screen row of the
-               cursor.  The top line has number one.
-               This function is mainly used for testing.
-               Alternatively you can use |winline()|.
-
-               Note: Same restrictions as with |screencol()|.
-
-screenstring({row}, {col})                                     *screenstring()*
-               The result is a String that contains the base character and
-               any composing characters at position [row, col] on the screen.
-               This is like |screenchars()| but returning a String with the
-               characters.
-               This is mainly to be used for testing.
-               Returns an empty String when row or col is out of range.
-
-               Can also be used as a |method|: >
-                       GetRow()->screenstring(col)
-<
-                                                               *search()*
-search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
-               Search for regexp pattern {pattern}.  The search starts at the
-               cursor position (you can use |cursor()| to set it).
-
-               When a match has been found its line number is returned.
-               If there is no match a 0 is returned and the cursor doesn't
-               move.  No error message is given.
-
-               {flags} is a String, which can contain these character flags:
-               'b'     search Backward instead of forward
-               'c'     accept a match at the Cursor position
-               'e'     move to the End of the match
-               'n'     do Not move the cursor
-               'p'     return number of matching sub-Pattern (see below)
-               's'     Set the ' mark at the previous location of the cursor
-               'w'     Wrap around the end of the file
-               'W'     don't Wrap around the end of the file
-               'z'     start searching at the cursor column instead of zero
-               If neither 'w' or 'W' is given, the 'wrapscan' option applies.
-
-               If the 's' flag is supplied, the ' mark is set, only if the
-               cursor is moved. The 's' flag cannot be combined with the 'n'
-               flag.
-
-               'ignorecase', 'smartcase' and 'magic' are used.
-
-               When the 'z' flag is not given, forward searching always
-               starts in column zero and then matches before the cursor are
-               skipped.  When the 'c' flag is present in 'cpo' the next
-               search starts after the match.  Without the 'c' flag the next
-               search starts one column further.  This matters for
-               overlapping matches.
-               When searching backwards and the 'z' flag is given then the
-               search starts in column zero, thus no match in the current
-               line will be found (unless wrapping around the end of the
-               file).
-
-               When the {stopline} argument is given then the search stops
-               after searching this line.  This is useful to restrict the
-               search to a range of lines.  Examples: >
-                       let match = search('(', 'b', line("w0"))
-                       let end = search('END', '', line("w$"))
-<              When {stopline} is used and it is not zero this also implies
-               that the search does not wrap around the end of the file.
-               A zero value is equal to not giving the argument.
-
-               When the {timeout} argument is given the search stops when
-               more than this many milliseconds have passed.  Thus when
-               {timeout} is 500 the search stops after half a second.
-               The value must not be negative.  A zero value is like not
-               giving the argument.
-               {only available when compiled with the |+reltime| feature}
-
-               If the {skip} expression is given it is evaluated with the
-               cursor positioned on the start of a match.  If it evaluates to
-               non-zero this match is skipped.  This can be used, for
-               example, to skip a match in a comment or a string.
-               {skip} can be a string, which is evaluated as an expression, a
-               function reference or a lambda.
-               When {skip} is omitted or empty, every match is accepted.
-               When evaluating {skip} causes an error the search is aborted
-               and -1 returned.
-                                                       *search()-sub-match*
-               With the 'p' flag the returned value is one more than the
-               first sub-match in \(\).  One if none of them matched but the
-               whole pattern did match.
-               To get the column number too use |searchpos()|.
-
-               The cursor will be positioned at the match, unless the 'n'
-               flag is used.
-
-               Example (goes over all files in the argument list): >
-                   :let n = 1
-                   :while n <= argc()      " loop over all files in arglist
-                   :  exe "argument " . n
-                   :  " start at the last char in the file and wrap for the
-                   :  " first search to find match at start of file
-                   :  normal G$
-                   :  let flags = "w"
-                   :  while search("foo", flags) > 0
-                   :    s/foo/bar/g
-                   :    let flags = "W"
-                   :  endwhile
-                   :  update               " write the file if modified
-                   :  let n = n + 1
-                   :endwhile
-<
-               Example for using some flags: >
-                   :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
-<              This will search for the keywords "if", "else", and "endif"
-               under or after the cursor.  Because of the 'p' flag, it
-               returns 1, 2, or 3 depending on which keyword is found, or 0
-               if the search fails.  With the cursor on the first word of the
-               line:
-                   if (foo == 0) | let foo = foo + 1 | endif ~
-               the function returns 1.  Without the 'c' flag, the function
-               finds the "endif" and returns 3.  The same thing happens
-               without the 'e' flag if the cursor is on the "f" of "if".
-               The 'n' flag tells the function not to move the cursor.
-
-               Can also be used as a |method|: >
-                       GetPattern()->search()
-
-searchcount([{options}])                                       *searchcount()*
-               Get or update the last search count, like what is displayed
-               without the "S" flag in 'shortmess'.  This works even if
-               'shortmess' does contain the "S" flag.
-
-               This returns a |Dictionary|. The dictionary is empty if the
-               previous pattern was not set and "pattern" was not specified.
-
-                 key           type            meaning ~
-                 current       |Number|        current position of match;
-                                               0 if the cursor position is
-                                               before the first match
-                 exact_match   |Boolean|       1 if "current" is matched on
-                                               "pos", otherwise 0
-                 total         |Number|        total count of matches found
-                 incomplete    |Number|        0: search was fully completed
-                                               1: recomputing was timed out
-                                               2: max count exceeded
-
-               For {options} see further down.
-
-               To get the last search count when |n| or |N| was pressed, call
-               this function with `recompute: 0` . This sometimes returns
-               wrong information because |n| and |N|'s maximum count is 99.
-               If it exceeded 99 the result must be max count + 1 (100). If
-               you want to get correct information, specify `recompute: 1`: >
-
-                       " result == maxcount + 1 (100) when many matches
-                       let result = searchcount(#{recompute: 0})
-
-                       " Below returns correct result (recompute defaults
-                       " to 1)
-                       let result = searchcount()
-<
-               The function is useful to add the count to |statusline|: >
-                       function! LastSearchCount() abort
-                         let result = searchcount(#{recompute: 0})
-                         if empty(result)
-                           return ''
-                         endif
-                         if result.incomplete ==# 1     " timed out
-                           return printf(' /%s [?/??]', @/)
-                         elseif result.incomplete ==# 2 " max count exceeded
-                           if result.total > result.maxcount &&
-                           \  result.current > result.maxcount
-                             return printf(' /%s [>%d/>%d]', @/,
-                             \             result.current, result.total)
-                           elseif result.total > result.maxcount
-                             return printf(' /%s [%d/>%d]', @/,
-                             \             result.current, result.total)
-                           endif
-                         endif
-                         return printf(' /%s [%d/%d]', @/,
-                         \             result.current, result.total)
-                       endfunction
-                       let &statusline .= '%{LastSearchCount()}'
-
-                       " Or if you want to show the count only when
-                       " 'hlsearch' was on
-                       " let &statusline .=
-                       " \   '%{v:hlsearch ? LastSearchCount() : ""}'
-<
-               You can also update the search count, which can be useful in a
-               |CursorMoved| or |CursorMovedI| autocommand: >
-
-                       autocmd CursorMoved,CursorMovedI *
-                         \ let s:searchcount_timer = timer_start(
-                         \   200, function('s:update_searchcount'))
-                       function! s:update_searchcount(timer) abort
-                         if a:timer ==# s:searchcount_timer
-                           call searchcount(#{
-                           \ recompute: 1, maxcount: 0, timeout: 100})
-                           redrawstatus
-                         endif
-                       endfunction
-<
-               This can also be used to count matched texts with specified
-               pattern in the current buffer using "pattern":  >
-
-                       " Count '\<foo\>' in this buffer
-                       " (Note that it also updates search count)
-                       let result = searchcount(#{pattern: '\<foo\>'})
-
-                       " To restore old search count by old pattern,
-                       " search again
-                       call searchcount()
-<
-               {options} must be a |Dictionary|. It can contain:
-                 key           type            meaning ~
-                 recompute     |Boolean|       if |TRUE|, recompute the count
-                                               like |n| or |N| was executed.
-                                               otherwise returns the last
-                                               computed result (when |n| or
-                                               |N| was used when "S" is not
-                                               in 'shortmess', or this
-                                               function was called).
-                                               (default: |TRUE|)
-                 pattern       |String|        recompute if this was given
-                                               and different with |@/|.
-                                               this works as same as the
-                                               below command is executed
-                                               before calling this function >
-                                                 let @/ = pattern
-<                                              (default: |@/|)
-                 timeout       |Number|        0 or negative number is no
-                                               timeout. timeout milliseconds
-                                               for recomputing the result
-                                               (default: 0)
-                 maxcount      |Number|        0 or negative number is no
-                                               limit. max count of matched
-                                               text while recomputing the
-                                               result.  if search exceeded
-                                               total count, "total" value
-                                               becomes `maxcount + 1`
-                                               (default: 99)
-                 pos           |List|          `[lnum, col, off]` value
-                                               when recomputing the result.
-                                               this changes "current" result
-                                               value. see |cursor()|,
-                                               |getpos()|
-                                               (default: cursor's position)
-
-               Can also be used as a |method|: >
-                       GetSearchOpts()->searchcount()
-<
-searchdecl({name} [, {global} [, {thisblock}]])                        *searchdecl()*
-               Search for the declaration of {name}.
-
-               With a non-zero {global} argument it works like |gD|, find
-               first match in the file.  Otherwise it works like |gd|, find
-               first match in the function.
-
-               With a non-zero {thisblock} argument matches in a {} block
-               that ends before the cursor position are ignored.  Avoids
-               finding variable declarations only valid in another scope.
-
-               Moves the cursor to the found match.
-               Returns zero for success, non-zero for failure.
-               Example: >
-                       if searchdecl('myvar') == 0
-                          echo getline('.')
-                       endif
-<
-               Can also be used as a |method|: >
-                       GetName()->searchdecl()
-<
-                                                       *searchpair()*
-searchpair({start}, {middle}, {end} [, {flags} [, {skip}
-                               [, {stopline} [, {timeout}]]]])
-               Search for the match of a nested start-end pair.  This can be
-               used to find the "endif" that matches an "if", while other
-               if/endif pairs in between are ignored.
-               The search starts at the cursor.  The default is to search
-               forward, include 'b' in {flags} to search backward.
-               If a match is found, the cursor is positioned at it and the
-               line number is returned.  If no match is found 0 or -1 is
-               returned and the cursor doesn't move.  No error message is
-               given.
-
-               {start}, {middle} and {end} are patterns, see |pattern|.  They
-               must not contain \( \) pairs.  Use of \%( \) is allowed.  When
-               {middle} is not empty, it is found when searching from either
-               direction, but only when not in a nested start-end pair.  A
-               typical use is: >
-                       searchpair('\<if\>', '\<else\>', '\<endif\>')
-<              By leaving {middle} empty the "else" is skipped.
-
-               {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with
-               |search()|.  Additionally:
-               'r'     Repeat until no more matches found; will find the
-                       outer pair.  Implies the 'W' flag.
-               'm'     Return number of matches instead of line number with
-                       the match; will be > 1 when 'r' is used.
-               Note: it's nearly always a good idea to use the 'W' flag, to
-               avoid wrapping around the end of the file.
-
-               When a match for {start}, {middle} or {end} is found, the
-               {skip} expression is evaluated with the cursor positioned on
-               the start of the match.  It should return non-zero if this
-               match is to be skipped.  E.g., because it is inside a comment
-               or a string.
-               When {skip} is omitted or empty, every match is accepted.
-               When evaluating {skip} causes an error the search is aborted
-               and -1 returned.
-               {skip} can be a string, a lambda, a funcref or a partial.
-               Anything else makes the function fail.
-               In a `:def` function when the {skip} argument is a string
-               constant it is compiled into instructions.
-
-               For {stopline} and {timeout} see |search()|.
-
-               The value of 'ignorecase' is used.  'magic' is ignored, the
-               patterns are used like it's on.
-
-               The search starts exactly at the cursor.  A match with
-               {start}, {middle} or {end} at the next character, in the
-               direction of searching, is the first one found.  Example: >
-                       if 1
-                         if 2
-                         endif 2
-                       endif 1
-<              When starting at the "if 2", with the cursor on the "i", and
-               searching forwards, the "endif 2" is found.  When starting on
-               the character just before the "if 2", the "endif 1" will be
-               found.  That's because the "if 2" will be found first, and
-               then this is considered to be a nested if/endif from "if 2" to
-               "endif 2".
-               When searching backwards and {end} is more than one character,
-               it may be useful to put "\zs" at the end of the pattern, so
-               that when the cursor is inside a match with the end it finds
-               the matching start.
-
-               Example, to find the "endif" command in a Vim script: >
-
-       :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
-                       \ 'getline(".") =~ "^\\s*\""')
-
-<              The cursor must be at or after the "if" for which a match is
-               to be found.  Note that single-quote strings are used to avoid
-               having to double the backslashes.  The skip expression only
-               catches comments at the start of a line, not after a command.
-               Also, a word "en" or "if" halfway a line is considered a
-               match.
-               Another example, to search for the matching "{" of a "}": >
-
-       :echo searchpair('{', '', '}', 'bW')
-
-<              This works when the cursor is at or before the "}" for which a
-               match is to be found.  To reject matches that syntax
-               highlighting recognized as strings: >
-
-       :echo searchpair('{', '', '}', 'bW',
-            \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
-<
-                                                       *searchpairpos()*
-searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
-                               [, {stopline} [, {timeout}]]]])
-               Same as |searchpair()|, but returns a |List| with the line and
-               column position of the match. The first element of the |List|
-               is the line number and the second element is the byte index of
-               the column position of the match.  If no match is found,
-               returns [0, 0]. >
-
-                       :let [lnum,col] = searchpairpos('{', '', '}', 'n')
-<
-               See |match-parens| for a bigger and more useful example.
-
-                                                       *searchpos()*
-searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
-               Same as |search()|, but returns a |List| with the line and
-               column position of the match. The first element of the |List|
-               is the line number and the second element is the byte index of
-               the column position of the match. If no match is found,
-               returns [0, 0].
-               Example: >
-       :let [lnum, col] = searchpos('mypattern', 'n')
-
-<              When the 'p' flag is given then there is an extra item with
-               the sub-pattern match number |search()-sub-match|.  Example: >
-       :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
-<              In this example "submatch" is 2 when a lowercase letter is
-               found |/\l|, 3 when an uppercase letter is found |/\u|.
-
-               Can also be used as a |method|: >
-                       GetPattern()->searchpos()
-
-server2client({clientid}, {string})                    *server2client()*
-               Send a reply string to {clientid}.  The most recent {clientid}
-               that sent a string can be retrieved with expand("<client>").
-               {only available when compiled with the |+clientserver| feature}
-               Returns zero for success, -1 for failure.
-               Note:
-               This id has to be stored before the next command can be
-               received.  I.e. before returning from the received command and
-               before calling any commands that waits for input.
-               See also |clientserver|.
-               Example: >
-                       :echo server2client(expand("<client>"), "HELLO")
-
-<              Can also be used as a |method|: >
-                       GetClientId()->server2client(string)
-<
-serverlist()                                   *serverlist()*
-               Return a list of available server names, one per line.
-               When there are no servers or the information is not available
-               an empty string is returned.  See also |clientserver|.
-               {only available when compiled with the |+clientserver| feature}
-               Example: >
-                       :echo serverlist()
-<
-setbufline({buf}, {lnum}, {text})                      *setbufline()*
-               Set line {lnum} to {text} in buffer {buf}.  This works like
-               |setline()| for the specified buffer.
-
-               This function works only for loaded buffers. First call
-               |bufload()| if needed.
-
-               To insert lines use |appendbufline()|.
-               Any text properties in {lnum} are cleared.
-
-               {text} can be a string to set one line, or a list of strings
-               to set multiple lines.  If the list extends below the last
-               line then those lines are added.
-
-               For the use of {buf}, see |bufname()| above.
-
-               {lnum} is used like with |setline()|.
-               Use "$" to refer to the last line in buffer {buf}.
-               When {lnum} is just below the last line the {text} will be
-               added below the last line.
-
-               When {buf} is not a valid buffer, the buffer is not loaded or
-               {lnum} is not valid then 1 is returned.  On success 0 is
-               returned.
-
-               Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetText()->setbufline(buf, lnum)
-
-setbufvar({buf}, {varname}, {val})                     *setbufvar()*
-               Set option or local variable {varname} in buffer {buf} to
-               {val}.
-               This also works for a global or local window option, but it
-               doesn't work for a global or local window variable.
-               For a local window option the global value is unchanged.
-               For the use of {buf}, see |bufname()| above.
-               The {varname} argument is a string.
-               Note that the variable name without "b:" must be used.
-               Examples: >
-                       :call setbufvar(1, "&mod", 1)
-                       :call setbufvar("todo", "myvar", "foobar")
-<              This function is not available in the |sandbox|.
-
-               Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetValue()->setbufvar(buf, varname)
-
-
-setcellwidths({list})                                  *setcellwidths()*
-               Specify overrides for cell widths of character ranges.  This
-               tells Vim how wide characters are, counted in screen cells.
-               This overrides 'ambiwidth'.  Example: >
-                  setcellwidths([[0xad, 0xad, 1],
-                               \ [0x2194, 0x2199, 2]])
-
-<                                      *E1109* *E1110* *E1111* *E1112* *E1113*
-               The {list} argument is a list of lists with each three
-               numbers. These three numbers are [low, high, width].  "low"
-               and "high" can be the same, in which case this refers to one
-               character. Otherwise it is the range of characters from "low"
-               to "high" (inclusive).  "width" is either 1 or 2, indicating
-               the character width in screen cells.
-               An error is given if the argument is invalid, also when a
-               range overlaps with another.
-               Only characters with value 0x100 and higher can be used.
-
-               If the new value causes 'fillchars' or 'listchars' to become
-               invalid it is rejected and an error is given.
-
-               To clear the overrides pass an empty list: >
-                  setcellwidths([]);
-<              You can use the script $VIMRUNTIME/tools/emoji_list.vim to see
-               the effect for known emoji characters.
-
-setcharpos({expr}, {list})                             *setcharpos()*
-               Same as |setpos()| but uses the specified column number as the
-               character index instead of the byte index in the line.
-
-               Example:
-               With the text "여보세요" in line 8: >
-                       call setcharpos('.', [0, 8, 4, 0])
-<              positions the cursor on the fourth character '요'. >
-                       call setpos('.', [0, 8, 4, 0])
-<              positions the cursor on the second character '보'.
-
-               Can also be used as a |method|: >
-                       GetPosition()->setcharpos('.')
-
-setcharsearch({dict})                                  *setcharsearch()*
-               Set the current character search information to {dict},
-               which contains one or more of the following entries:
-
-                   char        character which will be used for a subsequent
-                               |,| or |;| command; an empty string clears the
-                               character search
-                   forward     direction of character search; 1 for forward,
-                               0 for backward
-                   until       type of character search; 1 for a |t| or |T|
-                               character search, 0 for an |f| or |F|
-                               character search
-
-               This can be useful to save/restore a user's character search
-               from a script: >
-                       :let prevsearch = getcharsearch()
-                       :" Perform a command which clobbers user's search
-                       :call setcharsearch(prevsearch)
-<              Also see |getcharsearch()|.
-
-               Can also be used as a |method|: >
-                       SavedSearch()->setcharsearch()
-
-setcmdpos({pos})                                       *setcmdpos()*
-               Set the cursor position in the command line to byte position
-               {pos}.  The first position is 1.
-               Use |getcmdpos()| to obtain the current position.
-               Only works while editing the command line, thus you must use
-               |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='.  For
-               |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is
-               set after the command line is set to the expression.  For
-               |c_CTRL-R_=| it is set after evaluating the expression but
-               before inserting the resulting text.
-               When the number is too big the cursor is put at the end of the
-               line.  A number smaller than one has undefined results.
-               Returns FALSE when successful, TRUE when not editing the
-               command line.
-
-               Can also be used as a |method|: >
-                       GetPos()->setcmdpos()
-
-setcursorcharpos({lnum}, {col} [, {off}])              *setcursorcharpos()*
-setcursorcharpos({list})
-               Same as |cursor()| but uses the specified column number as the
-               character index instead of the byte index in the line.
-
-               Example:
-               With the text "여보세요" in line 4: >
-                       call setcursorcharpos(4, 3)
-<              positions the cursor on the third character '세'. >
-                       call cursor(4, 3)
-<              positions the cursor on the first character '여'.
-
-               Can also be used as a |method|: >
-                       GetCursorPos()->setcursorcharpos()
-
-
-setenv({name}, {val})                                          *setenv()*
-               Set environment variable {name} to {val}.  Example: >
-                       call setenv('HOME', '/home/myhome')
-
-<              When {val} is |v:null| the environment variable is deleted.
-               See also |expr-env|.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetPath()->setenv('PATH')
-
-setfperm({fname}, {mode})                              *setfperm()* *chmod*
-               Set the file permissions for {fname} to {mode}.
-               {mode} must be a string with 9 characters.  It is of the form
-               "rwxrwxrwx", where each group of "rwx" flags represent, in
-               turn, the permissions of the owner of the file, the group the
-               file belongs to, and other users.  A '-' character means the
-               permission is off, any other character means on.  Multi-byte
-               characters are not supported.
-
-               For example "rw-r-----" means read-write for the user,
-               readable by the group, not accessible by others.  "xx-x-----"
-               would do the same thing.
-
-               Returns non-zero for success, zero for failure.
-
-               Can also be used as a |method|: >
-                       GetFilename()->setfperm(mode)
-<
-               To read permissions see |getfperm()|.
-
-
-setline({lnum}, {text})                                        *setline()*
-               Set line {lnum} of the current buffer to {text}.  To insert
-               lines use |append()|. To set lines in another buffer use
-               |setbufline()|.  Any text properties in {lnum} are cleared.
-
-               {lnum} is used like with |getline()|.
-               When {lnum} is just below the last line the {text} will be
-               added below the last line.
-               {text} can be any type or a List of any type, each item is
-               converted to a String.
-
-               If this succeeds, FALSE is returned.  If this fails (most likely
-               because {lnum} is invalid) TRUE is returned.
-
-               Example: >
-                       :call setline(5, strftime("%c"))
-
-<              When {text} is a |List| then line {lnum} and following lines
-               will be set to the items in the list.  Example: >
-                       :call setline(5, ['aaa', 'bbb', 'ccc'])
-<              This is equivalent to: >
-                       :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
-                       :  call setline(n, l)
-                       :endfor
-
-<              Note: The '[ and '] marks are not set.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetText()->setline(lnum)
-
-setloclist({nr}, {list} [, {action} [, {what}]])               *setloclist()*
-               Create or replace or add to the location list for window {nr}.
-               {nr} can be the window number or the |window-ID|.
-               When {nr} is zero the current window is used.
-
-               For a location list window, the displayed location list is
-               modified.  For an invalid window number {nr}, -1 is returned.
-               Otherwise, same as |setqflist()|.
-               Also see |location-list|.
-
-               For {action} see |setqflist-action|.
-
-               If the optional {what} dictionary argument is supplied, then
-               only the items listed in {what} are set. Refer to |setqflist()|
-               for the list of supported keys in {what}.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetLoclist()->setloclist(winnr)
-
-setmatches({list} [, {win}])                           *setmatches()*
-               Restores a list of matches saved by |getmatches()| for the
-               current window.  Returns 0 if successful, otherwise -1.  All
-               current matches are cleared before the list is restored.  See
-               example for |getmatches()|.
-               If {win} is specified, use the window with this number or
-               window ID instead of the current window.
-
-               Can also be used as a |method|: >
-                       GetMatches()->setmatches()
-<
-                                                       *setpos()*
-setpos({expr}, {list})
-               Set the position for String {expr}.  Possible values:
-                       .       the cursor
-                       'x      mark x
-
-               {list} must be a |List| with four or five numbers:
-                   [bufnum, lnum, col, off]
-                   [bufnum, lnum, col, off, curswant]
-
-               "bufnum" is the buffer number.  Zero can be used for the
-               current buffer.  When setting an uppercase mark "bufnum" is
-               used for the mark position.  For other marks it specifies the
-               buffer to set the mark in.  You can use the |bufnr()| function
-               to turn a file name into a buffer number.
-               For setting the cursor and the ' mark "bufnum" is ignored,
-               since these are associated with a window, not a buffer.
-               Does not change the jumplist.
-
-               "lnum" and "col" are the position in the buffer.  The first
-               column is 1.  Use a zero "lnum" to delete a mark.  If "col" is
-               smaller than 1 then 1 is used. To use the character count
-               instead of the byte count, use |setcharpos()|.
-
-               The "off" number is only used when 'virtualedit' is set. Then
-               it is the offset in screen columns from the start of the
-               character.  E.g., a position within a <Tab> or after the last
-               character.
-
-               The "curswant" number is only used when setting the cursor
-               position.  It sets the preferred column for when moving the
-               cursor vertically.  When the "curswant" number is missing the
-               preferred column is not set.  When it is present and setting a
-               mark position it is not used.
-
-               Note that for '< and '> changing the line number may result in
-               the marks to be effectively be swapped, so that '< is always
-               before '>.
-
-               Returns 0 when the position could be set, -1 otherwise.
-               An error message is given if {expr} is invalid.
-
-               Also see |setcharpos()|, |getpos()| and |getcurpos()|.
-
-               This does not restore the preferred column for moving
-               vertically; if you set the cursor position with this, |j| and
-               |k| motions will jump to previous columns!  Use |cursor()| to
-               also set the preferred column.  Also see the "curswant" key in
-               |winrestview()|.
-
-               Can also be used as a |method|: >
-                       GetPosition()->setpos('.')
-
-setqflist({list} [, {action} [, {what}]])              *setqflist()*
-               Create or replace or add to the quickfix list.
-
-               If the optional {what} dictionary argument is supplied, then
-               only the items listed in {what} are set. The first {list}
-               argument is ignored.  See below for the supported items in
-               {what}.
-                                                       *setqflist-what*
-               When {what} is not present, the items in {list} are used.  Each
-               item must be a dictionary.  Non-dictionary items in {list} are
-               ignored.  Each dictionary item can contain the following
-               entries:
-
-                   bufnr       buffer number; must be the number of a valid
-                               buffer
-                   filename    name of a file; only used when "bufnr" is not
-                               present or it is invalid.
-                   module      name of a module; if given it will be used in
-                               quickfix error window instead of the filename.
-                   lnum        line number in the file
-                   pattern     search pattern used to locate the error
-                   col         column number
-                   vcol        when non-zero: "col" is visual column
-                               when zero: "col" is byte index
-                   nr          error number
-                   text        description of the error
-                   type        single-character error type, 'E', 'W', etc.
-                   valid       recognized error message
-
-               The "col", "vcol", "nr", "type" and "text" entries are
-               optional.  Either "lnum" or "pattern" entry can be used to
-               locate a matching error line.
-               If the "filename" and "bufnr" entries are not present or
-               neither the "lnum" or "pattern" entries are present, then the
-               item will not be handled as an error line.
-               If both "pattern" and "lnum" are present then "pattern" will
-               be used.
-               If the "valid" entry is not supplied, then the valid flag is
-               set when "bufnr" is a valid buffer or "filename" exists.
-               If you supply an empty {list}, the quickfix list will be
-               cleared.
-               Note that the list is not exactly the same as what
-               |getqflist()| returns.
-
-               {action} values:                *setqflist-action* *E927*
-               'a'     The items from {list} are added to the existing
-                       quickfix list. If there is no existing list, then a
-                       new list is created.
-
-               'r'     The items from the current quickfix list are replaced
-                       with the items from {list}.  This can also be used to
-                       clear the list: >
-                               :call setqflist([], 'r')
-<
-               'f'     All the quickfix lists in the quickfix stack are
-                       freed.
-
-               If {action} is not present or is set to ' ', then a new list
-               is created. The new quickfix list is added after the current
-               quickfix list in the stack and all the following lists are
-               freed. To add a new quickfix list at the end of the stack,
-               set "nr" in {what} to "$".
-
-               The following items can be specified in dictionary {what}:
-                   context     quickfix list context. See |quickfix-context|
-                   efm         errorformat to use when parsing text from
-                               "lines". If this is not present, then the
-                               'errorformat' option value is used.
-                               See |quickfix-parse|
-                   id          quickfix list identifier |quickfix-ID|
-                   idx         index of the current entry in the quickfix
-                               list specified by 'id' or 'nr'. If set to '$',
-                               then the last entry in the list is set as the
-                               current entry.  See |quickfix-index|
-                   items       list of quickfix entries. Same as the {list}
-                               argument.
-                   lines       use 'errorformat' to parse a list of lines and
-                               add the resulting entries to the quickfix list
-                               {nr} or {id}.  Only a |List| value is supported.
-                               See |quickfix-parse|
-                   nr          list number in the quickfix stack; zero
-                               means the current quickfix list and "$" means
-                               the last quickfix list.
-                   quickfixtextfunc
-                               function to get the text to display in the
-                               quickfix window.  The value can be the name of
-                               a function or a funcref or a lambda.  Refer to
-                               |quickfix-window-function| for an explanation
-                               of how to write the function and an example.
-                   title       quickfix list title text. See |quickfix-title|
-               Unsupported keys in {what} are ignored.
-               If the "nr" item is not present, then the current quickfix list
-               is modified. When creating a new quickfix list, "nr" can be
-               set to a value one greater than the quickfix stack size.
-               When modifying a quickfix list, to guarantee that the correct
-               list is modified, "id" should be used instead of "nr" to
-               specify the list.
-
-               Examples (See also |setqflist-examples|): >
-                  :call setqflist([], 'r', {'title': 'My search'})
-                  :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
-                  :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
-<
-               Returns zero for success, -1 for failure.
-
-               This function can be used to create a quickfix list
-               independent of the 'errorformat' setting.  Use a command like
-               `:cc 1` to jump to the first position.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetErrorlist()->setqflist()
-<
-                                                       *setreg()*
-setreg({regname}, {value} [, {options}])
-               Set the register {regname} to {value}.
-               If {regname} is "" or "@", the unnamed register '"' is used.
-               The {regname} argument is a string.  In |Vim9-script|
-               {regname} must be one character.
-
-               {value} may be any value returned by |getreg()| or
-               |getreginfo()|, including a |List| or |Dict|.
-               If {options} contains "a" or {regname} is upper case,
-               then the value is appended.
-
-               {options} can also contain a register type specification:
-                   "c" or "v"        |characterwise| mode
-                   "l" or "V"        |linewise| mode
-                   "b" or "<CTRL-V>" |blockwise-visual| mode
-               If a number immediately follows "b" or "<CTRL-V>" then this is
-               used as the width of the selection - if it is not specified
-               then the width of the block is set to the number of characters
-               in the longest line (counting a <Tab> as 1 character).
-
-               If {options} contains no register settings, then the default
-               is to use character mode unless {value} ends in a <NL> for
-               string {value} and linewise mode for list {value}. Blockwise
-               mode is never selected automatically.
-               Returns zero for success, non-zero for failure.
-
-                                                       *E883*
-               Note: you may not use |List| containing more than one item to
-                     set search and expression registers. Lists containing no
-                     items act like empty strings.
-
-               Examples: >
-                       :call setreg(v:register, @*)
-                       :call setreg('*', @%, 'ac')
-                       :call setreg('a', "1\n2\n3", 'b5')
-                       :call setreg('"', { 'points_to': 'a'})
-
-<              This example shows using the functions to save and restore a
-               register: >
-                       :let var_a = getreginfo()
-                       :call setreg('a', var_a)
-<              or: >
-                       :let var_a = getreg('a', 1, 1)
-                       :let var_amode = getregtype('a')
-                           ....
-                       :call setreg('a', var_a, var_amode)
-<              Note: you may not reliably restore register value
-               without using the third argument to |getreg()| as without it
-               newlines are represented as newlines AND Nul bytes are
-               represented as newlines as well, see |NL-used-for-Nul|.
-
-               You can also change the type of a register by appending
-               nothing: >
-                       :call setreg('a', '', 'al')
-
-<              Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetText()->setreg('a')
-
-settabvar({tabnr}, {varname}, {val})                   *settabvar()*
-               Set tab-local variable {varname} to {val} in tab page {tabnr}.
-               |t:var|
-               The {varname} argument is a string.
-               Note that autocommands are blocked, side effects may not be
-               triggered, e.g. when setting 'filetype'.
-               Note that the variable name without "t:" must be used.
-               Tabs are numbered starting with one.
-               This function is not available in the |sandbox|.
-
-               Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetValue()->settabvar(tab, name)
-
-settabwinvar({tabnr}, {winnr}, {varname}, {val})       *settabwinvar()*
-               Set option or local variable {varname} in window {winnr} to
-               {val}.
-               Tabs are numbered starting with one.  For the current tabpage
-               use |setwinvar()|.
-               {winnr} can be the window number or the |window-ID|.
-               When {winnr} is zero the current window is used.
-               Note that autocommands are blocked, side effects may not be
-               triggered, e.g. when setting 'filetype' or 'syntax'.
-               This also works for a global or local buffer option, but it
-               doesn't work for a global or local buffer variable.
-               For a local buffer option the global value is unchanged.
-               Note that the variable name without "w:" must be used.
-               Examples: >
-                       :call settabwinvar(1, 1, "&list", 0)
-                       :call settabwinvar(3, 2, "myvar", "foobar")
-<              This function is not available in the |sandbox|.
-
-               Can also be used as a |method|, the base is passed as the
-               fourth argument: >
-                       GetValue()->settabwinvar(tab, winnr, name)
-
-settagstack({nr}, {dict} [, {action}])                 *settagstack()*
-               Modify the tag stack of the window {nr} using {dict}.
-               {nr} can be the window number or the |window-ID|.
-
-               For a list of supported items in {dict}, refer to
-               |gettagstack()|. "curidx" takes effect before changing the tag
-               stack.
-                                                       *E962*
-               How the tag stack is modified depends on the {action}
-               argument:
-               - If {action} is not present or is set to 'r', then the tag
-                 stack is replaced.
-               - If {action} is set to 'a', then new entries from {dict} are
-                 pushed (added) onto the tag stack.
-               - If {action} is set to 't', then all the entries from the
-                 current entry in the tag stack or "curidx" in {dict} are
-                 removed and then new entries are pushed to the stack.
-
-               The current index is set to one after the length of the tag
-               stack after the modification.
-
-               Returns zero for success, -1 for failure.
-
-               Examples (for more examples see |tagstack-examples|):
-                   Empty the tag stack of window 3: >
-                       call settagstack(3, {'items' : []})
-
-<                  Save and restore the tag stack: >
-                       let stack = gettagstack(1003)
-                       " do something else
-                       call settagstack(1003, stack)
-                       unlet stack
-<
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetStack()->settagstack(winnr)
-
-setwinvar({winnr}, {varname}, {val})                   *setwinvar()*
-               Like |settabwinvar()| for the current tab page.
-               Examples: >
-                       :call setwinvar(1, "&list", 0)
-                       :call setwinvar(2, "myvar", "foobar")
-
-<              Can also be used as a |method|, the base is passed as the
-               third argument: >
-                       GetValue()->setwinvar(winnr, name)
-
-sha256({string})                                               *sha256()*
-               Returns a String with 64 hex characters, which is the SHA256
-               checksum of {string}.
-
-               Can also be used as a |method|: >
-                       GetText()->sha256()
-
-<              {only available when compiled with the |+cryptv| feature}
-
-shellescape({string} [, {special}])                    *shellescape()*
-               Escape {string} for use as a shell command argument.
-               When the 'shell' contains powershell (MS-Windows) or pwsh
-               (MS-Windows, Linux, and MacOS) then it will enclose {string}
-               in single quotes and will double up all internal single
-               quotes.
-               On MS-Windows, when 'shellslash' is not set, it will enclose
-               {string} in double quotes and double all double quotes within
-               {string}.
-               Otherwise it will enclose {string} in single quotes and
-               replace all "'" with "'\''".
-
-               When the {special} argument is present and it's a non-zero
-               Number or a non-empty String (|non-zero-arg|), then special
-               items such as "!", "%", "#" and "<cword>" will be preceded by
-               a backslash.  This backslash will be removed again by the |:!|
-               command.
-
-               The "!" character will be escaped (again with a |non-zero-arg|
-               {special}) when 'shell' contains "csh" in the tail.  That is
-               because for csh and tcsh "!" is used for history replacement
-               even when inside single quotes.
-
-               With a |non-zero-arg| {special} the <NL> character is also
-               escaped.  When 'shell' containing "csh" in the tail it's
-               escaped a second time.
-
-               The "\" character will be escaped when 'shell' contains "fish"
-               in the tail. That is because for fish "\" is used as an escape
-               character inside single quotes.
-
-               Example of use with a |:!| command: >
-                   :exe '!dir ' . shellescape(expand('<cfile>'), 1)
-<              This results in a directory listing for the file under the
-               cursor.  Example of use with |system()|: >
-                   :call system("chmod +w -- " . shellescape(expand("%")))
-<              See also |::S|.
-
-               Can also be used as a |method|: >
-                       GetCommand()->shellescape()
-
-shiftwidth([{col}])                                            *shiftwidth()*
-               Returns the effective value of 'shiftwidth'. This is the
-               'shiftwidth' value unless it is zero, in which case it is the
-               'tabstop' value.  This function was introduced with patch
-               7.3.694 in 2012, everybody should have it by now (however it
-               did not allow for the optional {col} argument until 8.1.542).
-
-               When there is one argument {col} this is used as column number
-               for which to return the 'shiftwidth' value. This matters for the
-               'vartabstop' feature. If the 'vartabstop' setting is enabled and
-               no {col} argument is given, column 1 will be assumed.
-
-               Can also be used as a |method|: >
-                       GetColumn()->shiftwidth()
-
-sign_ functions are documented here: |sign-functions-details|
-
-
-simplify({filename})                                   *simplify()*
-               Simplify the file name as much as possible without changing
-               the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
-               Unix) are not resolved.  If the first path component in
-               {filename} designates the current directory, this will be
-               valid for the result as well.  A trailing path separator is
-               not removed either. On Unix "//path" is unchanged, but
-               "///path" is simplified to "/path" (this follows the Posix
-               standard).
-               Example: >
-                       simplify("./dir/.././/file/") == "./file/"
-<              Note: The combination "dir/.." is only removed if "dir" is
-               a searchable directory or does not exist.  On Unix, it is also
-               removed when "dir" is a symbolic link within the same
-               directory.  In order to resolve all the involved symbolic
-               links before simplifying the path name, use |resolve()|.
-
-               Can also be used as a |method|: >
-                       GetName()->simplify()
-
-sin({expr})                                            *sin()*
-               Return the sine of {expr}, measured in radians, as a |Float|.
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo sin(100)
-<                      -0.506366 >
-                       :echo sin(-4.01)
-<                      0.763301
-
-               Can also be used as a |method|: >
-                       Compute()->sin()
-<
-               {only available when compiled with the |+float| feature}
-
-
-sinh({expr})                                           *sinh()*
-               Return the hyperbolic sine of {expr} as a |Float| in the range
-               [-inf, inf].
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo sinh(0.5)
-<                      0.521095 >
-                       :echo sinh(-0.9)
-<                      -1.026517
-
-               Can also be used as a |method|: >
-                       Compute()->sinh()
-<
-               {only available when compiled with the |+float| feature}
-
-
-slice({expr}, {start} [, {end}])                       *slice()*
-               Similar to using a |slice| "expr[start : end]", but "end" is
-               used exclusive.  And for a string the indexes are used as
-               character indexes instead of byte indexes, like in
-               |vim9script|.  Also, composing characters are not counted.
-               When {end} is omitted the slice continues to the last item.
-               When {end} is -1 the last item is omitted.
-
-               Can also be used as a |method|: >
-                       GetList()->slice(offset)
-
-
-sort({list} [, {func} [, {dict}]])                     *sort()* *E702*
-               Sort the items in {list} in-place.  Returns {list}.
-
-               If you want a list to remain unmodified make a copy first: >
-                       :let sortedlist = sort(copy(mylist))
-
-<              When {func} is omitted, is empty or zero, then sort() uses the
-               string representation of each item to sort on.  Numbers sort
-               after Strings, |Lists| after Numbers.  For sorting text in the
-               current buffer use |:sort|.
-
-               When {func} is given and it is '1' or 'i' then case is
-               ignored.
-
-               When {func} is given and it is 'l' then the current collation
-               locale is used for ordering. Implementation details: strcoll()
-               is used to compare strings. See |:language| check or set the
-               collation locale. |v:collate| can also be used to check the
-               current locale. Sorting using the locale typically ignores
-               case. Example: >
-                       " ö is sorted similarly to o with English locale.
-                       :language collate en_US.UTF8
-                       :echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
-<                      ['n', 'o', 'O', 'ö', 'p', 'z'] ~
->
-                       " ö is sorted after z with Swedish locale.
-                       :language collate sv_SE.UTF8
-                       :echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
-<                      ['n', 'o', 'O', 'p', 'z', 'ö'] ~
-               This does not work properly on Mac.
-
-               When {func} is given and it is 'n' then all items will be
-               sorted numerical (Implementation detail: this uses the
-               strtod() function to parse numbers, Strings, Lists, Dicts and
-               Funcrefs will be considered as being 0).
-
-               When {func} is given and it is 'N' then all items will be
-               sorted numerical. This is like 'n' but a string containing
-               digits will be used as the number they represent.
-
-               When {func} is given and it is 'f' then all items will be
-               sorted numerical. All values must be a Number or a Float.
-
-               When {func} is a |Funcref| or a function name, this function
-               is called to compare items.  The function is invoked with two
-               items as argument and must return zero if they are equal, 1 or
-               bigger if the first one sorts after the second one, -1 or
-               smaller if the first one sorts before the second one.
-
-               {dict} is for functions with the "dict" attribute.  It will be
-               used to set the local variable "self". |Dictionary-function|
-
-               The sort is stable, items which compare equal (as number or as
-               string) will keep their relative position. E.g., when sorting
-               on numbers, text strings will sort next to each other, in the
-               same order as they were originally.
-
-               Can also be used as a |method|: >
-                       mylist->sort()
-
-<              Also see |uniq()|.
-
-               Example: >
-                       func MyCompare(i1, i2)
-                          return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
-                       endfunc
-                       eval mylist->sort("MyCompare")
-<              A shorter compare version for this specific simple case, which
-               ignores overflow: >
-                       func MyCompare(i1, i2)
-                          return a:i1 - a:i2
-                       endfunc
-<              For a simple expression you can use a lambda: >
-                       eval mylist->sort({i1, i2 -> i1 - i2})
-<
-sound_clear()                                          *sound_clear()*
-               Stop playing all sounds.
-
-               On some Linux systems you may need the libcanberra-pulse
-               package, otherwise sound may not stop.
-
-               {only available when compiled with the |+sound| feature}
-
-                                                       *sound_playevent()*
-sound_playevent({name} [, {callback}])
-               Play a sound identified by {name}.  Which event names are
-               supported depends on the system.  Often the XDG sound names
-               are used.  On Ubuntu they may be found in
-               /usr/share/sounds/freedesktop/stereo.  Example: >
-                       call sound_playevent('bell')
-<              On MS-Windows, {name} can be SystemAsterisk, SystemDefault,
-               SystemExclamation, SystemExit, SystemHand, SystemQuestion,
-               SystemStart, SystemWelcome, etc.
-
-               When {callback} is specified it is invoked when the sound is
-               finished.  The first argument is the sound ID, the second
-               argument is the status:
-                       0       sound was played to the end
-                       1       sound was interrupted
-                       2       error occurred after sound started
-               Example: >
-                  func Callback(id, status)
-                    echomsg "sound " .. a:id .. " finished with " .. a:status
-                  endfunc
-                  call sound_playevent('bell', 'Callback')
-
-<              MS-Windows: {callback} doesn't work for this function.
-
-               Returns the sound ID, which can be passed to `sound_stop()`.
-               Returns zero if the sound could not be played.
-
-               Can also be used as a |method|: >
-                       GetSoundName()->sound_playevent()
-
-<              {only available when compiled with the |+sound| feature}
-
-                                                       *sound_playfile()*
-sound_playfile({path} [, {callback}])
-               Like `sound_playevent()` but play sound file {path}.  {path}
-               must be a full path.  On Ubuntu you may find files to play
-               with this command: >
-                   :!find /usr/share/sounds -type f | grep -v index.theme
-
-<              Can also be used as a |method|: >
-                       GetSoundPath()->sound_playfile()
-
-<              {only available when compiled with the |+sound| feature}
-
-
-sound_stop({id})                                       *sound_stop()*
-               Stop playing sound {id}.  {id} must be previously returned by
-               `sound_playevent()` or `sound_playfile()`.
-
-               On some Linux systems you may need the libcanberra-pulse
-               package, otherwise sound may not stop.
-
-               On MS-Windows, this does not work for event sound started by
-               `sound_playevent()`. To stop event sounds, use `sound_clear()`.
-
-               Can also be used as a |method|: >
-                       soundid->sound_stop()
-
-<              {only available when compiled with the |+sound| feature}
-
-                                                       *soundfold()*
-soundfold({word})
-               Return the sound-folded equivalent of {word}.  Uses the first
-               language in 'spelllang' for the current window that supports
-               soundfolding.  'spell' must be set.  When no sound folding is
-               possible the {word} is returned unmodified.
-               This can be used for making spelling suggestions.  Note that
-               the method can be quite slow.
-
-               Can also be used as a |method|: >
-                       GetWord()->soundfold()
-<
-                                                       *spellbadword()*
-spellbadword([{sentence}])
-               Without argument: The result is the badly spelled word under
-               or after the cursor.  The cursor is moved to the start of the
-               bad word.  When no bad word is found in the cursor line the
-               result is an empty string and the cursor doesn't move.
-
-               With argument: The result is the first word in {sentence} that
-               is badly spelled.  If there are no spelling mistakes the
-               result is an empty string.
-
-               The return value is a list with two items:
-               - The badly spelled word or an empty string.
-               - The type of the spelling error:
-                       "bad"           spelling mistake
-                       "rare"          rare word
-                       "local"         word only valid in another region
-                       "caps"          word should start with Capital
-               Example: >
-                       echo spellbadword("the quik brown fox")
-<                      ['quik', 'bad'] ~
-
-               The spelling information for the current window and the value
-               of 'spelllang' are used.
-
-               Can also be used as a |method|: >
-                       GetText()->spellbadword()
-<
-                                                       *spellsuggest()*
-spellsuggest({word} [, {max} [, {capital}]])
-               Return a |List| with spelling suggestions to replace {word}.
-               When {max} is given up to this number of suggestions are
-               returned.  Otherwise up to 25 suggestions are returned.
-
-               When the {capital} argument is given and it's non-zero only
-               suggestions with a leading capital will be given.  Use this
-               after a match with 'spellcapcheck'.
-
-               {word} can be a badly spelled word followed by other text.
-               This allows for joining two words that were split.  The
-               suggestions also include the following text, thus you can
-               replace a line.
-
-               {word} may also be a good word.  Similar words will then be
-               returned.  {word} itself is not included in the suggestions,
-               although it may appear capitalized.
-
-               The spelling information for the current window is used.  The
-               values of 'spelllang' and 'spellsuggest' are used.
-
-               Can also be used as a |method|: >
-                       GetWord()->spellsuggest()
-
-split({string} [, {pattern} [, {keepempty}]])                  *split()*
-               Make a |List| out of {string}.  When {pattern} is omitted or
-               empty each white-separated sequence of characters becomes an
-               item.
-               Otherwise the string is split where {pattern} matches,
-               removing the matched characters. 'ignorecase' is not used
-               here, add \c to ignore case. |/\c|
-               When the first or last item is empty it is omitted, unless the
-               {keepempty} argument is given and it's non-zero.
-               Other empty items are kept when {pattern} matches at least one
-               character or when {keepempty} is non-zero.
-               Example: >
-                       :let words = split(getline('.'), '\W\+')
-<              To split a string in individual characters: >
-                       :for c in split(mystring, '\zs')
-<              If you want to keep the separator you can also use '\zs' at
-               the end of the pattern: >
-                       :echo split('abc:def:ghi', ':\zs')
-<                      ['abc:', 'def:', 'ghi'] ~
-               Splitting a table where the first element can be empty: >
-                       :let items = split(line, ':', 1)
-<              The opposite function is |join()|.
-
-               Can also be used as a |method|: >
-                       GetString()->split()
-
-sqrt({expr})                                           *sqrt()*
-               Return the non-negative square root of Float {expr} as a
-               |Float|.
-               {expr} must evaluate to a |Float| or a |Number|.  When {expr}
-               is negative the result is NaN (Not a Number).
-               Examples: >
-                       :echo sqrt(100)
-<                      10.0 >
-                       :echo sqrt(-4.01)
-<                      nan
-               "nan" may be different, it depends on system libraries.
-
-               Can also be used as a |method|: >
-                       Compute()->sqrt()
-<
-               {only available when compiled with the |+float| feature}
-
-
-srand([{expr}])                                                *srand()*
-               Initialize seed used by |rand()|:
-               - If {expr} is not given, seed values are initialized by
-                 reading from /dev/urandom, if possible, or using time(NULL)
-                 a.k.a. epoch time otherwise; this only has second accuracy.
-               - If {expr} is given it must be a Number.  It is used to
-                 initialize the seed values.  This is useful for testing or
-                 when a predictable sequence is intended.
-
-               Examples: >
-                       :let seed = srand()
-                       :let seed = srand(userinput)
-                       :echo rand(seed)
-
-state([{what}])                                                *state()*
-               Return a string which contains characters indicating the
-               current state.  Mostly useful in callbacks that want to do
-               work that may not always be safe.  Roughly this works like:
-               - callback uses state() to check if work is safe to do.
-                 Yes: then do it right away.
-                 No:  add to work queue and add a |SafeState| and/or
-                      |SafeStateAgain| autocommand (|SafeState| triggers at
-                      toplevel, |SafeStateAgain| triggers after handling
-                      messages and callbacks).
-               - When SafeState or SafeStateAgain is triggered and executes
-                 your autocommand, check with `state()` if the work can be
-                 done now, and if yes remove it from the queue and execute.
-                 Remove the autocommand if the queue is now empty.
-               Also see |mode()|.
-
-               When {what} is given only characters in this string will be
-               added.  E.g, this checks if the screen has scrolled: >
-                       if state('s') == ''
-                          " screen has not scrolled
-<
-               These characters indicate the state, generally indicating that
-               something is busy:
-                   m   halfway a mapping, :normal command, feedkeys() or
-                       stuffed command
-                   o   operator pending, e.g. after |d|
-                   a   Insert mode autocomplete active
-                   x   executing an autocommand
-                   w   blocked on waiting, e.g. ch_evalexpr(), ch_read() and
-                       ch_readraw() when reading json
-                   S   not triggering SafeState or SafeStateAgain, e.g. after
-                       |f| or a count
-                   c   callback invoked, including timer (repeats for
-                       recursiveness up to "ccc")
-                   s   screen has scrolled for messages
-
-str2float({string} [, {quoted}])                               *str2float()*
-               Convert String {string} to a Float.  This mostly works the
-               same as when using a floating point number in an expression,
-               see |floating-point-format|.  But it's a bit more permissive.
-               E.g., "1e40" is accepted, while in an expression you need to
-               write "1.0e40".  The hexadecimal form "0x123" is also
-               accepted, but not others, like binary or octal.
-               When {quoted} is present and non-zero then embedded single
-               quotes before the dot are ignored, thus "1'000.0" is a
-               thousand.
-               Text after the number is silently ignored.
-               The decimal point is always '.', no matter what the locale is
-               set to.  A comma ends the number: "12,345.67" is converted to
-               12.0.  You can strip out thousands separators with
-               |substitute()|: >
-                       let f = str2float(substitute(text, ',', '', 'g'))
-<
-               Can also be used as a |method|: >
-                       let f = text->substitute(',', '', 'g')->str2float()
-<
-               {only available when compiled with the |+float| feature}
-
-str2list({string} [, {utf8}])                                  *str2list()*
-               Return a list containing the number values which represent
-               each character in String {string}.  Examples: >
-                       str2list(" ")           returns [32]
-                       str2list("ABC")         returns [65, 66, 67]
-<              |list2str()| does the opposite.
-
-               When {utf8} is omitted or zero, the current 'encoding' is used.
-               When {utf8} is TRUE, always treat the String as UTF-8
-               characters.  With UTF-8 composing characters are handled
-               properly: >
-                       str2list("á")         returns [97, 769]
-
-<              Can also be used as a |method|: >
-                       GetString()->str2list()
-
-
-str2nr({string} [, {base} [, {quoted}]])                       *str2nr()*
-               Convert string {string} to a number.
-               {base} is the conversion base, it can be 2, 8, 10 or 16.
-               When {quoted} is present and non-zero then embedded single
-               quotes are ignored, thus "1'000'000" is a million.
-
-               When {base} is omitted base 10 is used.  This also means that
-               a leading zero doesn't cause octal conversion to be used, as
-               with the default String to Number conversion.  Example: >
-                       let nr = str2nr('0123')
-<
-               When {base} is 16 a leading "0x" or "0X" is ignored.  With a
-               different base the result will be zero.  Similarly, when
-               {base} is 8 a leading "0", "0o" or "0O" is ignored, and when
-               {base} is 2 a leading "0b" or "0B" is ignored.
-               Text after the number is silently ignored.
-
-               Can also be used as a |method|: >
-                       GetText()->str2nr()
-
-
-strcharlen({string})                                   *strcharlen()*
-               The result is a Number, which is the number of characters
-               in String {string}.  Composing characters are ignored.
-               |strchars()| can count the number of characters, counting
-               composing characters separately.
-
-               Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
-
-               Can also be used as a |method|: >
-                       GetText()->strcharlen()
-
-
-strcharpart({src}, {start} [, {len} [, {skipcc}]])             *strcharpart()*
-               Like |strpart()| but using character index and length instead
-               of byte index and length.
-               When {skipcc} is omitted or zero, composing characters are
-               counted separately.
-               When {skipcc} set to 1, Composing characters are ignored,
-               similar to  |slice()|.
-               When a character index is used where a character does not
-               exist it is omitted and counted as one character.  For
-               example: >
-                       strcharpart('abc', -1, 2)
-<              results in 'a'.
-
-               Can also be used as a |method|: >
-                       GetText()->strcharpart(5)
-
-
-strchars({string} [, {skipcc}])                                        *strchars()*
-               The result is a Number, which is the number of characters
-               in String {string}.
-               When {skipcc} is omitted or zero, composing characters are
-               counted separately.
-               When {skipcc} set to 1, Composing characters are ignored.
-               |strcharlen()| always does this.
-
-               Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
-
-               {skipcc} is only available after 7.4.755.  For backward
-               compatibility, you can define a wrapper function: >
-                   if has("patch-7.4.755")
-                     function s:strchars(str, skipcc)
-                       return strchars(a:str, a:skipcc)
-                     endfunction
-                   else
-                     function s:strchars(str, skipcc)
-                       if a:skipcc
-                         return strlen(substitute(a:str, ".", "x", "g"))
-                       else
-                         return strchars(a:str)
-                       endif
-                     endfunction
-                   endif
-<
-               Can also be used as a |method|: >
-                       GetText()->strchars()
-
-strdisplaywidth({string} [, {col}])                    *strdisplaywidth()*
-               The result is a Number, which is the number of display cells
-               String {string} occupies on the screen when it starts at {col}
-               (first column is zero).  When {col} is omitted zero is used.
-               Otherwise it is the screen column where to start.  This
-               matters for Tab characters.
-               The option settings of the current window are used.  This
-               matters for anything that's displayed differently, such as
-               'tabstop' and 'display'.
-               When {string} contains characters with East Asian Width Class
-               Ambiguous, this function's return value depends on 'ambiwidth'.
-               Also see |strlen()|, |strwidth()| and |strchars()|.
-
-               Can also be used as a |method|: >
-                       GetText()->strdisplaywidth()
-
-strftime({format} [, {time}])                          *strftime()*
-               The result is a String, which is a formatted date and time, as
-               specified by the {format} string.  The given {time} is used,
-               or the current time if no time is given.  The accepted
-               {format} depends on your system, thus this is not portable!
-               See the manual page of the C function strftime() for the
-               format.  The maximum length of the result is 80 characters.
-               See also |localtime()|, |getftime()| and |strptime()|.
-               The language can be changed with the |:language| command.
-               Examples: >
-                 :echo strftime("%c")             Sun Apr 27 11:49:23 1997
-                 :echo strftime("%Y %b %d %X")    1997 Apr 27 11:53:25
-                 :echo strftime("%y%m%d %T")      970427 11:53:55
-                 :echo strftime("%H:%M")          11:55
-                 :echo strftime("%c", getftime("file.c"))
-                                                  Show mod time of file.c.
-<              Not available on all systems.  To check use: >
-                       :if exists("*strftime")
-
-<              Can also be used as a |method|: >
-                       GetFormat()->strftime()
-
-strgetchar({str}, {index})                             *strgetchar()*
-               Get character {index} from {str}.  This uses a character
-               index, not a byte index.  Composing characters are considered
-               separate characters here.
-               Also see |strcharpart()| and |strchars()|.
-
-               Can also be used as a |method|: >
-                       GetText()->strgetchar(5)
-
-stridx({haystack}, {needle} [, {start}])               *stridx()*
-               The result is a Number, which gives the byte index in
-               {haystack} of the first occurrence of the String {needle}.
-               If {start} is specified, the search starts at index {start}.
-               This can be used to find a second match: >
-                       :let colon1 = stridx(line, ":")
-                       :let colon2 = stridx(line, ":", colon1 + 1)
-<              The search is done case-sensitive.
-               For pattern searches use |match()|.
-               -1 is returned if the {needle} does not occur in {haystack}.
-               See also |strridx()|.
-               Examples: >
-                 :echo stridx("An Example", "Example")      3
-                 :echo stridx("Starting point", "Start")    0
-                 :echo stridx("Starting point", "start")   -1
-<                                              *strstr()* *strchr()*
-               stridx() works similar to the C function strstr().  When used
-               with a single character it works similar to strchr().
-
-               Can also be used as a |method|: >
-                       GetHaystack()->stridx(needle)
-<
-                                                       *string()*
-string({expr}) Return {expr} converted to a String.  If {expr} is a Number,
-               Float, String, Blob or a composition of them, then the result
-               can be parsed back with |eval()|.
-                       {expr} type     result ~
-                       String          'string' (single quotes are doubled)
-                       Number          123
-                       Float           123.123456 or 1.123456e8
-                       Funcref         function('name')
-                       Blob            0z00112233.44556677.8899
-                       List            [item, item]
-                       Dictionary      {key: value, key: value}
-
-               When a |List| or |Dictionary| has a recursive reference it is
-               replaced by "[...]" or "{...}".  Using eval() on the result
-               will then fail.
-
-               Can also be used as a |method|: >
-                       mylist->string()
-
-<              Also see |strtrans()|.
-
-
-strlen({string})                                               *strlen()*
-               The result is a Number, which is the length of the String
-               {string} in bytes.
-               If the argument is a Number it is first converted to a String.
-               For other types an error is given.
-               If you want to count the number of multibyte characters use
-               |strchars()|.
-               Also see |len()|, |strdisplaywidth()| and |strwidth()|.
-
-               Can also be used as a |method|: >
-                       GetString()->strlen()
-
-strpart({src}, {start} [, {len} [, {chars}]])                  *strpart()*
-               The result is a String, which is part of {src}, starting from
-               byte {start}, with the byte length {len}.
-               When {chars} is present and TRUE then {len} is the number of
-               characters positions (composing characters are not counted
-               separately, thus "1" means one base character and any
-               following composing characters).
-               To count {start} as characters instead of bytes use
-               |strcharpart()|.
-
-               When bytes are selected which do not exist, this doesn't
-               result in an error, the bytes are simply omitted.
-               If {len} is missing, the copy continues from {start} till the
-               end of the {src}. >
-                       strpart("abcdefg", 3, 2)    == "de"
-                       strpart("abcdefg", -2, 4)   == "ab"
-                       strpart("abcdefg", 5, 4)    == "fg"
-                       strpart("abcdefg", 3)       == "defg"
-
-<              Note: To get the first character, {start} must be 0.  For
-               example, to get the character under the cursor: >
-                       strpart(getline("."), col(".") - 1, 1, v:true)
-<
-               Can also be used as a |method|: >
-                       GetText()->strpart(5)
-
-strptime({format}, {timestring})                               *strptime()*
-               The result is a Number, which is a unix timestamp representing
-               the date and time in {timestring}, which is expected to match
-               the format specified in {format}.
-
-               The accepted {format} depends on your system, thus this is not
-               portable!  See the manual page of the C function strptime()
-               for the format.  Especially avoid "%c".  The value of $TZ also
-               matters.
-
-               If the {timestring} cannot be parsed with {format} zero is
-               returned.  If you do not know the format of {timestring} you
-               can try different {format} values until you get a non-zero
-               result.
-
-               See also |strftime()|.
-               Examples: >
-                 :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
-<                862156163 >
-                 :echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55"))
-<                Sun Apr 27 11:53:55 1997 >
-                 :echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600)
-<                Sun Apr 27 12:53:55 1997
-
-               Can also be used as a |method|: >
-                       GetFormat()->strptime(timestring)
-<
-               Not available on all systems.  To check use: >
-                       :if exists("*strptime")
-
-strridx({haystack}, {needle} [, {start}])                      *strridx()*
-               The result is a Number, which gives the byte index in
-               {haystack} of the last occurrence of the String {needle}.
-               When {start} is specified, matches beyond this index are
-               ignored.  This can be used to find a match before a previous
-               match: >
-                       :let lastcomma = strridx(line, ",")
-                       :let comma2 = strridx(line, ",", lastcomma - 1)
-<              The search is done case-sensitive.
-               For pattern searches use |match()|.
-               -1 is returned if the {needle} does not occur in {haystack}.
-               If the {needle} is empty the length of {haystack} is returned.
-               See also |stridx()|.  Examples: >
-                 :echo strridx("an angry armadillo", "an")          3
-<                                                      *strrchr()*
-               When used with a single character it works similar to the C
-               function strrchr().
-
-               Can also be used as a |method|: >
-                       GetHaystack()->strridx(needle)
-
-strtrans({string})                                     *strtrans()*
-               The result is a String, which is {string} with all unprintable
-               characters translated into printable characters |'isprint'|.
-               Like they are shown in a window.  Example: >
-                       echo strtrans(@a)
-<              This displays a newline in register a as "^@" instead of
-               starting a new line.
-
-               Can also be used as a |method|: >
-                       GetString()->strtrans()
-
-strwidth({string})                                     *strwidth()*
-               The result is a Number, which is the number of display cells
-               String {string} occupies.  A Tab character is counted as one
-               cell, alternatively use |strdisplaywidth()|.
-               When {string} contains characters with East Asian Width Class
-               Ambiguous, this function's return value depends on 'ambiwidth'.
-               Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
-
-               Can also be used as a |method|: >
-                       GetString()->strwidth()
-
-submatch({nr} [, {list}])                      *submatch()* *E935*
-               Only for an expression in a |:substitute| command or
-               substitute() function.
-               Returns the {nr}'th submatch of the matched text.  When {nr}
-               is 0 the whole matched text is returned.
-               Note that a NL in the string can stand for a line break of a
-               multi-line match or a NUL character in the text.
-               Also see |sub-replace-expression|.
-
-               If {list} is present and non-zero then submatch() returns
-               a list of strings, similar to |getline()| with two arguments.
-               NL characters in the text represent NUL characters in the
-               text.
-               Only returns more than one item for |:substitute|, inside
-               |substitute()| this list will always contain one or zero
-               items, since there are no real line breaks.
-
-               When substitute() is used recursively only the submatches in
-               the current (deepest) call can be obtained.
-
-               Examples: >
-                       :s/\d\+/\=submatch(0) + 1/
-                       :echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
-<              This finds the first number in the line and adds one to it.
-               A line break is included as a newline character.
-
-               Can also be used as a |method|: >
-                       GetNr()->submatch()
-
-substitute({string}, {pat}, {sub}, {flags})            *substitute()*
-               The result is a String, which is a copy of {string}, in which
-               the first match of {pat} is replaced with {sub}.
-               When {flags} is "g", all matches of {pat} in {string} are
-               replaced.  Otherwise {flags} should be "".
-
-               This works like the ":substitute" command (without any flags).
-               But the matching with {pat} is always done like the 'magic'
-               option is set and 'cpoptions' is empty (to make scripts
-               portable).  'ignorecase' is still relevant, use |/\c| or |/\C|
-               if you want to ignore or match case and ignore 'ignorecase'.
-               'smartcase' is not used.  See |string-match| for how {pat} is
-               used.
-
-               A "~" in {sub} is not replaced with the previous {sub}.
-               Note that some codes in {sub} have a special meaning
-               |sub-replace-special|.  For example, to replace something with
-               "\n" (two characters), use "\\\\n" or '\\n'.
-
-               When {pat} does not match in {string}, {string} is returned
-               unmodified.
-
-               Example: >
-                  :let &path = substitute(&path, ",\\=[^,]*$", "", "")
-<              This removes the last component of the 'path' option. >
-                  :echo substitute("testing", ".*", "\\U\\0", "")
-<              results in "TESTING".
-
-               When {sub} starts with "\=", the remainder is interpreted as
-               an expression. See |sub-replace-expression|.  Example: >
-                  :echo substitute(s, '%\(\x\x\)',
-                          \ '\=nr2char("0x" . submatch(1))', 'g')
-
-<              When {sub} is a Funcref that function is called, with one
-               optional argument.  Example: >
-                  :echo substitute(s, '%\(\x\x\)', SubNr, 'g')
-<              The optional argument is a list which contains the whole
-               matched string and up to nine submatches, like what
-               |submatch()| returns.  Example: >
-                  :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
-
-<              Can also be used as a |method|: >
-                       GetString()->substitute(pat, sub, flags)
-
-swapinfo({fname})                                      *swapinfo()*
-               The result is a dictionary, which holds information about the
-               swapfile {fname}. The available fields are:
-                       version Vim version
-                       user    user name
-                       host    host name
-                       fname   original file name
-                       pid     PID of the Vim process that created the swap
-                               file
-                       mtime   last modification time in seconds
-                       inode   Optional: INODE number of the file
-                       dirty   1 if file was modified, 0 if not
-               Note that "user" and "host" are truncated to at most 39 bytes.
-               In case of failure an "error" item is added with the reason:
-                       Cannot open file: file not found or in accessible
-                       Cannot read file: cannot read first block
-                       Not a swap file: does not contain correct block ID
-                       Magic number mismatch: Info in first block is invalid
-
-               Can also be used as a |method|: >
-                       GetFilename()->swapinfo()
-
-swapname({buf})                                                *swapname()*
-               The result is the swap file path of the buffer {expr}.
-               For the use of {buf}, see |bufname()| above.
-               If buffer {buf} is the current buffer, the result is equal to
-               |:swapname| (unless there is no swap file).
-               If buffer {buf} has no swap file, returns an empty string.
-
-               Can also be used as a |method|: >
-                       GetBufname()->swapname()
-
-synID({lnum}, {col}, {trans})                          *synID()*
-               The result is a Number, which is the syntax ID at the position
-               {lnum} and {col} in the current window.
-               The syntax ID can be used with |synIDattr()| and
-               |synIDtrans()| to obtain syntax information about text.
-
-               {col} is 1 for the leftmost column, {lnum} is 1 for the first
-               line.  'synmaxcol' applies, in a longer line zero is returned.
-               Note that when the position is after the last character,
-               that's where the cursor can be in Insert mode, synID() returns
-               zero.  {lnum} is used like with |getline()|.
-
-               When {trans} is |TRUE|, transparent items are reduced to the
-               item that they reveal.  This is useful when wanting to know
-               the effective color.  When {trans} is |FALSE|, the transparent
-               item is returned.  This is useful when wanting to know which
-               syntax item is effective (e.g. inside parens).
-               Warning: This function can be very slow.  Best speed is
-               obtained by going through the file in forward direction.
-
-               Example (echoes the name of the syntax item under the cursor): >
-                       :echo synIDattr(synID(line("."), col("."), 1), "name")
-<
-
-synIDattr({synID}, {what} [, {mode}])                  *synIDattr()*
-               The result is a String, which is the {what} attribute of
-               syntax ID {synID}.  This can be used to obtain information
-               about a syntax item.
-               {mode} can be "gui", "cterm" or "term", to get the attributes
-               for that mode.  When {mode} is omitted, or an invalid value is
-               used, the attributes for the currently active highlighting are
-               used (GUI, cterm or term).
-               Use synIDtrans() to follow linked highlight groups.
-               {what}          result
-               "name"          the name of the syntax item
-               "fg"            foreground color (GUI: color name used to set
-                               the color, cterm: color number as a string,
-                               term: empty string)
-               "bg"            background color (as with "fg")
-               "font"          font name (only available in the GUI)
-                               |highlight-font|
-               "sp"            special color for the GUI (as with "fg")
-                               |highlight-guisp|
-               "ul"            underline color for cterm: number as a string
-               "fg#"           like "fg", but for the GUI and the GUI is
-                               running the name in "#RRGGBB" form
-               "bg#"           like "fg#" for "bg"
-               "sp#"           like "fg#" for "sp"
-               "bold"          "1" if bold
-               "italic"        "1" if italic
-               "reverse"       "1" if reverse
-               "inverse"       "1" if inverse (= reverse)
-               "standout"      "1" if standout
-               "underline"     "1" if underlined
-               "undercurl"     "1" if undercurled
-               "strike"        "1" if strikethrough
-
-               Example (echoes the color of the syntax item under the
-               cursor): >
-       :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
-<
-               Can also be used as a |method|: >
-       :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
-
-
-synIDtrans({synID})                                    *synIDtrans()*
-               The result is a Number, which is the translated syntax ID of
-               {synID}.  This is the syntax group ID of what is being used to
-               highlight the character.  Highlight links given with
-               ":highlight link" are followed.
-
-               Can also be used as a |method|: >
-       :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
-
-synconcealed({lnum}, {col})                            *synconcealed()*
-               The result is a |List| with currently three items:
-               1. The first item in the list is 0 if the character at the
-                  position {lnum} and {col} is not part of a concealable
-                  region, 1 if it is.  {lnum} is used like with |getline()|.
-               2. The second item in the list is a string. If the first item
-                  is 1, the second item contains the text which will be
-                  displayed in place of the concealed text, depending on the
-                  current setting of 'conceallevel' and 'listchars'.
-               3. The third and final item in the list is a number
-                  representing the specific syntax region matched in the
-                  line. When the character is not concealed the value is
-                  zero. This allows detection of the beginning of a new
-                  concealable region if there are two consecutive regions
-                  with the same replacement character.  For an example, if
-                  the text is "123456" and both "23" and "45" are concealed
-                  and replaced by the character "X", then:
-                       call                    returns ~
-                       synconcealed(lnum, 1)   [0, '', 0]
-                       synconcealed(lnum, 2)   [1, 'X', 1]
-                       synconcealed(lnum, 3)   [1, 'X', 1]
-                       synconcealed(lnum, 4)   [1, 'X', 2]
-                       synconcealed(lnum, 5)   [1, 'X', 2]
-                       synconcealed(lnum, 6)   [0, '', 0]
-
-
-synstack({lnum}, {col})                                        *synstack()*
-               Return a |List|, which is the stack of syntax items at the
-               position {lnum} and {col} in the current window.  {lnum} is
-               used like with |getline()|.  Each item in the List is an ID
-               like what |synID()| returns.
-               The first item in the List is the outer region, following are
-               items contained in that one.  The last one is what |synID()|
-               returns, unless not the whole item is highlighted or it is a
-               transparent item.
-               This function is useful for debugging a syntax file.
-               Example that shows the syntax stack under the cursor: >
-                       for id in synstack(line("."), col("."))
-                          echo synIDattr(id, "name")
-                       endfor
-<              When the position specified with {lnum} and {col} is invalid
-               nothing is returned.  The position just after the last
-               character in a line and the first column in an empty line are
-               valid positions.
-
-system({expr} [, {input}])                             *system()* *E677*
-               Get the output of the shell command {expr} as a |String|.  See
-               |systemlist()| to get the output as a |List|.
-
-               When {input} is given and is a |String| this string is written
-               to a file and passed as stdin to the command.  The string is
-               written as-is, you need to take care of using the correct line
-               separators yourself.
-               If {input} is given and is a |List| it is written to the file
-               in a way |writefile()| does with {binary} set to "b" (i.e.
-               with a newline between each list item with newlines inside
-               list items converted to NULs).
-               When {input} is given and is a number that is a valid id for
-               an existing buffer then the content of the buffer is written
-               to the file line by line, each line terminated by a NL and
-               NULs characters where the text has a NL.
-
-               Pipes are not used, the 'shelltemp' option is not used.
-
-               When prepended by |:silent| the terminal will not be set to
-               cooked mode.  This is meant to be used for commands that do
-               not need the user to type.  It avoids stray characters showing
-               up on the screen which require |CTRL-L| to remove. >
-                       :silent let f = system('ls *.vim')
-<
-               Note: Use |shellescape()| or |::S| with |expand()| or
-               |fnamemodify()| to escape special characters in a command
-               argument.  Newlines in {expr} may cause the command to fail.
-               The characters in 'shellquote' and 'shellxquote' may also
-               cause trouble.
-               This is not to be used for interactive commands.
-
-               The result is a String.  Example: >
-                   :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:
-       'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
-               ({tmp} is an automatically generated file name).
-               For Unix, braces are put around {expr} to allow for
-               concatenated commands.
-
-               The command will be executed in "cooked" mode, so that a
-               CTRL-C will interrupt the command (on Unix at least).
-
-               The resulting error code can be found in |v:shell_error|.
-               This function will fail in |restricted-mode|.
-
-               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.
-
-               Can also be used as a |method|: >
-                       :echo GetCmd()->system()
-
-
-systemlist({expr} [, {input}])                         *systemlist()*
-               Same as |system()|, but returns a |List| with lines (parts of
-               output separated by NL) with NULs transformed into NLs. Output
-               is the same as |readfile()| will output with {binary} argument
-               set to "b", except that there is no extra empty item when the
-               result ends in a NL.
-               Note that on MS-Windows you may get trailing CR characters.
-
-               To see the difference between "echo hello" and "echo -n hello"
-               use |system()| and |split()|: >
-                       echo system('echo hello')->split('\n', 1)
-<
-               Returns an empty string on error.
-
-               Can also be used as a |method|: >
-                       :echo GetCmd()->systemlist()
-
-
-tabpagebuflist([{arg}])                                        *tabpagebuflist()*
-               The result is a |List|, where each item is the number of the
-               buffer associated with each window in the current tab page.
-               {arg} specifies the number of the tab page to be used. When
-               omitted the current tab page is used.
-               When {arg} is invalid the number zero is returned.
-               To get a list of all buffers in all tabs use this: >
-                       let buflist = []
-                       for i in range(tabpagenr('$'))
-                          call extend(buflist, tabpagebuflist(i + 1))
-                       endfor
-<              Note that a buffer may appear in more than one window.
-
-               Can also be used as a |method|: >
-                       GetTabpage()->tabpagebuflist()
-
-tabpagenr([{arg}])                                     *tabpagenr()*
-               The result is a Number, which is the number of the current
-               tab page.  The first tab page has number 1.
-
-               The optional argument {arg} supports the following values:
-                       $       the number of the last tab page (the tab page
-                               count).
-                       #       the number of the last accessed tab page
-                               (where |g<Tab>| goes to). if there is no
-                               previous tab page 0 is returned.
-               The number can be used with the |:tab| command.
-
-
-tabpagewinnr({tabarg} [, {arg}])                       *tabpagewinnr()*
-               Like |winnr()| but for tab page {tabarg}.
-               {tabarg} specifies the number of tab page to be used.
-               {arg} is used like with |winnr()|:
-               - When omitted the current window number is returned.  This is
-                 the window which will be used when going to this tab page.
-               - When "$" the number of windows is returned.
-               - When "#" the previous window nr is returned.
-               Useful examples: >
-                   tabpagewinnr(1)         " current window of tab page 1
-                   tabpagewinnr(4, '$')    " number of windows in tab page 4
-<              When {tabarg} is invalid zero is returned.
-
-               Can also be used as a |method|: >
-                       GetTabpage()->tabpagewinnr()
-<
-                                                       *tagfiles()*
-tagfiles()     Returns a |List| with the file names used to search for tags
-               for the current buffer.  This is the 'tags' option expanded.
-
-
-taglist({expr} [, {filename}])                         *taglist()*
-               Returns a |List| of tags matching the regular expression {expr}.
-
-               If {filename} is passed it is used to prioritize the results
-               in the same way that |:tselect| does. See |tag-priority|.
-               {filename} should be the full path of the file.
-
-               Each list item is a dictionary with at least the following
-               entries:
-                       name            Name of the tag.
-                       filename        Name of the file where the tag is
-                                       defined.  It is either relative to the
-                                       current directory or a full path.
-                       cmd             Ex command used to locate the tag in
-                                       the file.
-                       kind            Type of the tag.  The value for this
-                                       entry depends on the language specific
-                                       kind values.  Only available when
-                                       using a tags file generated by
-                                       Exuberant ctags or hdrtag.
-                       static          A file specific tag.  Refer to
-                                       |static-tag| for more information.
-               More entries may be present, depending on the content of the
-               tags file: access, implementation, inherits and signature.
-               Refer to the ctags documentation for information about these
-               fields.  For C code the fields "struct", "class" and "enum"
-               may appear, they give the name of the entity the tag is
-               contained in.
-
-               The ex-command "cmd" can be either an ex search pattern, a
-               line number or a line number followed by a byte number.
-
-               If there are no matching tags, then an empty list is returned.
-
-               To get an exact tag match, the anchors '^' and '$' should be
-               used in {expr}.  This also make the function work faster.
-               Refer to |tag-regexp| for more information about the tag
-               search regular expression pattern.
-
-               Refer to |'tags'| for information about how the tags file is
-               located by Vim. Refer to |tags-file-format| for the format of
-               the tags file generated by the different ctags tools.
-
-               Can also be used as a |method|: >
-                       GetTagpattern()->taglist()
-
-tan({expr})                                            *tan()*
-               Return the tangent of {expr}, measured in radians, as a |Float|
-               in the range [-inf, inf].
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo tan(10)
-<                      0.648361 >
-                       :echo tan(-4.01)
-<                      -1.181502
-
-               Can also be used as a |method|: >
-                       Compute()->tan()
-<
-               {only available when compiled with the |+float| feature}
-
-
-tanh({expr})                                           *tanh()*
-               Return the hyperbolic tangent of {expr} as a |Float| in the
-               range [-1, 1].
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       :echo tanh(0.5)
-<                      0.462117 >
-                       :echo tanh(-1)
-<                      -0.761594
-
-               Can also be used as a |method|: >
-                       Compute()->tanh()
-<
-               {only available when compiled with the |+float| feature}
-
-
-tempname()                                     *tempname()* *temp-file-name*
-               The result is a String, which is the name of a file that
-               doesn't exist.  It can be used for a temporary file.  The name
-               is different for at least 26 consecutive calls.  Example: >
-                       :let tmpfile = tempname()
-                       :exe "redir > " . tmpfile
-<              For Unix, the file will be in a private directory |tempfile|.
-               For MS-Windows forward slashes are used when the 'shellslash'
-               option is set, or when 'shellcmdflag' starts with '-' and
-               'shell' does not contain powershell or pwsh.
-
-
-term_ functions are documented here: |terminal-function-details|
-
-
-terminalprops()                                                *terminalprops()*
-               Returns a |Dictionary| with properties of the terminal that Vim
-               detected from the response to |t_RV| request.  See
-               |v:termresponse| for the response itself.  If |v:termresponse|
-               is empty most values here will be 'u' for unknown.
-                  cursor_style         whether sending |t_RS| works  **
-                  cursor_blink_mode    whether sending |t_RC| works  **
-                  underline_rgb        whether |t_8u| works **
-                  mouse                mouse type supported
-
-               ** value 'u' for unknown, 'y' for yes, 'n' for no
-
-               If the |+termresponse| feature is missing then the result is
-               an empty dictionary.
-
-               If "cursor_style" is 'y' then |t_RS| will be sent to request the
-               current cursor style.
-               If "cursor_blink_mode" is 'y' then |t_RC| will be sent to
-               request the cursor blink status.
-               "cursor_style" and "cursor_blink_mode" are also set if |t_u7|
-               is not empty, Vim will detect the working of sending |t_RS|
-               and |t_RC| on startup.
-
-               When "underline_rgb" is not 'y', then |t_8u| will be made empty.
-               This avoids sending it to xterm, which would clear the colors.
-
-               For "mouse" the value 'u' is unknown
-
-               Also see:
-               - 'ambiwidth' - detected by using |t_u7|.
-               - |v:termstyleresp| and |v:termblinkresp| for the response to
-                 |t_RS| and |t_RC|.
-
-
-test_ functions are documented here: |test-functions-details|
-
-
-                                                       *timer_info()*
-timer_info([{id}])
-               Return a list with information about timers.
-               When {id} is given only information about this timer is
-               returned.  When timer {id} does not exist an empty list is
-               returned.
-               When {id} is omitted information about all timers is returned.
-
-               For each timer the information is stored in a |Dictionary| with
-               these items:
-                   "id"            the timer ID
-                   "time"          time the timer was started with
-                   "remaining"     time until the timer fires
-                   "repeat"        number of times the timer will still fire;
-                                   -1 means forever
-                   "callback"      the callback
-                   "paused"        1 if the timer is paused, 0 otherwise
-
-               Can also be used as a |method|: >
-                       GetTimer()->timer_info()
-
-<              {only available when compiled with the |+timers| feature}
-
-timer_pause({timer}, {paused})                         *timer_pause()*
-               Pause or unpause a timer.  A paused timer does not invoke its
-               callback when its time expires.  Unpausing a timer may cause
-               the callback to be invoked almost immediately if enough time
-               has passed.
-
-               Pausing a timer is useful to avoid the callback to be called
-               for a short time.
-
-               If {paused} evaluates to a non-zero Number or a non-empty
-               String, then the timer is paused, otherwise it is unpaused.
-               See |non-zero-arg|.
-
-               Can also be used as a |method|: >
-                       GetTimer()->timer_pause(1)
-
-<              {only available when compiled with the |+timers| feature}
-
-                                               *timer_start()* *timer* *timers*
-timer_start({time}, {callback} [, {options}])
-               Create a timer and return the timer ID.
-
-               {time} is the waiting time in milliseconds. This is the
-               minimum time before invoking the callback.  When the system is
-               busy or Vim is not waiting for input the time will be longer.
-
-               {callback} is the function to call.  It can be the name of a
-               function or a |Funcref|.  It is called with one argument, which
-               is the timer ID.  The callback is only invoked when Vim is
-               waiting for input.
-               If you want to show a message look at |popup_notification()|
-               to avoid interfering with what the user is doing.
-
-               {options} is a dictionary.  Supported entries:
-                  "repeat"     Number of times to repeat calling the
-                               callback.  -1 means forever.  When not present
-                               the callback will be called once.
-                               If the timer causes an error three times in a
-                               row the repeat is cancelled.  This avoids that
-                               Vim becomes unusable because of all the error
-                               messages.
-
-               Example: >
-                       func MyHandler(timer)
-                         echo 'Handler called'
-                       endfunc
-                       let timer = timer_start(500, 'MyHandler',
-                               \ {'repeat': 3})
-<              This will invoke MyHandler() three times at 500 msec
-               intervals.
-
-               Can also be used as a |method|: >
-                       GetMsec()->timer_start(callback)
-
-<              Not available in the |sandbox|.
-               {only available when compiled with the |+timers| feature}
-
-timer_stop({timer})                                    *timer_stop()*
-               Stop a timer.  The timer callback will no longer be invoked.
-               {timer} is an ID returned by timer_start(), thus it must be a
-               Number.  If {timer} does not exist there is no error.
-
-               Can also be used as a |method|: >
-                       GetTimer()->timer_stop()
-
-<              {only available when compiled with the |+timers| feature}
-
-timer_stopall()                                                *timer_stopall()*
-               Stop all timers.  The timer callbacks will no longer be
-               invoked.  Useful if a timer is misbehaving.  If there are no
-               timers there is no error.
-
-               {only available when compiled with the |+timers| feature}
-
-tolower({expr})                                                *tolower()*
-               The result is a copy of the String given, with all uppercase
-               characters turned into lowercase (just like applying |gu| to
-               the string).
-
-               Can also be used as a |method|: >
-                       GetText()->tolower()
-
-toupper({expr})                                                *toupper()*
-               The result is a copy of the String given, with all lowercase
-               characters turned into uppercase (just like applying |gU| to
-               the string).
-
-               Can also be used as a |method|: >
-                       GetText()->toupper()
-
-tr({src}, {fromstr}, {tostr})                          *tr()*
-               The result is a copy of the {src} string with all characters
-               which appear in {fromstr} replaced by the character in that
-               position in the {tostr} string.  Thus the first character in
-               {fromstr} is translated into the first character in {tostr}
-               and so on.  Exactly like the unix "tr" command.
-               This code also deals with multibyte characters properly.
-
-               Examples: >
-                       echo tr("hello there", "ht", "HT")
-<              returns "Hello THere" >
-                       echo tr("<blob>", "<>", "{}")
-<              returns "{blob}"
-
-               Can also be used as a |method|: >
-                       GetText()->tr(from, to)
-
-trim({text} [, {mask} [, {dir}]])                              *trim()*
-               Return {text} as a String where any character in {mask} is
-               removed from the beginning and/or end of {text}.
-
-               If {mask} is not given, {mask} is all characters up to 0x20,
-               which includes Tab, space, NL and CR, plus the non-breaking
-               space character 0xa0.
-
-               The optional {dir} argument specifies where to remove the
-               characters:
-                       0       remove from the beginning and end of {text}
-                       1       remove only at the beginning of {text}
-                       2       remove only at the end of {text}
-               When omitted both ends are trimmed.
-
-               This function deals with multibyte characters properly.
-
-               Examples: >
-                       echo trim("   some text ")
-<              returns "some text" >
-                       echo trim("  \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
-<              returns "RESERVE_TAIL" >
-                       echo trim("rm<Xrm<>X>rrm", "rm<>")
-<              returns "Xrm<>X" (characters in the middle are not removed) >
-                       echo trim("  vim  ", " ", 2)
-<              returns "  vim"
-
-               Can also be used as a |method|: >
-                       GetText()->trim()
-
-trunc({expr})                                                  *trunc()*
-               Return the largest integral value with magnitude less than or
-               equal to {expr} as a |Float| (truncate towards zero).
-               {expr} must evaluate to a |Float| or a |Number|.
-               Examples: >
-                       echo trunc(1.456)
-<                      1.0  >
-                       echo trunc(-5.456)
-<                      -5.0  >
-                       echo trunc(4.0)
-<                      4.0
-
-               Can also be used as a |method|: >
-                       Compute()->trunc()
-<
-               {only available when compiled with the |+float| feature}
-
-                                                       *type()*
-type({expr})   The result is a Number representing the type of {expr}.
-               Instead of using the number directly, it is better to use the
-               v:t_ variable that has the value:
-                       Number:     0  |v:t_number|
-                       String:     1  |v:t_string|
-                       Funcref:    2  |v:t_func|
-                       List:       3  |v:t_list|
-                       Dictionary: 4  |v:t_dict|
-                       Float:      5  |v:t_float|
-                       Boolean:    6  |v:t_bool| (v:false and v:true)
-                       None:       7  |v:t_none| (v:null and v:none)
-                       Job:        8  |v:t_job|
-                       Channel:    9  |v:t_channel|
-                       Blob:      10  |v:t_blob|
-               For backward compatibility, this method can be used: >
-                       :if type(myvar) == type(0)
-                       :if type(myvar) == type("")
-                       :if type(myvar) == type(function("tr"))
-                       :if type(myvar) == type([])
-                       :if type(myvar) == type({})
-                       :if type(myvar) == type(0.0)
-                       :if type(myvar) == type(v:false)
-                       :if type(myvar) == type(v:none)
-<              To check if the v:t_ variables exist use this: >
-                       :if exists('v:t_number')
-
-<              Can also be used as a |method|: >
-                       mylist->type()
-
-
-typename({expr})                                       *typename()*
-               Return a string representation of the type of {expr}.
-               Example: >
-                       echo typename([1, 2, 3])
-                       list<number>
-
-
-undofile({name})                                       *undofile()*
-               Return the name of the undo file that would be used for a file
-               with name {name} when writing.  This uses the 'undodir'
-               option, finding directories that exist.  It does not check if
-               the undo file exists.
-               {name} is always expanded to the full path, since that is what
-               is used internally.
-               If {name} is empty undofile() returns an empty string, since a
-               buffer without a file name will not write an undo file.
-               Useful in combination with |:wundo| and |:rundo|.
-               When compiled without the |+persistent_undo| option this always
-               returns an empty string.
-
-               Can also be used as a |method|: >
-                       GetFilename()->undofile()
-
-undotree()                                             *undotree()*
-               Return the current state of the undo tree in a dictionary with
-               the following items:
-                 "seq_last"    The highest undo sequence number used.
-                 "seq_cur"     The sequence number of the current position in
-                               the undo tree.  This differs from "seq_last"
-                               when some changes were undone.
-                 "time_cur"    Time last used for |:earlier| and related
-                               commands.  Use |strftime()| to convert to
-                               something readable.
-                 "save_last"   Number of the last file write.  Zero when no
-                               write yet.
-                 "save_cur"    Number of the current position in the undo
-                               tree.
-                 "synced"      Non-zero when the last undo block was synced.
-                               This happens when waiting from input from the
-                               user.  See |undo-blocks|.
-                 "entries"     A list of dictionaries with information about
-                               undo blocks.
-
-               The first item in the "entries" list is the oldest undo item.
-               Each List item is a |Dictionary| with these items:
-                 "seq"         Undo sequence number.  Same as what appears in
-                               |:undolist|.
-                 "time"        Timestamp when the change happened.  Use
-                               |strftime()| to convert to something readable.
-                 "newhead"     Only appears in the item that is the last one
-                               that was added.  This marks the last change
-                               and where further changes will be added.
-                 "curhead"     Only appears in the item that is the last one
-                               that was undone.  This marks the current
-                               position in the undo tree, the block that will
-                               be used by a redo command.  When nothing was
-                               undone after the last change this item will
-                               not appear anywhere.
-                 "save"        Only appears on the last block before a file
-                               write.  The number is the write count.  The
-                               first write has number 1, the last one the
-                               "save_last" mentioned above.
-                 "alt"         Alternate entry.  This is again a List of undo
-                               blocks.  Each item may again have an "alt"
-                               item.
-
-uniq({list} [, {func} [, {dict}]])                     *uniq()* *E882*
-               Remove second and succeeding copies of repeated adjacent
-               {list} items in-place.  Returns {list}.  If you want a list
-               to remain unmodified make a copy first: >
-                       :let newlist = uniq(copy(mylist))
-<              The default compare function uses the string representation of
-               each item.  For the use of {func} and {dict} see |sort()|.
-
-               Can also be used as a |method|: >
-                       mylist->uniq()
-
-values({dict})                                         *values()*
-               Return a |List| with all the values of {dict}.  The |List| is
-               in arbitrary order.  Also see |items()| and |keys()|.
-
-               Can also be used as a |method|: >
-                       mydict->values()
-
-virtcol({expr})                                                *virtcol()*
-               The result is a Number, which is the screen column of the file
-               position given with {expr}.  That is, the last screen position
-               occupied by the character at that position, when the screen
-               would be of unlimited width.  When there is a <Tab> at the
-               position, the returned Number will be the column at the end of
-               the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
-               set to 8, it returns 8. |conceal| is ignored.
-               For the byte position use |col()|.
-               For the use of {expr} see |col()|.
-               When 'virtualedit' is used {expr} can be [lnum, col, off], where
-               "off" is the offset in screen columns from the start of the
-               character.  E.g., a position within a <Tab> or after the last
-               character.  When "off" is omitted zero is used.
-               When Virtual editing is active in the current mode, a position
-               beyond the end of the line can be returned. |'virtualedit'|
-               The accepted positions are:
-                   .       the cursor position
-                   $       the end of the cursor line (the result is the
-                           number of displayed characters in the cursor line
-                           plus one)
-                   'x      position of mark x (if the mark is not set, 0 is
-                           returned)
-                   v       In Visual mode: the start of the Visual area (the
-                           cursor is the end).  When not in Visual mode
-                           returns the cursor position.  Differs from |'<| in
-                           that it's updated right away.
-               Note that only marks in the current file can be used.
-               Examples: >
-  virtcol(".")    with text "foo^Lbar", with cursor on the "^L", returns 5
-  virtcol("$")    with text "foo^Lbar", returns 9
-  virtcol("'t")    with text "   there", with 't at 'h', returns 6
-<              The first column is 1.  0 is returned for an error.
-               A more advanced example that echoes the maximum length of
-               all lines: >
-                   echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
-
-<              Can also be used as a |method|: >
-                       GetPos()->virtcol()
-
-
-visualmode([{expr}])                                           *visualmode()*
-               The result is a String, which describes the last Visual mode
-               used in the current buffer.  Initially it returns an empty
-               string, but once Visual mode has been used, it returns "v",
-               "V", or "<CTRL-V>" (a single CTRL-V character) for
-               character-wise, line-wise, or block-wise Visual mode
-               respectively.
-               Example: >
-                       :exe "normal " . visualmode()
-<              This enters the same Visual mode as before.  It is also useful
-               in scripts if you wish to act differently depending on the
-               Visual mode that was used.
-               If Visual mode is active, use |mode()| to get the Visual mode
-               (e.g., in a |:vmap|).
-               If {expr} is supplied and it evaluates to a non-zero Number or
-               a non-empty String, then the Visual mode will be cleared and
-               the old value is returned.  See |non-zero-arg|.
-
-wildmenumode()                                 *wildmenumode()*
-               Returns |TRUE| when the wildmenu is active and |FALSE|
-               otherwise.  See 'wildmenu' and 'wildmode'.
-               This can be used in mappings to handle the 'wildcharm' option
-               gracefully. (Makes only sense with |mapmode-c| mappings).
-
-               For example to make <c-j> work like <down> in wildmode, use: >
-    :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
-<
-               (Note, this needs the 'wildcharm' option set appropriately).
-
-win_execute({id}, {command} [, {silent}])              *win_execute()*
-               Like `execute()` but in the context of window {id}.
-               The window will temporarily be made the current window,
-               without triggering autocommands or changing directory.  When
-               executing {command} autocommands will be triggered, this may
-               have unexpected side effects.  Use |:noautocmd| if needed.
-               Example: >
-                       call win_execute(winid, 'set syntax=python')
-<              Doing the same with `setwinvar()` would not trigger
-               autocommands and not actually show syntax highlighting.
-
-                                                       *E994*
-               Not all commands are allowed in popup windows.
-               When window {id} does not exist then no error is given and
-               an empty string is returned.
-
-               Can also be used as a |method|, the base is passed as the
-               second argument: >
-                       GetCommand()->win_execute(winid)
-
-win_findbuf({bufnr})                                   *win_findbuf()*
-               Returns a |List| with |window-ID|s for windows that contain
-               buffer {bufnr}.  When there is none the list is empty.
-
-               Can also be used as a |method|: >
-                       GetBufnr()->win_findbuf()
-
-win_getid([{win} [, {tab}]])                           *win_getid()*
-               Get the |window-ID| for the specified window.
-               When {win} is missing use the current window.
-               With {win} this is the window number.  The top window has
-               number 1.
-               Without {tab} use the current tab, otherwise the tab with
-               number {tab}.  The first tab has number one.
-               Return zero if the window cannot be found.
-
-               Can also be used as a |method|: >
-                       GetWinnr()->win_getid()
-
-
-win_gettype([{nr}])                                    *win_gettype()*
-               Return the type of the window:
-                       "autocmd"       autocommand window. Temporary window
-                                       used to execute autocommands.
-                       "command"       command-line window |cmdwin|
-                       (empty)         normal window
-                       "loclist"       |location-list-window|
-                       "popup"         popup window |popup|
-                       "preview"       preview window |preview-window|
-                       "quickfix"      |quickfix-window|
-                       "unknown"       window {nr} not found
-
-               When {nr} is omitted return the type of the current window.
-               When {nr} is given return the type of this window by number or
-               |window-ID|.
-
-               Also see the 'buftype' option.  When running a terminal in a
-               popup window then 'buftype' is "terminal" and win_gettype()
-               returns "popup".
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_gettype()
-<
-win_gotoid({expr})                                     *win_gotoid()*
-               Go to window with ID {expr}.  This may also change the current
-               tabpage.
-               Return TRUE if successful, FALSE if the window cannot be found.
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_gotoid()
-
-win_id2tabwin({expr})                                  *win_id2tabwin()*
-               Return a list with the tab number and window number of window
-               with ID {expr}: [tabnr, winnr].
-               Return [0, 0] if the window cannot be found.
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_id2tabwin()
-
-win_id2win({expr})                                     *win_id2win()*
-               Return the window number of window with ID {expr}.
-               Return 0 if the window cannot be found in the current tabpage.
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_id2win()
-
-win_screenpos({nr})                                    *win_screenpos()*
-               Return the screen position of window {nr} as a list with two
-               numbers: [row, col].  The first window always has position
-               [1, 1], unless there is a tabline, then it is [2, 1].
-               {nr} can be the window number or the |window-ID|.  Use zero
-               for the current window.
-               Returns [0, 0] if the window cannot be found in the current
-               tabpage.
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_screenpos()
-<
-win_splitmove({nr}, {target} [, {options}])            *win_splitmove()*
-               Move the window {nr} to a new split of the window {target}.
-               This is similar to moving to {target}, creating a new window
-               using |:split| but having the same contents as window {nr}, and
-               then closing {nr}.
-
-               Both {nr} and {target} can be window numbers or |window-ID|s.
-               Both must be in the current tab page.
-
-               Returns zero for success, non-zero for failure.
-
-               {options} is a |Dictionary| with the following optional entries:
-                 "vertical"    When TRUE, the split is created vertically,
-                               like with |:vsplit|.
-                 "rightbelow"  When TRUE, the split is made below or to the
-                               right (if vertical).  When FALSE, it is done
-                               above or to the left (if vertical).  When not
-                               present, the values of 'splitbelow' and
-                               'splitright' are used.
-
-               Can also be used as a |method|: >
-                       GetWinid()->win_splitmove(target)
-<
-
-                                                       *winbufnr()*
-winbufnr({nr}) The result is a Number, which is the number of the buffer
-               associated with window {nr}.  {nr} can be the window number or
-               the |window-ID|.
-               When {nr} is zero, the number of the buffer in the current
-               window is returned.
-               When window {nr} doesn't exist, -1 is returned.
-               Example: >
-  :echo "The file in the current window is " . bufname(winbufnr(0))
-<
-               Can also be used as a |method|: >
-                       FindWindow()->winbufnr()->bufname()
-<
-                                                       *wincol()*
-wincol()       The result is a Number, which is the virtual column of the
-               cursor in the window.  This is counting screen cells from the
-               left side of the window.  The leftmost column is one.
-
-                                                       *windowsversion()*
-windowsversion()
-               The result is a String.  For MS-Windows it indicates the OS
-               version.  E.g, Windows 10 is "10.0", Windows 8 is "6.2",
-               Windows XP is "5.1".  For non-MS-Windows systems the result is
-               an empty string.
-
-winheight({nr})                                                *winheight()*
-               The result is a Number, which is the height of window {nr}.
-               {nr} can be the window number or the |window-ID|.
-               When {nr} is zero, the height of the current window is
-               returned.  When window {nr} doesn't exist, -1 is returned.
-               An existing window always has a height of zero or more.
-               This excludes any window toolbar line.
-               Examples: >
-  :echo "The current window has " . winheight(0) . " lines."
-
-<              Can also be used as a |method|: >
-                       GetWinid()->winheight()
-<
-winlayout([{tabnr}])                                   *winlayout()*
-               The result is a nested List containing the layout of windows
-               in a tabpage.
-
-               Without {tabnr} use the current tabpage, otherwise the tabpage
-               with number {tabnr}. If the tabpage {tabnr} is not found,
-               returns an empty list.
-
-               For a leaf window, it returns:
-                       ['leaf', {winid}]
-               For horizontally split windows, which form a column, it
-               returns:
-                       ['col', [{nested list of windows}]]
-               For vertically split windows, which form a row, it returns:
-                       ['row', [{nested list of windows}]]
-
-               Example: >
-                       " Only one window in the tab page
-                       :echo winlayout()
-                       ['leaf', 1000]
-                       " Two horizontally split windows
-                       :echo winlayout()
-                       ['col', [['leaf', 1000], ['leaf', 1001]]]
-                       " The second tab page, with three horizontally split
-                       " windows, with two vertically split windows in the
-                       " middle window
-                       :echo winlayout(2)
-                       ['col', [['leaf', 1002], ['row', [['leaf', 1003],
-                                           ['leaf', 1001]]], ['leaf', 1000]]]
-<
-               Can also be used as a |method|: >
-                       GetTabnr()->winlayout()
-<
-                                                       *winline()*
-winline()      The result is a Number, which is the screen line of the cursor
-               in the window.  This is counting screen lines from the top of
-               the window.  The first line is one.
-               If the cursor was moved the view on the file will be updated
-               first, this may cause a scroll.
-
-                                                       *winnr()*
-winnr([{arg}]) The result is a Number, which is the number of the current
-               window.  The top window has number 1.
-               Returns zero for a popup window.
-
-               The optional argument {arg} supports the following values:
-                       $       the number of the last window (the window
-                               count).
-                       #       the number of the last accessed window (where
-                               |CTRL-W_p| goes to).  If there is no previous
-                               window or it is in another tab page 0 is
-                               returned.
-                       {N}j    the number of the Nth window below the
-                               current window (where |CTRL-W_j| goes to).
-                       {N}k    the number of the Nth window above the current
-                               window (where |CTRL-W_k| goes to).
-                       {N}h    the number of the Nth window left of the
-                               current window (where |CTRL-W_h| goes to).
-                       {N}l    the number of the Nth window right of the
-                               current window (where |CTRL-W_l| goes to).
-               The number can be used with |CTRL-W_w| and ":wincmd w"
-               |:wincmd|.
-               Also see |tabpagewinnr()| and |win_getid()|.
-               Examples: >
-                       let window_count = winnr('$')
-                       let prev_window = winnr('#')
-                       let wnum = winnr('3k')
-
-<              Can also be used as a |method|: >
-                       GetWinval()->winnr()
-<
-                                                       *winrestcmd()*
-winrestcmd()   Returns a sequence of |:resize| commands that should restore
-               the current window sizes.  Only works properly when no windows
-               are opened or closed and the current window and tab page is
-               unchanged.
-               Example: >
-                       :let cmd = winrestcmd()
-                       :call MessWithWindowSizes()
-                       :exe cmd
-<
-                                                       *winrestview()*
-winrestview({dict})
-               Uses the |Dictionary| returned by |winsaveview()| to restore
-               the view of the current window.
-               Note: The {dict} does not have to contain all values, that are
-               returned by |winsaveview()|. If values are missing, those
-               settings won't be restored. So you can use: >
-                   :call winrestview({'curswant': 4})
-<
-               This will only set the curswant value (the column the cursor
-               wants to move on vertical movements) of the cursor to column 5
-               (yes, that is 5), while all other settings will remain the
-               same. This is useful, if you set the cursor position manually.
-
-               If you have changed the values the result is unpredictable.
-               If the window size changed the result won't be the same.
-
-               Can also be used as a |method|: >
-                       GetView()->winrestview()
-<
-                                                       *winsaveview()*
-winsaveview()  Returns a |Dictionary| that contains information to restore
-               the view of the current window.  Use |winrestview()| to
-               restore the view.
-               This is useful if you have a mapping that jumps around in the
-               buffer and you want to go back to the original view.
-               This does not save fold information.  Use the 'foldenable'
-               option to temporarily switch off folding, so that folds are
-               not opened when moving around. This may have side effects.
-               The return value includes:
-                       lnum            cursor line number
-                       col             cursor column (Note: the first column
-                                       zero, as opposed to what getpos()
-                                       returns)
-                       coladd          cursor column offset for 'virtualedit'
-                       curswant        column for vertical movement
-                       topline         first line in the window
-                       topfill         filler lines, only in diff mode
-                       leftcol         first column displayed; only used when
-                                       'wrap' is off
-                       skipcol         columns skipped
-               Note that no option values are saved.
-
-
-winwidth({nr})                                         *winwidth()*
-               The result is a Number, which is the width of window {nr}.
-               {nr} can be the window number or the |window-ID|.
-               When {nr} is zero, the width of the current window is
-               returned.  When window {nr} doesn't exist, -1 is returned.
-               An existing window always has a width of zero or more.
-               Examples: >
-  :echo "The current window has " . winwidth(0) . " columns."
-  :if winwidth(0) <= 50
-  :  50 wincmd |
-  :endif
-<              For getting the terminal or screen size, see the 'columns'
-               option.
-
-               Can also be used as a |method|: >
-                       GetWinid()->winwidth()
-
-
-wordcount()                                            *wordcount()*
-               The result is a dictionary of byte/chars/word statistics for
-               the current buffer.  This is the same info as provided by
-               |g_CTRL-G|
-               The return value includes:
-                       bytes           Number of bytes in the buffer
-                       chars           Number of chars in the buffer
-                       words           Number of words in the buffer
-                       cursor_bytes    Number of bytes before cursor position
-                                       (not in Visual mode)
-                       cursor_chars    Number of chars before cursor position
-                                       (not in Visual mode)
-                       cursor_words    Number of words before cursor position
-                                       (not in Visual mode)
-                       visual_bytes    Number of bytes visually selected
-                                       (only in Visual mode)
-                       visual_chars    Number of chars visually selected
-                                       (only in Visual mode)
-                       visual_words    Number of words visually selected
-                                       (only in Visual mode)
-
-
-                                                       *writefile()*
-writefile({object}, {fname} [, {flags}])
-               When {object} is a |List| write it to file {fname}.  Each list
-               item is separated with a NL.  Each list item must be a String
-               or Number.
-               When {flags} contains "b" then binary mode is used: There will
-               not be a NL after the last list item.  An empty item at the
-               end does cause the last line in the file to end in a NL.
-
-               When {object} is a |Blob| write the bytes to file {fname}
-               unmodified.
-
-               When {flags} contains "a" then append mode is used, lines are
-               appended to the file: >
-                       :call writefile(["foo"], "event.log", "a")
-                       :call writefile(["bar"], "event.log", "a")
-<
-               When {flags} contains "s" then fsync() is called after writing
-               the file.  This flushes the file to disk, if possible.  This
-               takes more time but avoids losing the file if the system
-               crashes.
-               When {flags} does not contain "S" or "s" then fsync() is
-               called if the 'fsync' option is set.
-               When {flags} contains "S" then fsync() is not called, even
-               when 'fsync' is set.
-
-               All NL characters are replaced with a NUL character.
-               Inserting CR characters needs to be done before passing {list}
-               to writefile().
-               An existing file is overwritten, if possible.
-               When the write fails -1 is returned, otherwise 0.  There is an
-               error message if the file can't be created or when writing
-               fails.
-               Also see |readfile()|.
-               To copy a file byte for byte: >
-                       :let fl = readfile("foo", "b")
-                       :call writefile(fl, "foocopy", "b")
-
-<              Can also be used as a |method|: >
-                       GetText()->writefile("thefile")
-
-
-xor({expr}, {expr})                                    *xor()*
-               Bitwise XOR on the two arguments.  The arguments are converted
-               to a number.  A List, Dict or Float argument causes an error.
-               Example: >
-                       :let bits = xor(bits, 0x80)
-<
-               Can also be used as a |method|: >
-                       :let bits = bits->xor(0x80)
-<
-
-                                                       *feature-list*
-There are three types of features:
-1.  Features that are only supported when they have been enabled when Vim
-    was compiled |+feature-list|.  Example: >
-       :if has("cindent")
-<                                                      *gui_running*
-2.  Features that are only supported when certain conditions have been met.
-    Example: >
-       :if has("gui_running")
-<                                                      *has-patch*
-3.  Beyond a certain version or at a certain version and including a specific
-    patch.  The "patch-7.4.248" feature means that the Vim version is 7.5 or
-    later, or it is version 7.4 and patch 248 was included.  Example: >
-       :if has("patch-7.4.248")
-<    Note that it's possible for patch 248 to be omitted even though 249 is
-    included.  Only happens when cherry-picking patches.
-    Note that this form only works for patch 7.4.237 and later, before that
-    you need to check for the patch and the  v:version.  Example (checking
-    version 6.2.148 or later): >
-       :if v:version > 602 || (v:version == 602 && has("patch148"))
-
-Hint: To find out if Vim supports backslashes in a file name (MS-Windows),
-use: `if exists('+shellslash')`
-
-
-acl                    Compiled with |ACL| support.
-all_builtin_terms      Compiled with all builtin terminals enabled.
-amiga                  Amiga version of Vim.
-arabic                 Compiled with Arabic support |Arabic|.
-arp                    Compiled with ARP support (Amiga).
-autocmd                        Compiled with autocommand support. (always true)
-autochdir              Compiled with support for 'autochdir'
-autoservername         Automatically enable |clientserver|
-balloon_eval           Compiled with |balloon-eval| support.
-balloon_multiline      GUI supports multiline balloons.
-beos                   BeOS version of Vim.
-browse                 Compiled with |:browse| support, and browse() will
-                       work.
-browsefilter           Compiled with support for |browsefilter|.
-bsd                    Compiled on an OS in the BSD family (excluding macOS).
-builtin_terms          Compiled with some builtin terminals.
-byte_offset            Compiled with support for 'o' in 'statusline'
-channel                        Compiled with support for |channel| and |job|
-cindent                        Compiled with 'cindent' support.
-clientserver           Compiled with remote invocation support |clientserver|.
-clipboard              Compiled with 'clipboard' support.
-clipboard_working      Compiled with 'clipboard' support and it can be used.
-cmdline_compl          Compiled with |cmdline-completion| support.
-cmdline_hist           Compiled with |cmdline-history| support.
-cmdline_info           Compiled with 'showcmd' and 'ruler' support.
-comments               Compiled with |'comments'| support.
-compatible             Compiled to be very Vi compatible.
-conpty                 Platform where |ConPTY| can be used.
-cryptv                 Compiled with encryption support |encryption|.
-cscope                 Compiled with |cscope| support.
-cursorbind             Compiled with |'cursorbind'| (always true)
-debug                  Compiled with "DEBUG" defined.
-dialog_con             Compiled with console dialog support.
-dialog_gui             Compiled with GUI dialog support.
-diff                   Compiled with |vimdiff| and 'diff' support.
-digraphs               Compiled with support for digraphs.
-directx                        Compiled with support for DirectX and 'renderoptions'.
-dnd                    Compiled with support for the "~ register |quote_~|.
-drop_file              Compiled with |drop_file| support.
-ebcdic                 Compiled on a machine with ebcdic character set.
-emacs_tags             Compiled with support for Emacs tags.
-eval                   Compiled with expression evaluation support.  Always
-                       true, of course!
-ex_extra               |+ex_extra| (always true)
-extra_search           Compiled with support for |'incsearch'| and
-                       |'hlsearch'|
-farsi                  Support for Farsi was removed |farsi|.
-file_in_path           Compiled with support for |gf| and |<cfile>|
-filterpipe             When 'shelltemp' is off pipes are used for shell
-                       read/write/filter commands
-find_in_path           Compiled with support for include file searches
-                       |+find_in_path|.
-float                  Compiled with support for |Float|.
-fname_case             Case in file names matters (for Amiga and MS-Windows
-                       this is not present).
-folding                        Compiled with |folding| support.
-footer                 Compiled with GUI footer support. |gui-footer|
-fork                   Compiled to use fork()/exec() instead of system().
-gettext                        Compiled with message translation |multi-lang|
-gui                    Compiled with GUI enabled.
-gui_athena             Compiled with Athena GUI.
-gui_gnome              Compiled with Gnome support (gui_gtk is also defined).
-gui_gtk                        Compiled with GTK+ GUI (any version).
-gui_gtk2               Compiled with GTK+ 2 GUI (gui_gtk is also defined).
-gui_gtk3               Compiled with GTK+ 3 GUI (gui_gtk is also defined).
-gui_haiku              Compiled with Haiku GUI.
-gui_mac                        Compiled with Macintosh GUI.
-gui_motif              Compiled with Motif GUI.
-gui_photon             Compiled with Photon GUI.
-gui_running            Vim is running in the GUI, or it will start soon.
-gui_win32              Compiled with MS-Windows Win32 GUI.
-gui_win32s             idem, and Win32s system being used (Windows 3.1)
-haiku                  Haiku version of Vim.
-hangul_input           Compiled with Hangul input support. |hangul|
-hpux                   HP-UX version of Vim.
-iconv                  Can use iconv() for conversion.
-insert_expand          Compiled with support for CTRL-X expansion commands in
-                       Insert mode. (always true)
-job                    Compiled with support for |channel| and |job|
-ipv6                   Compiled with support for IPv6 networking in |channel|.
-jumplist               Compiled with |jumplist| support.
-keymap                 Compiled with 'keymap' support.
-lambda                 Compiled with |lambda| support.
-langmap                        Compiled with 'langmap' support.
-libcall                        Compiled with |libcall()| support.
-linebreak              Compiled with 'linebreak', 'breakat', 'showbreak' and
-                       'breakindent' support.
-linux                  Linux version of Vim.
-lispindent             Compiled with support for lisp indenting.
-listcmds               Compiled with commands for the buffer list |:files|
-                       and the argument list |arglist|.
-localmap               Compiled with local mappings and abbr. |:map-local|
-lua                    Compiled with Lua interface |Lua|.
-mac                    Any Macintosh version of Vim  cf. osx
-macunix                        Synonym for osxdarwin
-menu                   Compiled with support for |:menu|.
-mksession              Compiled with support for |:mksession|.
-modify_fname           Compiled with file name modifiers. |filename-modifiers|
-                       (always true)
-mouse                  Compiled with support for mouse.
-mouse_dec              Compiled with support for Dec terminal mouse.
-mouse_gpm              Compiled with support for gpm (Linux console mouse)
-mouse_gpm_enabled      GPM mouse is working
-mouse_netterm          Compiled with support for netterm mouse.
-mouse_pterm            Compiled with support for qnx pterm mouse.
-mouse_sysmouse         Compiled with support for sysmouse (*BSD console mouse)
-mouse_sgr              Compiled with support for sgr mouse.
-mouse_urxvt            Compiled with support for urxvt mouse.
-mouse_xterm            Compiled with support for xterm mouse.
-mouseshape             Compiled with support for 'mouseshape'.
-multi_byte             Compiled with support for 'encoding' (always true)
-multi_byte_encoding    'encoding' is set to a multibyte encoding.
-multi_byte_ime         Compiled with support for IME input method.
-multi_lang             Compiled with support for multiple languages.
-mzscheme               Compiled with MzScheme interface |mzscheme|.
-nanotime               Compiled with sub-second time stamp checks.
-netbeans_enabled       Compiled with support for |netbeans| and connected.
-netbeans_intg          Compiled with support for |netbeans|.
-num64                  Compiled with 64-bit |Number| support.
-ole                    Compiled with OLE automation support for Win32.
-osx                    Compiled for macOS  cf. mac
-osxdarwin              Compiled for macOS, with |mac-darwin-feature|
-packages               Compiled with |packages| support.
-path_extra             Compiled with up/downwards search in 'path' and 'tags'
-perl                   Compiled with Perl interface.
-persistent_undo                Compiled with support for persistent undo history.
-postscript             Compiled with PostScript file printing.
-printer                        Compiled with |:hardcopy| support.
-profile                        Compiled with |:profile| support.
-python                 Python 2.x interface available. |has-python|
-python_compiled                Compiled with Python 2.x interface. |has-python|
-python_dynamic         Python 2.x interface is dynamically loaded. |has-python|
-python3                        Python 3.x interface available. |has-python|
-python3_compiled       Compiled with Python 3.x interface. |has-python|
-python3_dynamic                Python 3.x interface is dynamically loaded. |has-python|
-pythonx                        Python 2.x and/or 3.x interface available. |python_x|
-qnx                    QNX version of Vim.
-quickfix               Compiled with |quickfix| support.
-reltime                        Compiled with |reltime()| support.
-rightleft              Compiled with 'rightleft' support.
-ruby                   Compiled with Ruby interface |ruby|.
-scrollbind             Compiled with 'scrollbind' support. (always true)
-showcmd                        Compiled with 'showcmd' support.
-signs                  Compiled with |:sign| support.
-smartindent            Compiled with 'smartindent' support.
-sodium                 Compiled with libsodium for better crypt support
-sound                  Compiled with sound support, e.g. `sound_playevent()`
-spell                  Compiled with spell checking support |spell|.
-startuptime            Compiled with |--startuptime| support.
-statusline             Compiled with support for 'statusline', 'rulerformat'
-                       and special formats of 'titlestring' and 'iconstring'.
-sun                    SunOS version of Vim.
-sun_workshop           Support for Sun |workshop| has been removed.
-syntax                 Compiled with syntax highlighting support |syntax|.
-syntax_items           There are active syntax highlighting items for the
-                       current buffer.
-system                 Compiled to use system() instead of fork()/exec().
-tag_binary             Compiled with binary searching in tags files
-                       |tag-binary-search|.
-tag_old_static         Support for old static tags was removed, see
-                       |tag-old-static|.
-tcl                    Compiled with Tcl interface.
-termguicolors          Compiled with true color in terminal support.
-terminal               Compiled with |terminal| support.
-terminfo               Compiled with terminfo instead of termcap.
-termresponse           Compiled with support for |t_RV| and |v:termresponse|.
-textobjects            Compiled with support for |text-objects|.
-textprop               Compiled with support for |text-properties|.
-tgetent                        Compiled with tgetent support, able to use a termcap
-                       or terminfo file.
-timers                 Compiled with |timer_start()| support.
-title                  Compiled with window title support |'title'|.
-toolbar                        Compiled with support for |gui-toolbar|.
-ttyin                  input is a terminal (tty)
-ttyout                 output is a terminal (tty)
-unix                   Unix version of Vim. *+unix*
-unnamedplus            Compiled with support for "unnamedplus" in 'clipboard'
-user_commands          User-defined commands. (always true)
-vartabs                        Compiled with variable tabstop support |'vartabstop'|.
-vcon                   Win32: Virtual console support is working, can use
-                       'termguicolors'. Also see |+vtp|.
-vertsplit              Compiled with vertically split windows |:vsplit|.
-                       (always true)
-vim_starting           True while initial source'ing takes place. |startup|
-                       *vim_starting*
-viminfo                        Compiled with viminfo support.
-vimscript-1            Compiled Vim script version 1 support
-vimscript-2            Compiled Vim script version 2 support
-vimscript-3            Compiled Vim script version 3 support
-virtualedit            Compiled with 'virtualedit' option. (always true)
-visual                 Compiled with Visual mode. (always true)
-visualextra            Compiled with extra Visual mode commands. (always
-                       true) |blockwise-operators|.
-vms                    VMS version of Vim.
-vreplace               Compiled with |gR| and |gr| commands. (always true)
-vtp                    Compiled for vcon support |+vtp| (check vcon to find
-                       out if it works in the current console).
-wildignore             Compiled with 'wildignore' option.
-wildmenu               Compiled with 'wildmenu' option.
-win16                  old version for MS-Windows 3.1 (always false)
-win32                  Win32 version of Vim (MS-Windows 95 and later, 32 or
-                       64 bits)
-win32unix              Win32 version of Vim, using Unix files (Cygwin)
-win64                  Win64 version of Vim (MS-Windows 64 bit).
-win95                  Win32 version for MS-Windows 95/98/ME (always false)
-winaltkeys             Compiled with 'winaltkeys' option.
-windows                        Compiled with support for more than one window.
-                       (always true)
-writebackup            Compiled with 'writebackup' default on.
-xfontset               Compiled with X fontset support |xfontset|.
-xim                    Compiled with X input method support |xim|.
-xpm                    Compiled with pixmap support.
-xpm_w32                        Compiled with pixmap support for Win32. (Only for
-                       backward compatibility. Use "xpm" instead.)
-xsmp                   Compiled with X session management support.
-xsmp_interact          Compiled with interactive X session management support.
-xterm_clipboard                Compiled with support for xterm clipboard.
-xterm_save             Compiled with support for saving and restoring the
-                       xterm screen.
-x11                    Compiled with X11 support.
-
-                                                       *string-match*
-Matching a pattern in a String
-
-A regexp pattern as explained at |pattern| is normally used to find a match in
-the buffer lines.  When a pattern is used to find a match in a String, almost
-everything works in the same way.  The difference is that a String is handled
-like it is one line.  When it contains a "\n" character, this is not seen as a
-line break for the pattern.  It can be matched with a "\n" in the pattern, or
-with ".".  Example: >
-       :let a = "aaaa\nxxxx"
-       :echo matchstr(a, "..\n..")
-       aa
-       xx
-       :echo matchstr(a, "a.x")
-       a
-       x
-
-Don't forget that "^" will only match at the first character of the String and
-"$" at the last character of the string.  They don't match after or before a
-"\n".
+The alphabetic list of all builtin functions and details are in a separate
+help file: |builtin-functions|.
 
 ==============================================================================
 5. Defining functions                                  *user-functions*
index f339dadf00d2b22a2a91dcb6358d947f1ae50d36..13d6c8a5941a5c90756e21fa48edf7b787c77576 100644 (file)
@@ -136,6 +136,7 @@ Advanced editing ~
 |diff.txt|     working with two to eight versions of the same file
 |autocmd.txt|  automatically executing commands on an event
 |eval.txt|     expression evaluation, conditional commands
+|builtin.txt|  builtin functions
 |channel.txt|  Jobs, Channels, inter-process communication
 |fold.txt|     hide (fold) ranges of lines
 
index c6dcb9800352497b62902a8c113edeafad89899f..02b675a74753d8dfab2f6089be2d3651688ae37f 100644 (file)
@@ -143,7 +143,7 @@ You can not put options there!
 FUNCTIONS
                                                                *E240* *E573*
 There are a number of Vim functions for scripting the command server.  See
-the description in |eval.txt| or use CTRL-] on the function name to jump to
+the description in |builtin.txt| or use CTRL-] on the function name to jump to
 the full explanation.
 
     synopsis                                explanation ~
index 944b1f6add58c291dfd01ad8c1afed65b6eceffd..1a71a53c80ff4e25f8b2910d77dd7de6fcf85409 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3917,
 /**/
     3916,
 /**/