neovim

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

options.lua (451260B)


      1 -- vim: tw=78
      2 
      3 --- @class vim.option_meta
      4 --- @field full_name string
      5 --- @field desc? string
      6 --- @field abbreviation? string
      7 --- @field alias? string|string[]
      8 --- @field short_desc? string|fun(): string
      9 --- @field varname? string
     10 --- @field flags_varname? string
     11 --- @field type vim.option_type
     12 --- @field immutable? boolean
     13 --- @field list? 'comma'|'onecomma'|'commacolon'|'onecommacolon'|'flags'|'flagscomma'
     14 --- @field scope vim.option_scope[]
     15 --- @field deny_duplicates? boolean
     16 --- @field enable_if? string
     17 --- @field defaults? vim.option_defaults|vim.option_value|fun(): string
     18 --- @field values? vim.option_valid_values
     19 --- @field flags? true|table<string,integer>
     20 --- @field secure? true
     21 --- @field noglob? true
     22 --- @field normal_fname_chars? true
     23 --- @field pri_mkrc? true
     24 --- @field deny_in_modelines? true
     25 --- @field normal_dname_chars? true
     26 --- @field modelineexpr? true
     27 --- @field func? true
     28 --- @field expand? string|true
     29 --- @field nodefault? true
     30 --- @field no_mkrc? true
     31 --- @field alloced? true
     32 --- @field redraw? vim.option_redraw[]
     33 ---
     34 --- If not provided and `values` is present, then is set to 'did_set_str_generic'
     35 --- @field cb? string
     36 ---
     37 --- If not provided and `values` is present, then is set to 'expand_set_str_generic'
     38 --- @field expand_cb? string
     39 --- @field tags? string[]
     40 
     41 --- @class vim.option_defaults
     42 --- @field condition? string
     43 ---    string: #ifdef string
     44 ---    !string: #ifndef string
     45 --- @field if_true vim.option_value|fun(): string
     46 --- @field if_false? vim.option_value
     47 --- @field doc? string Default to show in options.txt
     48 --- @field meta? string Default to use in Lua meta files
     49 
     50 --- @alias vim.option_scope 'global'|'buf'|'win'
     51 --- @alias vim.option_type 'boolean'|'number'|'string'
     52 --- @alias vim.option_value boolean|integer|string
     53 --- @alias vim.option_valid_values (string|[string,vim.option_valid_values])[]
     54 
     55 --- @alias vim.option_redraw
     56 --- |'statuslines'
     57 --- |'tabline'
     58 --- |'current_window'
     59 --- |'current_buffer'
     60 --- |'all_windows'
     61 --- |'curswant'
     62 --- |'highlight_only'
     63 --- |'ui_option'
     64 
     65 --- @param s string
     66 --- @return string
     67 local function cstr(s)
     68  return '"' .. s:gsub('["\\]', '\\%0'):gsub('\t', '\\t') .. '"'
     69 end
     70 
     71 --- @param s string
     72 --- @param t vim.option_type
     73 --- @return fun(): string, vim.option_type
     74 local function macros(s, t)
     75  return function()
     76    return s, t
     77  end
     78 end
     79 
     80 --- @param s string
     81 --- @return fun(): string
     82 local function N_(s) -- luacheck: ignore 211 (currently unused)
     83  return function()
     84    return 'N_(' .. cstr(s) .. ')'
     85  end
     86 end
     87 
     88 -- luacheck: ignore 621
     89 local options = {
     90  cstr = cstr,
     91  --- @type string[]
     92  valid_scopes = { 'global', 'buf', 'win' },
     93  --- @type vim.option_meta[]
     94  --- The order of the options MUST be alphabetic for ":set all".
     95  options = {
     96    {
     97      abbreviation = 'al',
     98      defaults = 224,
     99      full_name = 'aleph',
    100      scope = { 'global' },
    101      short_desc = N_('ASCII code of the letter Aleph (Hebrew)'),
    102      type = 'number',
    103      immutable = true,
    104    },
    105    {
    106      abbreviation = 'ari',
    107      defaults = false,
    108      desc = [=[
    109        Allow CTRL-_ in Insert mode.  This is default off, to avoid that users
    110        that accidentally type CTRL-_ instead of SHIFT-_ get into reverse
    111        Insert mode, and don't know how to get out.  See 'revins'.
    112      ]=],
    113      full_name = 'allowrevins',
    114      scope = { 'global' },
    115      short_desc = N_('allow CTRL-_ in Insert mode'),
    116      type = 'boolean',
    117      varname = 'p_ari',
    118    },
    119    {
    120      abbreviation = 'ambw',
    121      cb = 'did_set_ambiwidth',
    122      defaults = 'single',
    123      values = { 'single', 'double' },
    124      desc = [=[
    125        Tells Vim what to do with characters with East Asian Width Class
    126        Ambiguous (such as Euro, Registered Sign, Copyright Sign, Greek
    127        letters, Cyrillic letters).
    128 
    129        There are currently two possible values:
    130        "single":	Use the same width as characters in US-ASCII.  This is
    131        		expected by most users.
    132        "double":	Use twice the width of ASCII characters.
    133        						*E834* *E835*
    134        The value "double" cannot be used if 'listchars' or 'fillchars'
    135        contains a character that would be double width.  These errors may
    136        also be given when calling setcellwidths().
    137 
    138        The values are overruled for characters specified with
    139        |setcellwidths()|.
    140 
    141        There are a number of CJK fonts for which the width of glyphs for
    142        those characters are solely based on how many octets they take in
    143        legacy/traditional CJK encodings.  In those encodings, Euro,
    144        Registered sign, Greek/Cyrillic letters are represented by two octets,
    145        therefore those fonts have "wide" glyphs for them.  This is also
    146        true of some line drawing characters used to make tables in text
    147        file.  Therefore, when a CJK font is used for GUI Vim or
    148        Vim is running inside a terminal (emulators) that uses a CJK font
    149        (or Vim is run inside an xterm invoked with "-cjkwidth" option.),
    150        this option should be set to "double" to match the width perceived
    151        by Vim with the width of glyphs in the font.  Perhaps it also has
    152        to be set to "double" under CJK MS-Windows when the system locale is
    153        set to one of CJK locales.  See Unicode Standard Annex #11
    154        (https://www.unicode.org/reports/tr11).
    155      ]=],
    156      full_name = 'ambiwidth',
    157      redraw = { 'all_windows', 'ui_option' },
    158      scope = { 'global' },
    159      short_desc = N_('what to do with Unicode chars of ambiguous width'),
    160      type = 'string',
    161      varname = 'p_ambw',
    162    },
    163    {
    164      abbreviation = 'arab',
    165      cb = 'did_set_arabic',
    166      defaults = false,
    167      desc = [=[
    168        This option can be set to start editing Arabic text.
    169        Setting this option will:
    170        - Set the 'rightleft' option, unless 'termbidi' is set.
    171        - Set the 'arabicshape' option, unless 'termbidi' is set.
    172        - Set the 'keymap' option to "arabic"; in Insert mode CTRL-^ toggles
    173          between typing English and Arabic key mapping.
    174        - Set the 'delcombine' option
    175 
    176        Resetting this option will:
    177        - Reset the 'rightleft' option.
    178        - Disable the use of 'keymap' (without changing its value).
    179        Note that 'arabicshape' and 'delcombine' are not reset (it is a global
    180        option).
    181        Also see |l10n-arabic.txt|.
    182      ]=],
    183      full_name = 'arabic',
    184      redraw = { 'curswant' },
    185      scope = { 'win' },
    186      short_desc = N_('Arabic as a default second language'),
    187      type = 'boolean',
    188    },
    189    {
    190      abbreviation = 'arshape',
    191      defaults = true,
    192      desc = [=[
    193        When on and 'termbidi' is off, the required visual character
    194        corrections that need to take place for displaying the Arabic language
    195        take effect.  Shaping, in essence, gets enabled; the term is a broad
    196        one which encompasses:
    197          a) the changing/morphing of characters based on their location
    198             within a word (initial, medial, final and stand-alone).
    199          b) the enabling of the ability to compose characters
    200          c) the enabling of the required combining of some characters
    201        When disabled the display shows each character's true stand-alone
    202        form.
    203        Arabic is a complex language which requires other settings, for
    204        further details see |l10n-arabic.txt|.
    205      ]=],
    206      full_name = 'arabicshape',
    207      redraw = { 'all_windows', 'ui_option' },
    208      scope = { 'global' },
    209      short_desc = N_('do shaping for Arabic characters'),
    210      type = 'boolean',
    211      varname = 'p_arshape',
    212    },
    213    {
    214      abbreviation = 'acd',
    215      cb = 'did_set_autochdir',
    216      defaults = false,
    217      desc = [=[
    218        When on, Vim will change the current working directory whenever you
    219        open a file, switch buffers, delete a buffer or open/close a window.
    220        It will change to the directory containing the file which was opened
    221        or selected.  When a buffer has no name it also has no directory, thus
    222        the current directory won't change when navigating to it.
    223        Note: When this option is on some plugins may not work.
    224      ]=],
    225      full_name = 'autochdir',
    226      scope = { 'global' },
    227      short_desc = N_('change directory to the file in the current window'),
    228      type = 'boolean',
    229      varname = 'p_acd',
    230    },
    231    {
    232      abbreviation = 'ac',
    233      defaults = false,
    234      desc = [=[
    235        When on, Vim shows a completion menu as you type, similar to using
    236        |i_CTRL-N|, but triggered automatically.  See |ins-autocompletion|.
    237      ]=],
    238      full_name = 'autocomplete',
    239      scope = { 'global', 'buf' },
    240      short_desc = N_('automatic completion in insert mode'),
    241      type = 'boolean',
    242      varname = 'p_ac',
    243    },
    244    {
    245      abbreviation = 'acl',
    246      defaults = 0,
    247      desc = [=[
    248        Delay in milliseconds before the autocomplete menu appears after
    249        typing.  If you prefer it not to open too quickly, set this value
    250        slightly above your typing speed.  See |ins-autocompletion|.
    251      ]=],
    252      full_name = 'autocompletedelay',
    253      scope = { 'global' },
    254      short_desc = N_('delay in msec before menu appears after typing'),
    255      type = 'number',
    256      varname = 'p_acl',
    257    },
    258    {
    259      abbreviation = 'act',
    260      defaults = 80,
    261      desc = [=[
    262        Initial timeout (in milliseconds) for the decaying time-sliced
    263        completion algorithm.  Starts at this value, halves for each slower
    264        source until a minimum is reached.  All sources run, but slower ones
    265        are quickly de-prioritized.  The default is tuned so the popup menu
    266        opens within ~200ms even with multiple slow sources on a slow system.
    267        Changing this value is rarely needed.  Only 80 or higher is valid.
    268        Special case: when 'complete' contains "F" or "o" (function sources),
    269        a longer timeout is used, allowing up to ~1s for sources such as LSP
    270        servers that may sometimes take longer (e.g., while loading modules).
    271        See |ins-autocompletion|.
    272      ]=],
    273      full_name = 'autocompletetimeout',
    274      scope = { 'global' },
    275      short_desc = N_('initial decay timeout for autocompletion algorithm'),
    276      type = 'number',
    277      varname = 'p_act',
    278    },
    279    {
    280      abbreviation = 'ai',
    281      defaults = true,
    282      desc = [=[
    283        Copy indent from current line when starting a new line (typing <CR>
    284        in Insert mode or when using the "o" or "O" command).  If you do not
    285        type anything on the new line except <BS> or CTRL-D and then type
    286        <Esc>, CTRL-O or <CR>, the indent is deleted again.  Moving the cursor
    287        to another line has the same effect, unless the 'I' flag is included
    288        in 'cpoptions'.
    289        When autoindent is on, formatting (with the "gq" command or when you
    290        reach 'textwidth' in Insert mode) uses the indentation of the first
    291        line.
    292        When 'smartindent' or 'cindent' is on the indent is changed in
    293        a different way.
    294      ]=],
    295      full_name = 'autoindent',
    296      scope = { 'buf' },
    297      short_desc = N_('take indent for new line from previous line'),
    298      type = 'boolean',
    299      varname = 'p_ai',
    300    },
    301    {
    302      abbreviation = 'ar',
    303      defaults = true,
    304      desc = [=[
    305        When a file has been detected to have been changed outside of Vim and
    306        it has not been changed inside of Vim, automatically read it again.
    307        When the file has been deleted this is not done, so you have the text
    308        from before it was deleted.  When it appears again then it is read.
    309        |timestamp|
    310        If this option has a local value, use this command to switch back to
    311        using the global value: >vim
    312        	set autoread<
    313        <
    314      ]=],
    315      full_name = 'autoread',
    316      scope = { 'global', 'buf' },
    317      short_desc = N_('autom. read file when changed outside of Vim'),
    318      type = 'boolean',
    319      varname = 'p_ar',
    320    },
    321    {
    322      abbreviation = 'aw',
    323      defaults = false,
    324      desc = [=[
    325        Write the contents of the file, if it has been modified, on each
    326        `:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
    327        `:suspend`, `:tag`, `:!`, `:make`, CTRL-] and CTRL-^ command; and when
    328        a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
    329        to another file.
    330        A buffer is not written if it becomes hidden, e.g. when 'bufhidden' is
    331        set to "hide" and `:next` is used.
    332        Note that for some commands the 'autowrite' option is not used, see
    333        'autowriteall' for that.
    334        Some buffers will not be written, specifically when 'buftype' is
    335        "nowrite", "nofile", "terminal" or "prompt".
    336        USE WITH CARE: If you make temporary changes to a buffer that you
    337        don't want to be saved this option may cause it to be saved anyway.
    338        Renaming the buffer with ":file {name}" may help avoid this.
    339      ]=],
    340      full_name = 'autowrite',
    341      scope = { 'global' },
    342      short_desc = N_('automatically write file if changed'),
    343      type = 'boolean',
    344      varname = 'p_aw',
    345    },
    346    {
    347      abbreviation = 'awa',
    348      defaults = false,
    349      desc = [=[
    350        Like 'autowrite', but also used for commands ":edit", ":enew",
    351        ":quit", ":qall", ":exit", ":xit", ":recover" and closing the Vim
    352        window.
    353        Setting this option also implies that Vim behaves like 'autowrite' has
    354        been set.
    355      ]=],
    356      full_name = 'autowriteall',
    357      scope = { 'global' },
    358      short_desc = N_("as 'autowrite', but works with more commands"),
    359      type = 'boolean',
    360      varname = 'p_awa',
    361    },
    362    {
    363      abbreviation = 'bg',
    364      cb = 'did_set_background',
    365      defaults = 'dark',
    366      values = { 'light', 'dark' },
    367      desc = [=[
    368        When set to "dark" or "light", adjusts the default color groups for
    369        that background type.  The |TUI| or other UI sets this on startup
    370        (triggering |OptionSet|) if it can detect the background color.
    371 
    372        This option does NOT change the background color, it tells Nvim what
    373        the "inherited" (terminal/GUI) background looks like.
    374        See |:hi-normal| if you want to set the background color explicitly.
    375        					*g:colors_name*
    376        When a color scheme is loaded (the "g:colors_name" variable is set)
    377        changing 'background' will cause the color scheme to be reloaded.  If
    378        the color scheme adjusts to the value of 'background' this will work.
    379        However, if the color scheme sets 'background' itself the effect may
    380        be undone.  First delete the "g:colors_name" variable when needed.
    381 
    382        Normally this option would be set in the vimrc file.  Possibly
    383        depending on the terminal name.  Example: >vim
    384        	if $TERM ==# "xterm"
    385        	  set background=dark
    386        	endif
    387        <	When this option is changed, the default settings for the highlight groups
    388        will change.  To use other settings, place ":highlight" commands AFTER
    389        the setting of the 'background' option.
    390      ]=],
    391      full_name = 'background',
    392      scope = { 'global' },
    393      short_desc = N_('"dark" or "light", used for highlight colors'),
    394      type = 'string',
    395      varname = 'p_bg',
    396    },
    397    {
    398      abbreviation = 'bs',
    399      cb = 'did_set_backspace',
    400      defaults = 'indent,eol,start',
    401      values = { 'indent', 'eol', 'start', 'nostop' },
    402      deny_duplicates = true,
    403      desc = [=[
    404        Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
    405        mode.  This is a list of items, separated by commas.  Each item allows
    406        a way to backspace over something:
    407        value	effect	~
    408        indent	allow backspacing over autoindent
    409        eol	allow backspacing over line breaks (join lines)
    410        start	allow backspacing over the start of insert; CTRL-W and CTRL-U
    411        	stop once at the start of insert.
    412        nostop	like start, except CTRL-W and CTRL-U do not stop at the start
    413        	of insert.
    414 
    415        When the value is empty, Vi compatible backspacing is used, none of
    416        the ways mentioned for the items above are possible.
    417      ]=],
    418      full_name = 'backspace',
    419      list = 'onecomma',
    420      scope = { 'global' },
    421      short_desc = N_('how backspace works at start of line'),
    422      type = 'string',
    423      varname = 'p_bs',
    424    },
    425    {
    426      abbreviation = 'bk',
    427      defaults = false,
    428      desc = [=[
    429        Make a backup before overwriting a file.  Leave it around after the
    430        file has been successfully written.  If you do not want to keep the
    431        backup file, but you do want a backup while the file is being
    432        written, reset this option and set the 'writebackup' option (this is
    433        the default).  If you do not want a backup file at all reset both
    434        options (use this if your file system is almost full).  See the
    435        |backup-table| for more explanations.
    436        When the 'backupskip' pattern matches, a backup is not made anyway.
    437        When 'patchmode' is set, the backup may be renamed to become the
    438        oldest version of a file.
    439      ]=],
    440      full_name = 'backup',
    441      scope = { 'global' },
    442      short_desc = N_('keep backup file after overwriting a file'),
    443      type = 'boolean',
    444      varname = 'p_bk',
    445    },
    446    {
    447      abbreviation = 'bkc',
    448      cb = 'did_set_backupcopy',
    449      defaults = { condition = 'UNIX', if_false = 'auto', if_true = 'auto' },
    450      values = { 'yes', 'auto', 'no', 'breaksymlink', 'breakhardlink' },
    451      flags = true,
    452      deny_duplicates = true,
    453      desc = [=[
    454        When writing a file and a backup is made, this option tells how it's
    455        done.  This is a comma-separated list of words.
    456 
    457        The main values are:
    458        "yes"	make a copy of the file and overwrite the original one
    459        "no"	rename the file and write a new one
    460        "auto"	one of the previous, what works best
    461 
    462        Extra values that can be combined with the ones above are:
    463        "breaksymlink"	always break symlinks when writing
    464        "breakhardlink"	always break hardlinks when writing
    465 
    466        Making a copy and overwriting the original file:
    467        - Takes extra time to copy the file.
    468        + When the file has special attributes, is a (hard/symbolic) link or
    469          has a resource fork, all this is preserved.
    470        - When the file is a link the backup will have the name of the link,
    471          not of the real file.
    472 
    473        Renaming the file and writing a new one:
    474        + It's fast.
    475        - Sometimes not all attributes of the file can be copied to the new
    476          file.
    477        - When the file is a link the new file will not be a link.
    478 
    479        The "auto" value is the middle way: When Vim sees that renaming the
    480        file is possible without side effects (the attributes can be passed on
    481        and the file is not a link) that is used.  When problems are expected,
    482        a copy will be made.
    483 
    484        The "breaksymlink" and "breakhardlink" values can be used in
    485        combination with any of "yes", "no" and "auto".  When included, they
    486        force Vim to always break either symbolic or hard links by doing
    487        exactly what the "no" option does, renaming the original file to
    488        become the backup and writing a new file in its place.  This can be
    489        useful for example in source trees where all the files are symbolic or
    490        hard links and any changes should stay in the local source tree, not
    491        be propagated back to the original source.
    492        							*crontab*
    493        One situation where "no" and "auto" will cause problems: A program
    494        that opens a file, invokes Vim to edit that file, and then tests if
    495        the open file was changed (through the file descriptor) will check the
    496        backup file instead of the newly created file.  "crontab -e" is an
    497        example, as are several |file-watcher| daemons like inotify.  In that
    498        case you probably want to switch this option.
    499 
    500        When a copy is made, the original file is truncated and then filled
    501        with the new text.  This means that protection bits, owner and
    502        symbolic links of the original file are unmodified.  The backup file,
    503        however, is a new file, owned by the user who edited the file.  The
    504        group of the backup is set to the group of the original file.  If this
    505        fails, the protection bits for the group are made the same as for
    506        others.
    507 
    508        When the file is renamed, this is the other way around: The backup has
    509        the same attributes of the original file, and the newly written file
    510        is owned by the current user.  When the file was a (hard/symbolic)
    511        link, the new file will not!  That's why the "auto" value doesn't
    512        rename when the file is a link.  The owner and group of the newly
    513        written file will be set to the same ones as the original file, but
    514        the system may refuse to do this.  In that case the "auto" value will
    515        again not rename the file.
    516      ]=],
    517      full_name = 'backupcopy',
    518      list = 'onecomma',
    519      scope = { 'global', 'buf' },
    520      short_desc = N_("make backup as a copy, don't rename the file"),
    521      type = 'string',
    522      varname = 'p_bkc',
    523      flags_varname = 'bkc_flags',
    524    },
    525    {
    526      abbreviation = 'bdir',
    527      defaults = '',
    528      deny_duplicates = true,
    529      desc = [=[
    530        List of directories for the backup file, separated with commas.
    531        - The backup file will be created in the first directory in the list
    532          where this is possible.  If none of the directories exist Nvim will
    533          attempt to create the last directory in the list.
    534        - Empty means that no backup file will be created ('patchmode' is
    535          impossible!).  Writing may fail because of this.
    536        - A directory "." means to put the backup file in the same directory
    537          as the edited file.
    538        - A directory starting with "./" (or ".\" for MS-Windows) means to put
    539          the backup file relative to where the edited file is.  The leading
    540          "." is replaced with the path name of the edited file.
    541          ("." inside a directory name has no special meaning).
    542        - Spaces after the comma are ignored, other spaces are considered part
    543          of the directory name.  To have a space at the start of a directory
    544          name, precede it with a backslash.
    545        - To include a comma in a directory name precede it with a backslash.
    546        - A directory name may end in an '/'.
    547        - For Unix and Win32, if a directory ends in two path separators "//",
    548          the swap file name will be built from the complete path to the file
    549          with all path separators changed to percent '%' signs.  This will
    550          ensure file name uniqueness in the backup directory.
    551          On Win32, it is also possible to end with "\\".  However, When a
    552          separating comma is following, you must use "//", since "\\" will
    553          include the comma in the file name.  Therefore it is recommended to
    554          use '//', instead of '\\'.
    555        - Environment variables are expanded |:set_env|.
    556        - Careful with '\' characters, type one before a space, type two to
    557          get one in the option (see |option-backslash|), for example: >vim
    558            set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
    559        <
    560        See also 'backup' and 'writebackup' options.
    561        If you want to hide your backup files on Unix, consider this value: >vim
    562        	set backupdir=./.backup,~/.backup,.,/tmp
    563        <	You must create a ".backup" directory in each directory and in your
    564        home directory for this to work properly.
    565        The use of |:set+=| and |:set-=| is preferred when adding or removing
    566        directories from the list.  This avoids problems when a future version
    567        uses another default.
    568        This option cannot be set from a |modeline| or in the |sandbox|, for
    569        security reasons.
    570      ]=],
    571      expand = 'nodefault',
    572      full_name = 'backupdir',
    573      list = 'onecomma',
    574      scope = { 'global' },
    575      secure = true,
    576      short_desc = N_('list of directories for the backup file'),
    577      type = 'string',
    578      varname = 'p_bdir',
    579    },
    580    {
    581      abbreviation = 'bex',
    582      cb = 'did_set_backupext_or_patchmode',
    583      defaults = '~',
    584      desc = [=[
    585        String which is appended to a file name to make the name of the
    586        backup file.  The default is quite unusual, because this avoids
    587        accidentally overwriting existing files with a backup file.  You might
    588        prefer using ".bak", but make sure that you don't have files with
    589        ".bak" that you want to keep.
    590        Only normal file name characters can be used; `/\*?[|<>` are illegal.
    591 
    592        If you like to keep a lot of backups, you could use a BufWritePre
    593        autocommand to change 'backupext' just before writing the file to
    594        include a timestamp. >vim
    595        	au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~'
    596        <	Use 'backupdir' to put the backup in a different directory.
    597      ]=],
    598      full_name = 'backupext',
    599      normal_fname_chars = true,
    600      scope = { 'global' },
    601      short_desc = N_('extension used for the backup file'),
    602      tags = { 'E589' },
    603      type = 'string',
    604      varname = 'p_bex',
    605    },
    606    {
    607      abbreviation = 'bsk',
    608      defaults = {
    609        if_true = '',
    610        doc = [["$TMPDIR/*,$TMP/*,$TEMP/*"
    611        Unix: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"
    612        Mac: "/private/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"]],
    613        meta = '/tmp/*',
    614      },
    615      deny_duplicates = true,
    616      desc = [=[
    617        A list of file patterns.  When one of the patterns matches with the
    618        name of the file which is written, no backup file is created.  Both
    619        the specified file name and the full path name of the file are used.
    620        The pattern is used like with |:autocmd|, see |autocmd-pattern|.
    621        Watch out for special characters, see |option-backslash|.
    622        When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
    623        default value.  "/tmp/*" is only used for Unix.
    624 
    625        WARNING: Not having a backup file means that when Vim fails to write
    626        your buffer correctly and then, for whatever reason, Vim exits, you
    627        lose both the original file and what you were writing.  Only disable
    628        backups if you don't care about losing the file.
    629 
    630        Note that environment variables are not expanded.  If you want to use
    631        $HOME you must expand it explicitly, e.g.: >vim
    632        	let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*'
    633 
    634        <	Note that the default also makes sure that "crontab -e" works (when a
    635        backup would be made by renaming the original file crontab won't see
    636        the newly created file).  Also see 'backupcopy' and |crontab|.
    637      ]=],
    638      full_name = 'backupskip',
    639      list = 'onecomma',
    640      scope = { 'global' },
    641      short_desc = N_('no backup for files that match these patterns'),
    642      type = 'string',
    643      varname = 'p_bsk',
    644    },
    645    {
    646      abbreviation = 'bo',
    647      defaults = 'all',
    648      values = {
    649        'all',
    650        'backspace',
    651        'cursor',
    652        'complete',
    653        'copy',
    654        'ctrlg',
    655        'error',
    656        'esc',
    657        'ex',
    658        'hangul',
    659        'insertmode',
    660        'lang',
    661        'mess',
    662        'showmatch',
    663        'operator',
    664        'register',
    665        'shell',
    666        'spell',
    667        'term',
    668        'wildmode',
    669      },
    670      flags = true,
    671      deny_duplicates = true,
    672      desc = [=[
    673        Specifies for which events the bell will not be rung.  It is a comma-
    674        separated list of items.  For each item that is present, the bell will
    675        be silenced.  This is most useful to specify specific events in insert
    676        mode to be silenced.
    677        You can also make it flash by using 'visualbell'.
    678 
    679        item	    meaning when present	~
    680        all	    All events.
    681        backspace   When hitting <BS> or <Del> and deleting results in an
    682        	    error.
    683        cursor	    Fail to move around using the cursor keys or
    684        	    <PageUp>/<PageDown> in |Insert-mode|.
    685        complete    Error occurred when using |i_CTRL-X_CTRL-K| or
    686        	    |i_CTRL-X_CTRL-T|.
    687        copy	    Cannot copy char from insert mode using |i_CTRL-Y| or
    688        	    |i_CTRL-E|.
    689        ctrlg	    Unknown Char after <C-G> in Insert mode.
    690        error	    Other Error occurred (e.g. try to join last line)
    691        	    (mostly used in |Normal-mode| or |Cmdline-mode|).
    692        esc	    hitting <Esc> in |Normal-mode|.
    693        hangul	    Ignored.
    694        lang	    Calling the beep module for Lua/Mzscheme/TCL.
    695        mess	    No output available for |g<|.
    696        showmatch   Error occurred for 'showmatch' function.
    697        operator    Empty region error |cpo-E|.
    698        register    Unknown register after <C-R> in |Insert-mode|.
    699        shell	    Bell from shell output |:!|.
    700        spell	    Error happened on spell suggest.
    701        term	    Bell from |:terminal| output.
    702        wildmode    More matches in |cmdline-completion| available
    703        	    (depends on the 'wildmode' setting).
    704 
    705        This is most useful to fine tune when in Insert mode the bell should
    706        be rung.  For Normal mode and Ex commands, the bell is often rung to
    707        indicate that an error occurred.  It can be silenced by adding the
    708        "error" keyword.
    709      ]=],
    710      full_name = 'belloff',
    711      list = 'comma',
    712      scope = { 'global' },
    713      short_desc = N_('do not ring the bell for these reasons'),
    714      type = 'string',
    715      varname = 'p_bo',
    716      flags_varname = 'bo_flags',
    717    },
    718    {
    719      abbreviation = 'bin',
    720      cb = 'did_set_binary',
    721      defaults = false,
    722      desc = [=[
    723        This option should be set before editing a binary file.  You can also
    724        use the |-b| Vim argument.  When this option is switched on a few
    725        options will be changed (also when it already was on):
    726        	'textwidth'  will be set to 0
    727        	'wrapmargin' will be set to 0
    728        	'modeline'   will be off
    729        	'expandtab'  will be off
    730        Also, 'fileformat' and 'fileformats' options will not be used, the
    731        file is read and written like 'fileformat' was "unix" (a single <NL>
    732        separates lines).
    733        The 'fileencoding' and 'fileencodings' options will not be used, the
    734        file is read without conversion.
    735        NOTE: When you start editing a(nother) file while the 'bin' option is
    736        on, settings from autocommands may change the settings again (e.g.,
    737        'textwidth'), causing trouble when editing.  You might want to set
    738        'bin' again when the file has been loaded.
    739        The previous values of these options are remembered and restored when
    740        'bin' is switched from on to off.  Each buffer has its own set of
    741        saved option values.
    742        To edit a file with 'binary' set you can use the |++bin| argument.
    743        This avoids you have to do ":set bin", which would have effect for all
    744        files you edit.
    745        When writing a file the <EOL> for the last line is only written if
    746        there was one in the original file (normally Vim appends an <EOL> to
    747        the last line if there is none; this would make the file longer).  See
    748        the 'endofline' option.
    749      ]=],
    750      full_name = 'binary',
    751      redraw = { 'statuslines' },
    752      scope = { 'buf' },
    753      short_desc = N_('read/write/edit file in binary mode'),
    754      type = 'boolean',
    755      varname = 'p_bin',
    756    },
    757    {
    758      cb = 'did_set_eof_eol_fixeol_bomb',
    759      defaults = false,
    760      desc = [=[
    761        When writing a file and the following conditions are met, a BOM (Byte
    762        Order Mark) is prepended to the file:
    763        - this option is on
    764        - the 'binary' option is off
    765        - 'fileencoding' is "utf-8", "ucs-2", "ucs-4" or one of the little/big
    766          endian variants.
    767        Some applications use the BOM to recognize the encoding of the file.
    768        Often used for UCS-2 files on MS-Windows.  For other applications it
    769        causes trouble, for example: "cat file1 file2" makes the BOM of file2
    770        appear halfway through the resulting file.  Gcc doesn't accept a BOM.
    771        When Vim reads a file and 'fileencodings' starts with "ucs-bom", a
    772        check for the presence of the BOM is done and 'bomb' set accordingly.
    773        Unless 'binary' is set, it is removed from the first line, so that you
    774        don't see it when editing.  When you don't change the options, the BOM
    775        will be restored when writing the file.
    776      ]=],
    777      full_name = 'bomb',
    778      no_mkrc = true,
    779      redraw = { 'statuslines' },
    780      scope = { 'buf' },
    781      short_desc = N_('a Byte Order Mark to the file'),
    782      type = 'boolean',
    783      varname = 'p_bomb',
    784    },
    785    {
    786      abbreviation = 'brk',
    787      cb = 'did_set_breakat',
    788      defaults = {
    789        if_true = ' \t!@*-+;:,./?',
    790        doc = '" ^I!@*-+;:,./?"',
    791      },
    792      flags = true,
    793      desc = [=[
    794        This option lets you choose which characters might cause a line
    795        break if 'linebreak' is on.  Only works for ASCII characters.
    796      ]=],
    797      full_name = 'breakat',
    798      list = 'flags',
    799      redraw = { 'all_windows' },
    800      scope = { 'global' },
    801      short_desc = N_('characters that may cause a line break'),
    802      type = 'string',
    803      varname = 'p_breakat',
    804    },
    805    {
    806      abbreviation = 'bri',
    807      defaults = false,
    808      desc = [=[
    809        Every wrapped line will continue visually indented (same amount of
    810        space as the beginning of that line), thus preserving horizontal
    811        blocks of text.
    812      ]=],
    813      full_name = 'breakindent',
    814      redraw = { 'current_window' },
    815      scope = { 'win' },
    816      short_desc = N_('wrapped line repeats indent'),
    817      type = 'boolean',
    818    },
    819    {
    820      abbreviation = 'briopt',
    821      cb = 'did_set_breakindentopt',
    822      defaults = '',
    823      -- Keep this in sync with briopt_check().
    824      values = { 'shift:', 'min:', 'sbr', 'list:', 'column:' },
    825      deny_duplicates = true,
    826      desc = [=[
    827        Settings for 'breakindent'.  It can consist of the following optional
    828        items and must be separated by a comma:
    829        	min:{n}	    Minimum text width that will be kept after
    830        		    applying 'breakindent', even if the resulting
    831        		    text should normally be narrower.  This prevents
    832        		    text indented almost to the right window border
    833        		    occupying lots of vertical space when broken.
    834        		    (default: 20)
    835        	shift:{n}   After applying 'breakindent', the wrapped line's
    836        		    beginning will be shifted by the given number of
    837        		    characters.  It permits dynamic French paragraph
    838        		    indentation (negative) or emphasizing the line
    839        		    continuation (positive).
    840        		    (default: 0)
    841        	sbr	    Display the 'showbreak' value before applying the
    842        		    additional indent.
    843        		    (default: off)
    844        	list:{n}    Adds an additional indent for lines that match a
    845        		    numbered or bulleted list (using the
    846        		    'formatlistpat' setting).
    847        		    (default: 0)
    848        	list:-1	    Uses the width of a match with 'formatlistpat' for
    849        		    indentation.
    850        	column:{n}  Indent at column {n}.  Will overrule the other
    851        		    sub-options.  Note: an additional indent may be
    852        		    added for the 'showbreak' setting.
    853        		    (default: off)
    854      ]=],
    855      full_name = 'breakindentopt',
    856      list = 'onecomma',
    857      redraw = { 'current_buffer' },
    858      scope = { 'win' },
    859      short_desc = N_("settings for 'breakindent'"),
    860      type = 'string',
    861    },
    862    {
    863      abbreviation = 'bsdir',
    864      defaults = {
    865        if_true = '',
    866        doc = '"last"',
    867      },
    868      desc = [=[
    869        Which directory to use for the file browser:
    870           last		Use same directory as with last file browser, where a
    871        		file was opened or saved.
    872           buffer	Use the directory of the related buffer.
    873           current	Use the current directory.
    874           {path}	Use the specified directory
    875      ]=],
    876      full_name = 'browsedir',
    877      scope = { 'global' },
    878      short_desc = N_('which directory to start browsing in'),
    879      type = 'string',
    880      immutable = true,
    881    },
    882    {
    883      abbreviation = 'bh',
    884      cb = 'did_set_bufhidden',
    885      defaults = '',
    886      values = { '', 'hide', 'unload', 'delete', 'wipe' },
    887      desc = [=[
    888        This option specifies what happens when a buffer is no longer
    889        displayed in a window:
    890          <empty>	follow the global 'hidden' option
    891          hide		hide the buffer (don't unload it), even if 'hidden' is
    892        		not set
    893          unload	unload the buffer, even if 'hidden' is set; the
    894        		|:hide| command will also unload the buffer
    895          delete	delete the buffer from the buffer list, even if
    896        		'hidden' is set; the |:hide| command will also delete
    897        		the buffer, making it behave like |:bdelete|
    898          wipe		wipe the buffer from the buffer list, even if
    899        		'hidden' is set; the |:hide| command will also wipe
    900        		out the buffer, making it behave like |:bwipeout|
    901 
    902        CAREFUL: when "unload", "delete" or "wipe" is used changes in a buffer
    903        are lost without a warning.  Also, these values may break autocommands
    904        that switch between buffers temporarily.
    905        This option is used together with 'buftype' and 'swapfile' to specify
    906        special kinds of buffers.   See |special-buffers|.
    907      ]=],
    908      full_name = 'bufhidden',
    909      noglob = true,
    910      scope = { 'buf' },
    911      short_desc = N_('what to do when buffer is no longer in window'),
    912      type = 'string',
    913      varname = 'p_bh',
    914    },
    915    {
    916      abbreviation = 'bl',
    917      cb = 'did_set_buflisted',
    918      defaults = true,
    919      desc = [=[
    920        When this option is set, the buffer shows up in the buffer list.  If
    921        it is reset it is not used for ":bnext", "ls", the Buffers menu, etc.
    922        This option is reset by Vim for buffers that are only used to remember
    923        a file name or marks.  Vim sets it when starting to edit a buffer.
    924        But not when moving to a buffer with ":buffer".
    925      ]=],
    926      full_name = 'buflisted',
    927      noglob = true,
    928      scope = { 'buf' },
    929      short_desc = N_('whether the buffer shows up in the buffer list'),
    930      tags = { 'E85' },
    931      type = 'boolean',
    932      varname = 'p_bl',
    933    },
    934    {
    935      abbreviation = 'bt',
    936      cb = 'did_set_buftype',
    937      defaults = '',
    938      values = {
    939        '',
    940        'acwrite',
    941        'help',
    942        'nofile',
    943        'nowrite',
    944        'quickfix',
    945        'terminal',
    946        'prompt',
    947      },
    948      desc = [=[
    949        The value of this option specifies the type of a buffer:
    950          <empty>	normal buffer
    951          acwrite	buffer will always be written with |BufWriteCmd|s
    952          help		help buffer (do not set this manually)
    953          nofile	buffer is not related to a file, will not be written
    954          nowrite	buffer will not be written
    955          prompt	buffer where only the last section can be edited, for
    956        		use by plugins. |prompt-buffer|
    957          quickfix	list of errors |:cwindow| or locations |:lwindow|
    958          terminal	|terminal-emulator| buffer
    959 
    960        This option is used together with 'bufhidden' and 'swapfile' to
    961        specify special kinds of buffers.   See |special-buffers|.
    962        Also see |win_gettype()|, which returns the type of the window.
    963 
    964        Be careful with changing this option, it can have many side effects!
    965        One such effect is that Vim will not check the timestamp of the file,
    966        if the file is changed by another program this will not be noticed.
    967 
    968        A "quickfix" buffer is only used for the error list and the location
    969        list.  This value is set by the |:cwindow| and |:lwindow| commands and
    970        you are not supposed to change it.
    971 
    972        "nofile" and "nowrite" buffers are similar:
    973        both:		The buffer is not to be written to disk, ":w" doesn't
    974        		work (":w filename" does work though).
    975        both:		The buffer is never considered to be 'modified'.
    976        		There is no warning when the changes will be lost, for
    977        		example when you quit Vim.
    978        both:		A swap file is only created when using too much memory
    979        		(when 'swapfile' has been reset there is never a swap
    980        		file).
    981        nofile only:	The buffer name is fixed, it is not handled like a
    982        		file name.  It is not modified in response to a |:cd|
    983        		command.
    984        both:		When using ":e bufname" and already editing "bufname"
    985        		the buffer is made empty and autocommands are
    986        		triggered as usual for |:edit|.
    987        						*E676*
    988        "acwrite" implies that the buffer name is not related to a file, like
    989        "nofile", but it will be written.  Thus, in contrast to "nofile" and
    990        "nowrite", ":w" does work and a modified buffer can't be abandoned
    991        without saving.  For writing there must be matching |BufWriteCmd|,
    992        |FileWriteCmd| or |FileAppendCmd| autocommands.
    993      ]=],
    994      full_name = 'buftype',
    995      noglob = true,
    996      scope = { 'buf' },
    997      tags = { 'E382' },
    998      short_desc = N_('special type of buffer'),
    999      type = 'string',
   1000      varname = 'p_bt',
   1001    },
   1002    {
   1003      defaults = 0,
   1004      desc = [=[
   1005        Sets a buffer "busy" status. Indicated in the default statusline.
   1006        When busy status is larger then 0 busy flag is shown in statusline.
   1007        The semantics of "busy" are arbitrary, typically decided by the plugin that owns the buffer.
   1008      ]=],
   1009      full_name = 'busy',
   1010      redraw = { 'statuslines' },
   1011      noglob = true,
   1012      scope = { 'buf' },
   1013      short_desc = N_('buffer is busy'),
   1014      type = 'number',
   1015      varname = 'p_busy',
   1016    },
   1017    {
   1018      abbreviation = 'cmp',
   1019      defaults = 'internal,keepascii',
   1020      values = { 'internal', 'keepascii' },
   1021      flags = true,
   1022      deny_duplicates = true,
   1023      desc = [=[
   1024        Specifies details about changing the case of letters.  It may contain
   1025        these words, separated by a comma:
   1026        internal	Use internal case mapping functions, the current
   1027        		locale does not change the case mapping. When
   1028        		"internal" is omitted, the towupper() and towlower()
   1029        		system library functions are used when available.
   1030        keepascii	For the ASCII characters (0x00 to 0x7f) use the US
   1031        		case mapping, the current locale is not effective.
   1032        		This probably only matters for Turkish.
   1033      ]=],
   1034      full_name = 'casemap',
   1035      list = 'onecomma',
   1036      scope = { 'global' },
   1037      short_desc = N_('specifies how case of letters is changed'),
   1038      type = 'string',
   1039      varname = 'p_cmp',
   1040      flags_varname = 'cmp_flags',
   1041    },
   1042    {
   1043      abbreviation = 'cdh',
   1044      defaults = {
   1045        condition = 'MSWIN',
   1046        if_false = true,
   1047        if_true = false,
   1048        doc = [[on on Unix, off on Windows]],
   1049      },
   1050      desc = [=[
   1051        When on, |:cd|, |:tcd| and |:lcd| without an argument changes the
   1052        current working directory to the |$HOME| directory like in Unix.
   1053        When off, those commands just print the current directory name.
   1054        This option cannot be set from a |modeline| or in the |sandbox|, for
   1055        security reasons.
   1056      ]=],
   1057      full_name = 'cdhome',
   1058      scope = { 'global' },
   1059      secure = true,
   1060      short_desc = N_(':cd without argument goes to the home directory'),
   1061      type = 'boolean',
   1062      varname = 'p_cdh',
   1063    },
   1064    {
   1065      abbreviation = 'cd',
   1066      defaults = {
   1067        if_true = ',,',
   1068        doc = 'equivalent to $CDPATH or ",,"',
   1069      },
   1070      deny_duplicates = true,
   1071      desc = [=[
   1072        This is a list of directories which will be searched when using the
   1073        |:cd|, |:tcd| and |:lcd| commands, provided that the directory being
   1074        searched for has a relative path, not an absolute part starting with
   1075        "/", "./" or "../", the 'cdpath' option is not used then.
   1076        The 'cdpath' option's value has the same form and semantics as
   1077        'path'.  Also see |file-searching|.
   1078        The default value is taken from $CDPATH, with a "," prepended to look
   1079        in the current directory first.
   1080        If the default value taken from $CDPATH is not what you want, include
   1081        a modified version of the following command in your vimrc file to
   1082        override it: >vim
   1083          let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
   1084        <	Environment variables are expanded |:set_env|.
   1085        This option cannot be set from a |modeline| or in the |sandbox|, for
   1086        security reasons.
   1087        (parts of 'cdpath' can be passed to the shell to expand file names).
   1088      ]=],
   1089      expand = true,
   1090      full_name = 'cdpath',
   1091      list = 'comma',
   1092      scope = { 'global' },
   1093      secure = true,
   1094      short_desc = N_('list of directories searched with ":cd"'),
   1095      tags = { 'E344', 'E346' },
   1096      type = 'string',
   1097      varname = 'p_cdpath',
   1098    },
   1099    {
   1100      cb = 'did_set_cedit',
   1101      defaults = {
   1102        if_true = macros('CTRL_F_STR', 'string'),
   1103        doc = 'CTRL-F',
   1104      },
   1105      desc = [=[
   1106        The key used in Command-line Mode to open the command-line window.
   1107        Only non-printable keys are allowed.
   1108        The key can be specified as a single character, but it is difficult to
   1109        type.  The preferred way is to use |key-notation| (e.g. <Up>, <C-F>) or
   1110        a letter preceded with a caret (e.g. `^F` is CTRL-F).  Examples: >vim
   1111        	set cedit=^Y
   1112        	set cedit=<Esc>
   1113        <	|Nvi| also has this option, but it only uses the first character.
   1114        See |cmdwin|.
   1115      ]=],
   1116      full_name = 'cedit',
   1117      scope = { 'global' },
   1118      short_desc = N_('used to open the command-line window'),
   1119      type = 'string',
   1120      varname = 'p_cedit',
   1121    },
   1122    {
   1123      defaults = 0,
   1124      desc = [=[
   1125        |channel| connected to the buffer, or 0 if no channel is connected.
   1126        In a |:terminal| buffer this is the terminal channel.
   1127        Read-only.
   1128      ]=],
   1129      full_name = 'channel',
   1130      no_mkrc = true,
   1131      nodefault = true,
   1132      scope = { 'buf' },
   1133      short_desc = N_('Channel connected to the buffer'),
   1134      type = 'number',
   1135      varname = 'p_channel',
   1136    },
   1137    {
   1138      abbreviation = 'ccv',
   1139      cb = 'did_set_optexpr',
   1140      defaults = '',
   1141      desc = [=[
   1142        An expression that is used for character encoding conversion.  It is
   1143        evaluated when a file that is to be read or has been written has a
   1144        different encoding from what is desired.
   1145        'charconvert' is not used when the internal iconv() function is
   1146        supported and is able to do the conversion.  Using iconv() is
   1147        preferred, because it is much faster.
   1148        'charconvert' is not used when reading stdin |--|, because there is no
   1149        file to convert from.  You will have to save the text in a file first.
   1150        The expression must return zero, false or an empty string for success,
   1151        non-zero or true for failure.
   1152        See |encoding-names| for possible encoding names.
   1153        Additionally, names given in 'fileencodings' and 'fileencoding' are
   1154        used.
   1155        Conversion between "latin1", "unicode", "ucs-2", "ucs-4" and "utf-8"
   1156        is done internally by Vim, 'charconvert' is not used for this.
   1157        Also used for Unicode conversion.
   1158        Example: >vim
   1159        	set charconvert=CharConvert()
   1160        	fun CharConvert()
   1161        	  system("recode "
   1162        		\ .. v:charconvert_from .. ".." .. v:charconvert_to
   1163        		\ .. " <" .. v:fname_in .. " >" .. v:fname_out)
   1164        	  return v:shell_error
   1165        	endfun
   1166        <	The related Vim variables are:
   1167        	v:charconvert_from	name of the current encoding
   1168        	v:charconvert_to	name of the desired encoding
   1169        	v:fname_in		name of the input file
   1170        	v:fname_out		name of the output file
   1171        Note that v:fname_in and v:fname_out will never be the same.
   1172 
   1173        The advantage of using a function call without arguments is that it is
   1174        faster, see |expr-option-function|.
   1175 
   1176        If the 'charconvert' expression starts with s: or |<SID>|, then it is
   1177        replaced with the script ID (|local-function|).  Example: >vim
   1178        	set charconvert=s:MyConvert()
   1179        	set charconvert=<SID>SomeConvert()
   1180        <	Otherwise the expression is evaluated in the context of the script
   1181        where the option was set, thus script-local items are available.
   1182 
   1183        This option cannot be set from a |modeline| or in the |sandbox|, for
   1184        security reasons.
   1185      ]=],
   1186      full_name = 'charconvert',
   1187      scope = { 'global' },
   1188      secure = true,
   1189      short_desc = N_('expression for character encoding conversion'),
   1190      type = 'string',
   1191      tags = { 'E202', 'E214', 'E513' },
   1192      varname = 'p_ccv',
   1193    },
   1194    {
   1195      abbreviation = 'chi',
   1196      cb = 'did_set_xhistory',
   1197      defaults = 10,
   1198      desc = [=[
   1199        Number of quickfix lists that should be remembered for the quickfix
   1200        stack.  Must be between 1 and 100.  If the option is set to a value
   1201        that is lower than the amount of entries in the quickfix list stack,
   1202        entries will be removed starting from the oldest one.  If the current
   1203        quickfix list was removed, then the quickfix list at top of the stack
   1204        (the most recently created) will be used in its place.  For additional
   1205        info, see |quickfix-stack|.
   1206      ]=],
   1207      full_name = 'chistory',
   1208      scope = { 'global' },
   1209      short_desc = N_('number of quickfix lists stored in history'),
   1210      tags = { 'E1542', 'E1543' },
   1211      type = 'number',
   1212      varname = 'p_chi',
   1213    },
   1214    {
   1215      abbreviation = 'cin',
   1216      defaults = false,
   1217      desc = [=[
   1218        Enables automatic C program indenting.  See 'cinkeys' to set the keys
   1219        that trigger reindenting in insert mode and 'cinoptions' to set your
   1220        preferred indent style.
   1221        If 'indentexpr' is not empty, it overrules 'cindent'.
   1222        If 'lisp' is not on and both 'indentexpr' and 'equalprg' are empty,
   1223        the "=" operator indents using this algorithm rather than calling an
   1224        external program.
   1225        See |C-indenting|.
   1226        When you don't like the way 'cindent' works, try the 'smartindent'
   1227        option or 'indentexpr'.
   1228      ]=],
   1229      full_name = 'cindent',
   1230      scope = { 'buf' },
   1231      short_desc = N_('do C program indenting'),
   1232      type = 'boolean',
   1233      varname = 'p_cin',
   1234    },
   1235    {
   1236      abbreviation = 'cink',
   1237      defaults = '0{,0},0),0],:,0#,!^F,o,O,e',
   1238      deny_duplicates = true,
   1239      desc = [=[
   1240        A list of keys that, when typed in Insert mode, cause reindenting of
   1241        the current line.  Only used if 'cindent' is on and 'indentexpr' is
   1242        empty.
   1243        For the format of this option see |cinkeys-format|.
   1244        See |C-indenting|.
   1245      ]=],
   1246      full_name = 'cinkeys',
   1247      list = 'onecomma',
   1248      scope = { 'buf' },
   1249      short_desc = N_("keys that trigger indent when 'cindent' is set"),
   1250      type = 'string',
   1251      varname = 'p_cink',
   1252    },
   1253    {
   1254      abbreviation = 'cino',
   1255      cb = 'did_set_cinoptions',
   1256      defaults = '',
   1257      deny_duplicates = true,
   1258      desc = [=[
   1259        The 'cinoptions' affect the way 'cindent' reindents lines in a C
   1260        program.  See |cinoptions-values| for the values of this option, and
   1261        |C-indenting| for info on C indenting in general.
   1262      ]=],
   1263      full_name = 'cinoptions',
   1264      list = 'onecomma',
   1265      scope = { 'buf' },
   1266      short_desc = N_("how to do indenting when 'cindent' is set"),
   1267      type = 'string',
   1268      varname = 'p_cino',
   1269    },
   1270    {
   1271      abbreviation = 'cinsd',
   1272      defaults = 'public,protected,private',
   1273      deny_duplicates = true,
   1274      desc = [=[
   1275        Keywords that are interpreted as a C++ scope declaration by |cino-g|.
   1276        Useful e.g. for working with the Qt framework that defines additional
   1277        scope declarations "signals", "public slots" and "private slots": >vim
   1278        	set cinscopedecls+=signals,public\ slots,private\ slots
   1279        <
   1280      ]=],
   1281      full_name = 'cinscopedecls',
   1282      list = 'onecomma',
   1283      scope = { 'buf' },
   1284      short_desc = N_("words that are recognized by 'cino-g'"),
   1285      type = 'string',
   1286      varname = 'p_cinsd',
   1287    },
   1288    {
   1289      abbreviation = 'cinw',
   1290      defaults = 'if,else,while,do,for,switch',
   1291      deny_duplicates = true,
   1292      desc = [=[
   1293        These keywords start an extra indent in the next line when
   1294        'smartindent' or 'cindent' is set.  For 'cindent' this is only done at
   1295        an appropriate place (inside {}).
   1296        Note that 'ignorecase' isn't used for 'cinwords'.  If case doesn't
   1297        matter, include the keyword both the uppercase and lowercase:
   1298        "if,If,IF".
   1299      ]=],
   1300      full_name = 'cinwords',
   1301      list = 'onecomma',
   1302      scope = { 'buf' },
   1303      short_desc = N_("words where 'si' and 'cin' add an indent"),
   1304      type = 'string',
   1305      varname = 'p_cinw',
   1306    },
   1307    {
   1308      abbreviation = 'cb',
   1309      defaults = '',
   1310      values = { 'unnamed', 'unnamedplus' },
   1311      flags = true,
   1312      desc = [=[
   1313        This option is a list of comma-separated names.
   1314        These names are recognized:
   1315 
   1316        					*clipboard-unnamed*
   1317        unnamed		When included, Vim will use the clipboard register "*"
   1318        		for all yank, delete, change and put operations which
   1319        		would normally go to the unnamed register.  When a
   1320        		register is explicitly specified, it will always be
   1321        		used regardless of whether "unnamed" is in 'clipboard'
   1322        		or not.  The clipboard register can always be
   1323        		explicitly accessed using the "* notation.  Also see
   1324        		|clipboard|.
   1325 
   1326        					*clipboard-unnamedplus*
   1327        unnamedplus	A variant of the "unnamed" flag which uses the
   1328        		clipboard register "+" (|quoteplus|) instead of
   1329        		register "*" for all yank, delete, change and put
   1330        		operations which would normally go to the unnamed
   1331        		register.  When "unnamed" is also included to the
   1332        		option, yank and delete operations (but not put)
   1333        		will additionally copy the text into register
   1334        		"*". See |clipboard|.
   1335      ]=],
   1336      deny_duplicates = true,
   1337      full_name = 'clipboard',
   1338      list = 'onecomma',
   1339      scope = { 'global' },
   1340      short_desc = N_('use the clipboard as the unnamed register'),
   1341      type = 'string',
   1342      varname = 'p_cb',
   1343      flags_varname = 'cb_flags',
   1344    },
   1345    {
   1346      abbreviation = 'ch',
   1347      cb = 'did_set_cmdheight',
   1348      defaults = 1,
   1349      desc = [=[
   1350        Number of screen lines to use for the command-line.  Helps avoiding
   1351        |hit-enter| prompts.
   1352        The value of this option is stored with the tab page, so that each tab
   1353        page can have a different value.
   1354 
   1355        When 'cmdheight' is zero, there is no command-line unless it is being
   1356        used.  The command-line will cover the last line of the screen when
   1357        shown.
   1358 
   1359        WARNING: `cmdheight=0` is EXPERIMENTAL. Expect some unwanted behaviour.
   1360        Some 'shortmess' flags and similar mechanism might fail to take effect,
   1361        causing unwanted hit-enter prompts.  Some informative messages, both
   1362        from Nvim itself and plugins, will not be displayed.
   1363      ]=],
   1364      full_name = 'cmdheight',
   1365      redraw = { 'all_windows' },
   1366      scope = { 'global' },
   1367      short_desc = N_('number of lines to use for the command-line'),
   1368      type = 'number',
   1369      varname = 'p_ch',
   1370    },
   1371    {
   1372      abbreviation = 'cwh',
   1373      defaults = 7,
   1374      desc = [=[
   1375        Number of screen lines to use for the command-line window. |cmdwin|
   1376      ]=],
   1377      full_name = 'cmdwinheight',
   1378      scope = { 'global' },
   1379      short_desc = N_('height of the command-line window'),
   1380      type = 'number',
   1381      varname = 'p_cwh',
   1382    },
   1383    {
   1384      abbreviation = 'cc',
   1385      cb = 'did_set_colorcolumn',
   1386      defaults = '',
   1387      deny_duplicates = true,
   1388      desc = [=[
   1389        'colorcolumn' is a comma-separated list of screen columns that are
   1390        highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
   1391        text.  Will make screen redrawing slower.
   1392        The screen column can be an absolute number, or a number preceded with
   1393        '+' or '-', which is added to or subtracted from 'textwidth'. >vim
   1394 
   1395        	set cc=+1	  " highlight column after 'textwidth'
   1396        	set cc=+1,+2,+3  " highlight three columns after 'textwidth'
   1397        	hi ColorColumn ctermbg=lightgrey guibg=lightgrey
   1398        <
   1399        When 'textwidth' is zero then the items with '-' and '+' are not used.
   1400        A maximum of 256 columns are highlighted.
   1401      ]=],
   1402      full_name = 'colorcolumn',
   1403      list = 'onecomma',
   1404      redraw = { 'current_window', 'highlight_only' },
   1405      scope = { 'win' },
   1406      short_desc = N_('columns to highlight'),
   1407      type = 'string',
   1408    },
   1409    {
   1410      abbreviation = 'co',
   1411      cb = 'did_set_lines_or_columns',
   1412      defaults = {
   1413        if_true = macros('DFLT_COLS', 'number'),
   1414        doc = '80 or terminal width',
   1415      },
   1416      desc = [=[
   1417        Number of columns of the screen.  Normally this is set by the terminal
   1418        initialization and does not have to be set by hand.
   1419        When Vim is running in the GUI or in a resizable window, setting this
   1420        option will cause the window size to be changed.  When you only want
   1421        to use the size for the GUI, put the command in your |ginit.vim| file.
   1422        When you set this option and Vim is unable to change the physical
   1423        number of columns of the display, the display may be messed up.  For
   1424        the GUI it is always possible and Vim limits the number of columns to
   1425        what fits on the screen.  You can use this command to get the widest
   1426        window possible: >vim
   1427        	set columns=9999
   1428        <	Minimum value is 12, maximum value is 10000.
   1429      ]=],
   1430      full_name = 'columns',
   1431      no_mkrc = true,
   1432      scope = { 'global' },
   1433      short_desc = N_('number of columns in the display'),
   1434      tags = { 'E594' },
   1435      type = 'number',
   1436      varname = 'p_columns',
   1437    },
   1438    {
   1439      abbreviation = 'com',
   1440      cb = 'did_set_comments',
   1441      defaults = 's1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-,fb:•',
   1442      deny_duplicates = true,
   1443      desc = [=[
   1444        A comma-separated list of strings that can start a comment line.  See
   1445        |format-comments|.  See |option-backslash| about using backslashes to
   1446        insert a space.
   1447      ]=],
   1448      full_name = 'comments',
   1449      list = 'onecomma',
   1450      scope = { 'buf' },
   1451      short_desc = N_('patterns that can start a comment line'),
   1452      tags = { 'E524', 'E525' },
   1453      type = 'string',
   1454      varname = 'p_com',
   1455    },
   1456    {
   1457      abbreviation = 'cms',
   1458      cb = 'did_set_commentstring',
   1459      defaults = '',
   1460      desc = [=[
   1461        A template for a comment.  The "%s" in the value is replaced with the
   1462        comment text, and should be padded with a space when possible.
   1463        Used for |commenting| and to add markers for folding, see |fold-marker|.
   1464      ]=],
   1465      full_name = 'commentstring',
   1466      scope = { 'buf' },
   1467      short_desc = N_('template for comments; used for fold marker'),
   1468      tags = { 'E537' },
   1469      type = 'string',
   1470      varname = 'p_cms',
   1471    },
   1472    {
   1473      abbreviation = 'cp',
   1474      defaults = false,
   1475      full_name = 'compatible',
   1476      scope = { 'global' },
   1477      short_desc = N_('Deprecated'),
   1478      type = 'boolean',
   1479      immutable = true,
   1480    },
   1481    {
   1482      abbreviation = 'cpt',
   1483      cb = 'did_set_complete',
   1484      defaults = '.,w,b,u,t',
   1485      values = { '.', 'w', 'b', 'u', 'k', 'kspell', 's', 'i', 'd', ']', 't', 'U', 'f', 'F', 'o' },
   1486      deny_duplicates = true,
   1487      desc = [=[
   1488        This option controls how completion |ins-completion| behaves when
   1489        using CTRL-P, CTRL-N, or |ins-autocompletion|.  It is also used for
   1490        whole-line completion |i_CTRL-X_CTRL-L|.  It indicates the type of
   1491        completion and the places to scan.  It is a comma-separated list of
   1492        flags:
   1493        .	scan the current buffer ('wrapscan' is ignored)
   1494        w	scan buffers from other windows
   1495        b	scan other loaded buffers that are in the buffer list
   1496        u	scan the unloaded buffers that are in the buffer list
   1497        U	scan the buffers that are not in the buffer list
   1498        k	scan the files given with the 'dictionary' option
   1499        kspell  use the currently active spell checking |spell|
   1500        k{dict}	scan the file {dict}.  Several "k" flags can be given,
   1501        	patterns are valid too.  For example: >vim
   1502        		set cpt=k/usr/dict/*,k~/spanish
   1503        <	s	scan the files given with the 'thesaurus' option
   1504        s{tsr}	scan the file {tsr}.  Several "s" flags can be given, patterns
   1505        	are valid too.
   1506        i	scan current and included files
   1507        d	scan current and included files for defined name or macro
   1508        	|i_CTRL-X_CTRL-D|
   1509        ]	tag completion
   1510        t	same as "]"
   1511        f	scan the buffer names (as opposed to buffer contents)
   1512        F{func}	call the function {func}.  Multiple "F" flags may be
   1513        	specified.  Refer to |complete-functions| for details on how
   1514        	the function is invoked and what it should return.  The value
   1515        	can be the name of a function or a |Funcref|.  For |Funcref|
   1516        	values, spaces must be escaped with a backslash ('\'), and
   1517        	commas with double backslashes ('\\') (see |option-backslash|).
   1518        	Unlike other sources, functions can provide completions
   1519        	starting from a non-keyword character before the cursor, and
   1520        	their start position for replacing text may differ from other
   1521        	sources.  If the Dict returned by the {func} includes
   1522        	`{"refresh": "always"}`, the function will be invoked again
   1523        	whenever the leading text changes.
   1524        	If generating matches is potentially slow, call
   1525        	|complete_check()| periodically to keep Vim responsive.  This
   1526        	is especially important for |ins-autocompletion|.
   1527        F	equivalent to using "F{func}", where the function is taken
   1528        	from the 'completefunc' option.
   1529        o	equivalent to using "F{func}", where the function is taken
   1530        	from the 'omnifunc' option.
   1531 
   1532        Unloaded buffers are not loaded, thus their autocmds |:autocmd| are
   1533        not executed, this may lead to unexpected completions from some files
   1534        (gzipped files for example).  Unloaded buffers are not scanned for
   1535        whole-line completion.
   1536 
   1537        CTRL-N, CTRL-P, and |ins-autocompletion| can be used for any
   1538        'iskeyword'-based completion (dictionary |i_CTRL-X_CTRL-K|, included
   1539        patterns |i_CTRL-X_CTRL-I|, tags |i_CTRL-X_CTRL-]|, and normal
   1540        expansions).  With the "F" and "o" flags in 'complete', non-keywords
   1541        can also be completed.
   1542 
   1543        An optional match limit can be specified for a completion source by
   1544        appending a caret ("^") followed by a {count} to the source flag.
   1545        For example: ".^9,w,u,t^5" limits matches from the current buffer to 9
   1546        and from tags to 5.  Other sources remain unlimited.
   1547        Note: The match limit takes effect only during forward completion
   1548        (CTRL-N) and is ignored during backward completion (CTRL-P).
   1549      ]=],
   1550      full_name = 'complete',
   1551      list = 'onecomma',
   1552      scope = { 'buf' },
   1553      short_desc = N_('specify how Insert mode completion works'),
   1554      tags = { 'E535' },
   1555      type = 'string',
   1556      varname = 'p_cpt',
   1557    },
   1558    {
   1559      abbreviation = 'cfu',
   1560      cb = 'did_set_completefunc',
   1561      defaults = '',
   1562      desc = [=[
   1563        This option specifies a function to be used for Insert mode completion
   1564        with CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|
   1565        See |complete-functions| for an explanation of how the function is
   1566        invoked and what it should return.  The value can be the name of a
   1567        function, a |lambda| or a |Funcref|.  See |option-value-function| for
   1568        more information.
   1569        This option cannot be set from a |modeline| or in the |sandbox|, for
   1570        security reasons.
   1571      ]=],
   1572      full_name = 'completefunc',
   1573      func = true,
   1574      scope = { 'buf' },
   1575      secure = true,
   1576      short_desc = N_('function to be used for Insert mode completion'),
   1577      type = 'string',
   1578      varname = 'p_cfu',
   1579    },
   1580    {
   1581      abbreviation = 'cia',
   1582      cb = 'did_set_completeitemalign',
   1583      defaults = 'abbr,kind,menu',
   1584      flags = true,
   1585      deny_duplicates = true,
   1586      desc = [=[
   1587        A comma-separated list of strings that controls the alignment and
   1588        display order of items in the popup menu during Insert mode
   1589        completion.  The supported values are "abbr", "kind", and "menu".
   1590        These values allow customizing how |complete-items| are shown in the
   1591        popup menu.  Note: must always contain those three values in any
   1592        order.
   1593      ]=],
   1594      full_name = 'completeitemalign',
   1595      list = 'onecomma',
   1596      scope = { 'global' },
   1597      short_desc = N_('Insert mode completion item align order'),
   1598      type = 'string',
   1599      varname = 'p_cia',
   1600    },
   1601    {
   1602      abbreviation = 'cot',
   1603      cb = 'did_set_completeopt',
   1604      defaults = 'menu,popup',
   1605      values = {
   1606        'menu',
   1607        'menuone',
   1608        'longest',
   1609        'preview',
   1610        'popup',
   1611        'noinsert',
   1612        'noselect',
   1613        'fuzzy',
   1614        'nosort',
   1615        'preinsert',
   1616        'nearest',
   1617      },
   1618      flags = true,
   1619      deny_duplicates = true,
   1620      desc = [=[
   1621        A comma-separated list of options for Insert mode completion
   1622        |ins-completion|.  The supported values are:
   1623 
   1624           fuzzy    Enable |fuzzy-matching| for completion candidates.  This
   1625        	    allows for more flexible and intuitive matching, where
   1626        	    characters can be skipped and matches can be found even
   1627        	    if the exact sequence is not typed (disabled for thesaurus
   1628        	    completion |compl-thesaurus|).
   1629 
   1630           longest
   1631        	    When 'autocomplete' is not active, only the longest common
   1632        	    prefix of the matches is inserted (disabled for thesaurus
   1633        	    completion |compl-thesaurus|).  If the popup menu is
   1634        	    displayed, you can use CTRL-L to add more characters.
   1635        	    Whether case is ignored depends on the type of completion.
   1636        	    For buffer text the 'ignorecase' option applies.
   1637 
   1638        	    When 'autocomplete' is active and no completion item is
   1639        	    selected, the longest common prefix of the matches is
   1640        	    inserted after the cursor.  The prefix is taken either
   1641        	    from all displayed items or only from items in the current
   1642        	    buffer.  The inserted text is highlighted with
   1643        	    |hl-PreInsert|, and the cursor position does not change
   1644        	    (similar to `"preinsert"`).  Press CTRL-Y to accept.
   1645        	    See also |preinserted()|.
   1646 
   1647           menu	    Use a popup menu to show the possible completions.  The
   1648        	    menu is only shown when there is more than one match and
   1649        	    sufficient colors are available.  |ins-completion-menu|
   1650 
   1651           menuone  Use the popup menu also when there is only one match.
   1652        	    Useful when there is additional information about the
   1653        	    match, e.g., what file it comes from.
   1654 
   1655           nearest  Matches are listed based on their proximity to the cursor
   1656        	    position, unlike the default behavior, which only
   1657        	    considers proximity for matches appearing below the
   1658        	    cursor.  This applies only to matches from the current
   1659        	    buffer.  No effect if "fuzzy" is present.
   1660 
   1661           noinsert Do not insert any text for a match until the user selects
   1662        	    a match from the menu.  Only works in combination with
   1663        	    "menu" or "menuone". No effect if "longest" is present.
   1664 
   1665           noselect Same as "noinsert", except that no menu item is
   1666        	    pre-selected.  If both "noinsert" and "noselect" are
   1667        	    present, "noselect" takes precedence.  This is enabled
   1668        	    automatically when 'autocomplete' is on, unless
   1669        	    "preinsert" is also enabled.
   1670 
   1671           nosort   Disable sorting of completion candidates based on fuzzy
   1672        	    scores when "fuzzy" is enabled.  Candidates will appear
   1673        	    in their original order.
   1674 
   1675           popup    Show extra information about the currently selected
   1676        	    completion in a popup window.  Only works in combination
   1677        	    with "menu" or "menuone".  Overrides "preview".
   1678 
   1679           preinsert
   1680        	    Inserts the text of the first completion candidate beyond
   1681        	    the current leader, highlighted with |hl-PreInsert|.
   1682        	    The cursor does not move.
   1683        	    Requires "fuzzy" to be unset, and either "menuone" in
   1684        	    'completeopt' or 'autocomplete' enabled.  When
   1685        	    'autocomplete' is enabled, this does not work if
   1686        	    'ignorecase' is set without 'infercase'.
   1687        	    See also |preinserted()|.
   1688 
   1689           preview  Show extra information about the currently selected
   1690        	    completion in the preview window.  Only works in
   1691        	    combination with "menu" or "menuone".
   1692 
   1693        Only "fuzzy", "longest", "popup", "preinsert" and "preview" have an
   1694        effect when 'autocomplete' is enabled.
   1695 
   1696        This option does not apply to |cmdline-completion|.  See 'wildoptions'
   1697        for that.
   1698      ]=],
   1699      full_name = 'completeopt',
   1700      list = 'onecomma',
   1701      scope = { 'global', 'buf' },
   1702      short_desc = N_('options for Insert mode completion'),
   1703      type = 'string',
   1704      varname = 'p_cot',
   1705      flags_varname = 'cot_flags',
   1706    },
   1707    {
   1708      abbreviation = 'csl',
   1709      cb = 'did_set_completeslash',
   1710      defaults = '',
   1711      values = { '', 'slash', 'backslash' },
   1712      desc = [=[
   1713        		only modifiable in MS-Windows
   1714        When this option is set it overrules 'shellslash' for completion:
   1715        - When this option is set to "slash", a forward slash is used for path
   1716          completion in insert mode.  This is useful when editing HTML tag, or
   1717          Makefile with 'noshellslash' on MS-Windows.
   1718        - When this option is set to "backslash", backslash is used.  This is
   1719          useful when editing a batch file with 'shellslash' set on
   1720          MS-Windows.
   1721        - When this option is empty, same character is used as for
   1722          'shellslash'.
   1723        For Insert mode completion the buffer-local value is used.  For
   1724        command line completion the global value is used.
   1725      ]=],
   1726      enable_if = 'BACKSLASH_IN_FILENAME',
   1727      full_name = 'completeslash',
   1728      scope = { 'buf' },
   1729      type = 'string',
   1730      varname = 'p_csl',
   1731    },
   1732    {
   1733      abbreviation = 'cto',
   1734      defaults = 0,
   1735      desc = [=[
   1736        Like 'autocompletetimeout', but applies to |i_CTRL-N| and |i_CTRL-P|
   1737        completion.  Value of 0 disables the timeout; positive values allowed.
   1738      ]=],
   1739      full_name = 'completetimeout',
   1740      scope = { 'global' },
   1741      short_desc = N_('initial decay timeout for CTRL-N and CTRL-P'),
   1742      type = 'number',
   1743      varname = 'p_cto',
   1744    },
   1745    {
   1746      abbreviation = 'cocu',
   1747      cb = 'did_set_concealcursor',
   1748      defaults = '',
   1749      desc = [=[
   1750        Sets the modes in which text in the cursor line can also be concealed.
   1751        When the current mode is listed then concealing happens just like in
   1752        other lines.
   1753          n		Normal mode
   1754          v		Visual mode
   1755          i		Insert mode
   1756          c		Command line editing, for 'incsearch'
   1757 
   1758        'v' applies to all lines in the Visual area, not only the cursor.
   1759        A useful value is "nc".  This is used in help files.  So long as you
   1760        are moving around text is concealed, but when starting to insert text
   1761        or selecting a Visual area the concealed text is displayed, so that
   1762        you can see what you are doing.
   1763        Keep in mind that the cursor position is not always where it's
   1764        displayed.  E.g., when moving vertically it may change column.
   1765      ]=],
   1766      expand_cb = 'expand_set_concealcursor',
   1767      full_name = 'concealcursor',
   1768      list = 'flags',
   1769      redraw = { 'current_window' },
   1770      scope = { 'win' },
   1771      short_desc = N_('whether concealable text is hidden in cursor line'),
   1772      type = 'string',
   1773    },
   1774    {
   1775      abbreviation = 'cole',
   1776      defaults = 0,
   1777      desc = [=[
   1778        Determine how text with the "conceal" syntax attribute |:syn-conceal|
   1779        is shown:
   1780 
   1781        Value		Effect ~
   1782        0		Text is shown normally
   1783        1		Each block of concealed text is replaced with one
   1784        		character.  If the syntax item does not have a custom
   1785        		replacement character defined (see |:syn-cchar|) the
   1786        		character defined in 'listchars' is used.
   1787        		It is highlighted with the "Conceal" highlight group.
   1788        2		Concealed text is completely hidden unless it has a
   1789        		custom replacement character defined (see
   1790        		|:syn-cchar|).
   1791        3		Concealed text is completely hidden.
   1792 
   1793        Note: in the cursor line concealed text is not hidden, so that you can
   1794        edit and copy the text.  This can be changed with the 'concealcursor'
   1795        option.
   1796      ]=],
   1797      full_name = 'conceallevel',
   1798      redraw = { 'current_window' },
   1799      scope = { 'win' },
   1800      short_desc = N_('whether concealable text is shown or hidden'),
   1801      type = 'number',
   1802    },
   1803    {
   1804      abbreviation = 'cf',
   1805      defaults = false,
   1806      desc = [=[
   1807        When 'confirm' is on, certain operations that would normally
   1808        fail because of unsaved changes to a buffer, e.g. ":q" and ":e",
   1809        instead raise a dialog asking if you wish to save the current
   1810        file(s).  You can still use a ! to unconditionally |abandon| a buffer.
   1811        If 'confirm' is off you can still activate confirmation for one
   1812        command only (this is most useful in mappings) with the |:confirm|
   1813        command.
   1814        Also see the |confirm()| function and the 'v' flag in 'guioptions'.
   1815      ]=],
   1816      full_name = 'confirm',
   1817      scope = { 'global' },
   1818      short_desc = N_('ask what to do about unsaved/read-only files'),
   1819      type = 'boolean',
   1820      varname = 'p_confirm',
   1821    },
   1822    {
   1823      abbreviation = 'ci',
   1824      defaults = false,
   1825      desc = [=[
   1826        Copy the structure of the existing lines indent when autoindenting a
   1827        new line.  Normally the new indent is reconstructed by a series of
   1828        tabs followed by spaces as required (unless 'expandtab' is enabled,
   1829        in which case only spaces are used).  Enabling this option makes the
   1830        new line copy whatever characters were used for indenting on the
   1831        existing line.  'expandtab' has no effect on these characters, a Tab
   1832        remains a Tab.  If the new indent is greater than on the existing
   1833        line, the remaining space is filled in the normal manner.
   1834        See 'preserveindent'.
   1835      ]=],
   1836      full_name = 'copyindent',
   1837      scope = { 'buf' },
   1838      short_desc = N_("make 'autoindent' use existing indent structure"),
   1839      type = 'boolean',
   1840      varname = 'p_ci',
   1841    },
   1842    {
   1843      abbreviation = 'cpo',
   1844      cb = 'did_set_cpoptions',
   1845      defaults = macros('CPO_VIM', 'string'),
   1846      desc = [=[
   1847        A sequence of single character flags.  When a character is present
   1848        this indicates Vi-compatible behavior.  This is used for things where
   1849        not being Vi-compatible is mostly or sometimes preferred.
   1850        'cpoptions' stands for "compatible-options".
   1851        Commas can be added for readability.
   1852        To avoid problems with flags that are added in the future, use the
   1853        "+=" and "-=" feature of ":set" |add-option-flags|.
   1854 
   1855            contains	behavior	~
   1856        							*cpo-a*
   1857        	a	When included, a ":read" command with a file name
   1858        		argument will set the alternate file name for the
   1859        		current window.
   1860        							*cpo-A*
   1861        	A	When included, a ":write" command with a file name
   1862        		argument will set the alternate file name for the
   1863        		current window.
   1864        							*cpo-b*
   1865        	b	"\|" in a ":map" command is recognized as the end of
   1866        		the map command.  The '\' is included in the mapping,
   1867        		the text after the '|' is interpreted as the next
   1868        		command.  Use a CTRL-V instead of a backslash to
   1869        		include the '|' in the mapping.  Applies to all
   1870        		mapping, abbreviation, menu and autocmd commands.
   1871        		See also |map_bar|.
   1872        							*cpo-B*
   1873        	B	A backslash has no special meaning in mappings,
   1874        		abbreviations, user commands and the "to" part of the
   1875        		menu commands.  Remove this flag to be able to use a
   1876        		backslash like a CTRL-V.  For example, the command
   1877        		":map X \\<Esc>" results in X being mapped to:
   1878        			'B' included:	"\^["	 (^[ is a real <Esc>)
   1879        			'B' excluded:	"<Esc>"  (5 characters)
   1880        							*cpo-c*
   1881        	c	Searching continues at the end of any match at the
   1882        		cursor position, but not further than the start of the
   1883        		next line.  When not present searching continues
   1884        		one character from the cursor position.  With 'c'
   1885        		"abababababab" only gets three matches when repeating
   1886        		"/abab", without 'c' there are five matches.
   1887        							*cpo-C*
   1888        	C	Do not concatenate sourced lines that start with a
   1889        		backslash.  See |line-continuation|.
   1890        							*cpo-d*
   1891        	d	Using "./" in the 'tags' option doesn't mean to use
   1892        		the tags file relative to the current file, but the
   1893        		tags file in the current directory.
   1894        							*cpo-D*
   1895        	D	Can't use CTRL-K to enter a digraph after Normal mode
   1896        		commands with a character argument, like |r|, |f| and
   1897        		|t|.
   1898        							*cpo-e*
   1899        	e	When executing a register with ":@r", always add a
   1900        		<CR> to the last line, also when the register is not
   1901        		linewise.  If this flag is not present, the register
   1902        		is not linewise and the last line does not end in a
   1903        		<CR>, then the last line is put on the command-line
   1904        		and can be edited before hitting <CR>.
   1905        							*cpo-E*
   1906        	E	It is an error when using "y", "d", "c", "g~", "gu" or
   1907        		"gU" on an Empty region.  The operators only work when
   1908        		at least one character is to be operated on.  Example:
   1909        		This makes "y0" fail in the first column.
   1910        							*cpo-f*
   1911        	f	When included, a ":read" command with a file name
   1912        		argument will set the file name for the current
   1913        		buffer, if the current buffer doesn't have a file name
   1914        		yet.
   1915        							*cpo-F*
   1916        	F	When included, a ":write" command with a file name
   1917        		argument will set the file name for the current
   1918        		buffer, if the current buffer doesn't have a file name
   1919        		yet.  Also see |cpo-P|.
   1920        							*cpo-i*
   1921        	i	When included, interrupting the reading of a file will
   1922        		leave it modified.
   1923        							*cpo-I*
   1924        	I	When moving the cursor up or down just after inserting
   1925        		indent for 'autoindent', do not delete the indent.
   1926        							*cpo-J*
   1927        	J	A |sentence| has to be followed by two spaces after
   1928        		the '.', '!' or '?'.  A <Tab> is not recognized as
   1929        		white space.
   1930        							*cpo-K*
   1931        	K	Don't wait for a key code to complete when it is
   1932        		halfway through a mapping.  This breaks mapping
   1933        		<F1><F1> when only part of the second <F1> has been
   1934        		read.  It enables cancelling the mapping by typing
   1935        		<F1><Esc>.
   1936        							*cpo-l*
   1937        	l	Backslash in a [] range in a search pattern is taken
   1938        		literally, only "\]", "\^", "\-" and "\\" are special.
   1939        		See |/[]|
   1940        		   'l' included: "/[ \t]"  finds <Space>, '\' and 't'
   1941        		   'l' excluded: "/[ \t]"  finds <Space> and <Tab>
   1942        							*cpo-L*
   1943        	L	When the 'list' option is set, 'wrapmargin',
   1944        		'textwidth', 'softtabstop' and Virtual Replace mode
   1945        		(see |gR|) count a <Tab> as two characters, instead of
   1946        		the normal behavior of a <Tab>.
   1947        							*cpo-m*
   1948        	m	When included, a showmatch will always wait half a
   1949        		second.  When not included, a showmatch will wait half
   1950        		a second or until a character is typed.  'showmatch'
   1951        							*cpo-M*
   1952        	M	When excluded, "%" matching will take backslashes into
   1953        		account.  Thus in "( \( )" and "\( ( \)" the outer
   1954        		parenthesis match.  When included "%" ignores
   1955        		backslashes, which is Vi compatible.
   1956        							*cpo-n*
   1957        	n	When included, the column used for 'number' and
   1958        		'relativenumber' will also be used for text of wrapped
   1959        		lines.
   1960        							*cpo-o*
   1961        	o	Line offset to search command is not remembered for
   1962        		next search.
   1963        							*cpo-O*
   1964        	O	Don't complain if a file is being overwritten, even
   1965        		when it didn't exist when editing it.  This is a
   1966        		protection against a file unexpectedly created by
   1967        		someone else.  Vi didn't complain about this.
   1968        							*cpo-P*
   1969        	P	When included, a ":write" command that appends to a
   1970        		file will set the file name for the current buffer, if
   1971        		the current buffer doesn't have a file name yet and
   1972        		the 'F' flag is also included |cpo-F|.
   1973        							*cpo-q*
   1974        	q	When joining multiple lines leave the cursor at the
   1975        		position where it would be when joining two lines.
   1976        							*cpo-r*
   1977        	r	Redo ("." command) uses "/" to repeat a search
   1978        		command, instead of the actually used search string.
   1979        							*cpo-R*
   1980        	R	Remove marks from filtered lines.  Without this flag
   1981        		marks are kept like |:keepmarks| was used.
   1982        							*cpo-s*
   1983        	s	Set buffer options when entering the buffer for the
   1984        		first time.  This is like it is in Vim version 3.0.
   1985        		And it is the default.  If not present the options are
   1986        		set when the buffer is created.
   1987        							*cpo-S*
   1988        	S	Set buffer options always when entering a buffer
   1989        		(except 'readonly', 'fileformat', 'filetype' and
   1990        		'syntax').  This is the (most) Vi compatible setting.
   1991        		The options are set to the values in the current
   1992        		buffer.  When you change an option and go to another
   1993        		buffer, the value is copied.  Effectively makes the
   1994        		buffer options global to all buffers.
   1995 
   1996        		's'    'S'     copy buffer options
   1997        		no     no      when buffer created
   1998        		yes    no      when buffer first entered (default)
   1999        		 X     yes     each time when buffer entered (vi comp.)
   2000        							*cpo-t*
   2001        	t	Search pattern for the tag command is remembered for
   2002        		"n" command.  Otherwise Vim only puts the pattern in
   2003        		the history for search pattern, but doesn't change the
   2004        		last used search pattern.
   2005        							*cpo-u*
   2006        	u	Undo is Vi compatible.  See |undo-two-ways|.
   2007        							*cpo-v*
   2008        	v	Backspaced characters remain visible on the screen in
   2009        		Insert mode.  Without this flag the characters are
   2010        		erased from the screen right away.  With this flag the
   2011        		screen newly typed text overwrites backspaced
   2012        		characters.
   2013        							*cpo-W*
   2014        	W	Don't overwrite a readonly file.  When omitted, ":w!"
   2015        		overwrites a readonly file, if possible.
   2016        							*cpo-x*
   2017        	x	<Esc> on the command-line executes the command-line.
   2018        		The default in Vim is to abandon the command-line,
   2019        		because <Esc> normally aborts a command.  |c_<Esc>|
   2020        							*cpo-X*
   2021        	X	When using a count with "R" the replaced text is
   2022        		deleted only once.  Also when repeating "R" with "."
   2023        		and a count.
   2024        							*cpo-y*
   2025        	y	A yank command can be redone with ".".  Think twice if
   2026        		you really want to use this, it may break some
   2027        		plugins, since most people expect "." to only repeat a
   2028        		change.
   2029        							*cpo-Z*
   2030        	Z	When using "w!" while the 'readonly' option is set,
   2031        		don't reset 'readonly'.
   2032        							*cpo-!*
   2033        	!	When redoing a filter command, use the last used
   2034        		external command, whatever it was.  Otherwise the last
   2035        		used -filter- command is used.
   2036        							*cpo-$*
   2037        	$	When making a change to one line, don't redisplay the
   2038        		line, but put a '$' at the end of the changed text.
   2039        		The changed text will be overwritten when you type the
   2040        		new text.  The line is redisplayed if you type any
   2041        		command that moves the cursor from the insertion
   2042        		point.
   2043        							*cpo-%*
   2044        	%	Vi-compatible matching is done for the "%" command.
   2045        		Does not recognize "#if", "#endif", etc.
   2046        		Does not recognize "/*" and "*/".
   2047        		Parens inside single and double quotes are also
   2048        		counted, causing a string that contains a paren to
   2049        		disturb the matching.  For example, in a line like
   2050        		"if (strcmp("foo(", s))" the first paren does not
   2051        		match the last one.  When this flag is not included,
   2052        		parens inside single and double quotes are treated
   2053        		specially.  When matching a paren outside of quotes,
   2054        		everything inside quotes is ignored.  When matching a
   2055        		paren inside quotes, it will find the matching one (if
   2056        		there is one).  This works very well for C programs.
   2057        		This flag is also used for other features, such as
   2058        		C-indenting.
   2059        							*cpo-+*
   2060        	+	When included, a ":write file" command will reset the
   2061        		'modified' flag of the buffer, even though the buffer
   2062        		itself may still be different from its file.
   2063        							*cpo->*
   2064        	>	When appending to a register, put a line break before
   2065        		the appended text.
   2066        							*cpo-;*
   2067        	;	When using |,| or |;| to repeat the last |t| search
   2068        		and the cursor is right in front of the searched
   2069        		character, the cursor won't move.  When not included,
   2070        		the cursor would skip over it and jump to the
   2071        		following occurrence.
   2072        							*cpo-~*
   2073        	~	When included, don't resolve symbolic links when
   2074        		changing directory with |:cd|, |:lcd|, or |:tcd|.
   2075        		This preserves the symbolic link path in buffer names
   2076        		and when displaying the current directory.  When
   2077        		excluded (default), symbolic links are resolved to
   2078        		their target paths.
   2079        							*cpo-_*
   2080        	_	When using |cw| on a word, do not include the
   2081        		whitespace following the word in the motion.
   2082      ]=],
   2083      expand_cb = 'expand_set_cpoptions',
   2084      full_name = 'cpoptions',
   2085      list = 'flags',
   2086      redraw = { 'all_windows' },
   2087      scope = { 'global' },
   2088      short_desc = N_('flags for Vi-compatible behavior'),
   2089      tags = { 'cpo' },
   2090      type = 'string',
   2091      varname = 'p_cpo',
   2092    },
   2093    {
   2094      abbreviation = 'crb',
   2095      defaults = false,
   2096      desc = [=[
   2097        When this option is set, as the cursor in the current
   2098        window moves other cursorbound windows (windows that also have
   2099        this option set) move their cursors to the corresponding line and
   2100        column.  This option is useful for viewing the
   2101        differences between two versions of a file (see 'diff'); in diff mode,
   2102        inserted and deleted lines (though not characters within a line) are
   2103        taken into account.
   2104      ]=],
   2105      full_name = 'cursorbind',
   2106      scope = { 'win' },
   2107      short_desc = N_('move cursor in window as it moves in other windows'),
   2108      type = 'boolean',
   2109    },
   2110    {
   2111      abbreviation = 'cuc',
   2112      defaults = false,
   2113      desc = [=[
   2114        Highlight the screen column of the cursor with CursorColumn
   2115        |hl-CursorColumn|.  Useful to align text.  Will make screen redrawing
   2116        slower.
   2117        If you only want the highlighting in the current window you can use
   2118        these autocommands: >vim
   2119        	au WinLeave * set nocursorline nocursorcolumn
   2120        	au WinEnter * set cursorline cursorcolumn
   2121        <
   2122      ]=],
   2123      full_name = 'cursorcolumn',
   2124      redraw = { 'current_window', 'highlight_only' },
   2125      scope = { 'win' },
   2126      short_desc = N_('highlight the screen column of the cursor'),
   2127      type = 'boolean',
   2128    },
   2129    {
   2130      abbreviation = 'cul',
   2131      defaults = false,
   2132      desc = [=[
   2133        Highlight the text line of the cursor with CursorLine |hl-CursorLine|.
   2134        Useful to easily spot the cursor.  Will make screen redrawing slower.
   2135        When Visual mode is active the highlighting isn't used to make it
   2136        easier to see the selected text.
   2137      ]=],
   2138      full_name = 'cursorline',
   2139      redraw = { 'current_window', 'highlight_only' },
   2140      scope = { 'win' },
   2141      short_desc = N_('highlight the screen line of the cursor'),
   2142      type = 'boolean',
   2143    },
   2144    {
   2145      abbreviation = 'culopt',
   2146      cb = 'did_set_cursorlineopt',
   2147      defaults = 'both',
   2148      -- Keep this in sync with fill_culopt_flags().
   2149      values = { 'line', 'screenline', 'number', 'both' },
   2150      flags = {
   2151        Line = 0x01,
   2152        Screenline = 0x02,
   2153        Number = 0x04,
   2154      },
   2155      deny_duplicates = true,
   2156      desc = [=[
   2157        Comma-separated list of settings for how 'cursorline' is displayed.
   2158        Valid values:
   2159        "line"		Highlight the text line of the cursor with
   2160        		CursorLine |hl-CursorLine|.
   2161        "screenline"	Highlight only the screen line of the cursor with
   2162        		CursorLine |hl-CursorLine|.
   2163        "number"	Highlight the line number of the cursor with
   2164        		CursorLineNr |hl-CursorLineNr|.
   2165 
   2166        Special value:
   2167        "both"		Alias for the values "line,number".
   2168 
   2169        "line" and "screenline" cannot be used together.
   2170      ]=],
   2171      full_name = 'cursorlineopt',
   2172      list = 'onecomma',
   2173      redraw = { 'current_window', 'highlight_only' },
   2174      scope = { 'win' },
   2175      short_desc = N_("settings for 'cursorline'"),
   2176      type = 'string',
   2177    },
   2178    {
   2179      defaults = '',
   2180      values = { 'msg', 'throw', 'beep' },
   2181      desc = [=[
   2182        These values can be used:
   2183        msg	Error messages that would otherwise be omitted will be given
   2184        	anyway.
   2185        throw	Error messages that would otherwise be omitted will be given
   2186        	anyway and also throw an exception and set |v:errmsg|.
   2187        beep	A message will be given when otherwise only a beep would be
   2188        	produced.
   2189        The values can be combined, separated by a comma.
   2190        "msg" and "throw" are useful for debugging 'foldexpr', 'formatexpr' or
   2191        'indentexpr'.
   2192      ]=],
   2193      -- TODO(lewis6991): bug, values currently cannot be combined
   2194      full_name = 'debug',
   2195      list = 'comma',
   2196      scope = { 'global' },
   2197      short_desc = N_('to "msg" to see all error messages'),
   2198      type = 'string',
   2199      varname = 'p_debug',
   2200    },
   2201    {
   2202      abbreviation = 'def',
   2203      defaults = '',
   2204      desc = [=[
   2205        Pattern to be used to find a macro definition.  It is a search
   2206        pattern, just like for the "/" command.  This option is used for the
   2207        commands like "[i" and "[d" |include-search|.  The 'isident' option is
   2208        used to recognize the defined name after the match: >
   2209        	{match with 'define'}{non-ID chars}{defined name}{non-ID char}
   2210        <	See |option-backslash| about inserting backslashes to include a space
   2211        or backslash.
   2212        For C++ this value would be useful, to include const type declarations: >
   2213        	^\(#\s*define\|[a-z]*\s*const\s*[a-z]*\)
   2214        <	You can also use "\ze" just before the name and continue the pattern
   2215        to check what is following.  E.g. for Javascript, if a function is
   2216        defined with `func_name = function(args)`: >
   2217        	^\s*\ze\i\+\s*=\s*function(
   2218        <	If the function is defined with `func_name : function() {...`: >
   2219                ^\s*\ze\i\+\s*[:]\s*(*function\s*(
   2220        <	When using the ":set" command, you need to double the backslashes!
   2221        To avoid that use `:let` with a single quote string: >vim
   2222        	let &l:define = '^\s*\ze\k\+\s*=\s*function('
   2223        <
   2224      ]=],
   2225      full_name = 'define',
   2226      scope = { 'global', 'buf' },
   2227      short_desc = N_('pattern to be used to find a macro definition'),
   2228      type = 'string',
   2229      varname = 'p_def',
   2230    },
   2231    {
   2232      abbreviation = 'deco',
   2233      defaults = false,
   2234      desc = [=[
   2235        If editing Unicode and this option is set, backspace and Normal mode
   2236        "x" delete each combining character on its own.  When it is off (the
   2237        default) the character along with its combining characters are
   2238        deleted.
   2239        Note: When 'delcombine' is set "xx" may work differently from "2x"!
   2240 
   2241        This is useful for Arabic, Hebrew and many other languages where one
   2242        may have combining characters overtop of base characters, and want
   2243        to remove only the combining ones.
   2244      ]=],
   2245      full_name = 'delcombine',
   2246      scope = { 'global' },
   2247      short_desc = N_('delete combining characters on their own'),
   2248      type = 'boolean',
   2249      varname = 'p_deco',
   2250    },
   2251    {
   2252      abbreviation = 'dict',
   2253      defaults = '',
   2254      deny_duplicates = true,
   2255      desc = [=[
   2256        List of file names, separated by commas, that are used to lookup words
   2257        for keyword completion commands |i_CTRL-X_CTRL-K|.  Each file should
   2258        contain a list of words.  This can be one word per line, or several
   2259        words per line, separated by non-keyword characters (white space is
   2260        preferred).  Maximum line length is 510 bytes.
   2261 
   2262        When this option is empty or an entry "spell" is present, and spell
   2263        checking is enabled, words in the word lists for the currently active
   2264        'spelllang' are used.  See |spell|.
   2265 
   2266        To include a comma in a file name precede it with a backslash.  Spaces
   2267        after a comma are ignored, otherwise spaces are included in the file
   2268        name.  See |option-backslash| about using backslashes.
   2269        Environment variables are expanded |:set_env|.
   2270        This has nothing to do with the |Dictionary| variable type.
   2271        Where to find a list of words?
   2272        - BSD/macOS include the "/usr/share/dict/words" file.
   2273        - Try "apt install spell" to get the "/usr/share/dict/words" file on
   2274          apt-managed systems (Debian/Ubuntu).
   2275        The use of |:set+=| and |:set-=| is preferred when adding or removing
   2276        directories from the list.  This avoids problems when a future version
   2277        uses another default.
   2278        Backticks cannot be used in this option for security reasons.
   2279      ]=],
   2280      expand = true,
   2281      full_name = 'dictionary',
   2282      list = 'onecomma',
   2283      normal_dname_chars = true,
   2284      scope = { 'global', 'buf' },
   2285      short_desc = N_('list of file names used for keyword completion'),
   2286      type = 'string',
   2287      varname = 'p_dict',
   2288    },
   2289    {
   2290      cb = 'did_set_diff',
   2291      defaults = false,
   2292      desc = [=[
   2293        Join the current window in the group of windows that shows differences
   2294        between files.  See |diff-mode|.
   2295      ]=],
   2296      full_name = 'diff',
   2297      noglob = true,
   2298      redraw = { 'current_window' },
   2299      scope = { 'win' },
   2300      short_desc = N_('diff mode for the current window'),
   2301      type = 'boolean',
   2302    },
   2303    {
   2304      abbreviation = 'dia',
   2305      cb = 'did_set_diffanchors',
   2306      defaults = '',
   2307      desc = [=[
   2308        List of {address} in each buffer, separated by commas, that are
   2309        considered anchors when used for diffing.  It's valid to specify "$+1"
   2310        for 1 past the last line.  "%" cannot be used for this option.  There
   2311        can be at most 20 anchors set for each buffer.
   2312 
   2313        Each anchor line splits the buffer (the split happens above the
   2314        anchor), with each part being diff'ed separately before the final
   2315        result is joined.  When more than one {address} are provided, the
   2316        anchors will be sorted internally by line number.  If using buffer
   2317        local options, each buffer should have the same number of anchors
   2318        (extra anchors will be ignored).  This option is only used when
   2319        'diffopt' has "anchor" set.  See |diff-anchors| for more details and
   2320        examples.
   2321        							*E1550*
   2322        If some of the {address} do not resolve to a line in each buffer (e.g.
   2323        a pattern search that does not match anything), none of the anchors
   2324        will be used.
   2325        							*E1562*
   2326        Diff anchors can only be used when there are no hidden diff buffers.
   2327      ]=],
   2328      full_name = 'diffanchors',
   2329      list = 'onecomma',
   2330      scope = { 'global', 'buf' },
   2331      short_desc = N_('list of addresses for anchoring a diff'),
   2332      type = 'string',
   2333      varname = 'p_dia',
   2334    },
   2335    {
   2336      abbreviation = 'dex',
   2337      cb = 'did_set_optexpr',
   2338      defaults = '',
   2339      desc = [=[
   2340        Expression which is evaluated to obtain a diff file (either ed-style
   2341        or unified-style) from two versions of a file.  See |diff-diffexpr|.
   2342        This option cannot be set from a |modeline| or in the |sandbox|, for
   2343        security reasons.
   2344      ]=],
   2345      full_name = 'diffexpr',
   2346      redraw = { 'curswant' },
   2347      scope = { 'global' },
   2348      secure = true,
   2349      short_desc = N_('expression used to obtain a diff file'),
   2350      type = 'string',
   2351      varname = 'p_dex',
   2352    },
   2353    {
   2354      abbreviation = 'dip',
   2355      cb = 'did_set_diffopt',
   2356      defaults = 'internal,filler,closeoff,indent-heuristic,inline:char,linematch:40',
   2357      -- Keep this in sync with diffopt_changed().
   2358      values = {
   2359        'filler',
   2360        'anchor',
   2361        'context:',
   2362        'iblank',
   2363        'icase',
   2364        'iwhite',
   2365        'iwhiteall',
   2366        'iwhiteeol',
   2367        'horizontal',
   2368        'vertical',
   2369        'closeoff',
   2370        'hiddenoff',
   2371        'foldcolumn:',
   2372        'followwrap',
   2373        'internal',
   2374        'indent-heuristic',
   2375        { 'algorithm:', { 'myers', 'minimal', 'patience', 'histogram' } },
   2376        { 'inline:', { 'none', 'simple', 'char', 'word' } },
   2377        'linematch:',
   2378      },
   2379      deny_duplicates = true,
   2380      desc = [=[
   2381        Option settings for diff mode.  It can consist of the following items.
   2382        All are optional.  Items must be separated by a comma.
   2383 
   2384        	algorithm:{text} Use the specified diff algorithm with the
   2385        			internal diff engine.  Currently supported
   2386        			algorithms are:
   2387        			myers      the default algorithm
   2388        			minimal    spend extra time to generate the
   2389        				   smallest possible diff
   2390        			patience   patience diff algorithm
   2391        			histogram  histogram diff algorithm
   2392 
   2393        	anchor		Anchor specific lines in each buffer to be
   2394        			aligned with each other if 'diffanchors' is
   2395        			set.  See |diff-anchors|.
   2396 
   2397        	closeoff	When a window is closed where 'diff' is set
   2398        			and there is only one window remaining in the
   2399        			same tab page with 'diff' set, execute
   2400        			`:diffoff` in that window.  This undoes a
   2401        			`:diffsplit` command.
   2402 
   2403        	context:{n}	Use a context of {n} lines between a change
   2404        			and a fold that contains unchanged lines.
   2405        			When omitted a context of six lines is used.
   2406        			When using zero the context is actually one,
   2407        			since folds require a line in between, also
   2408        			for a deleted line.  Set it to a very large
   2409        			value (999999) to disable folding completely.
   2410        			See |fold-diff|.
   2411 
   2412        	filler		Show filler lines, to keep the text
   2413        			synchronized with a window that has inserted
   2414        			lines at the same position.  Mostly useful
   2415        			when windows are side-by-side and 'scrollbind'
   2416        			is set.
   2417 
   2418        	foldcolumn:{n}	Set the 'foldcolumn' option to {n} when
   2419        			starting diff mode.  Without this 2 is used.
   2420 
   2421        	followwrap	Follow the 'wrap' option and leave as it is.
   2422 
   2423        	horizontal	Start diff mode with horizontal splits (unless
   2424        			explicitly specified otherwise).
   2425 
   2426        	hiddenoff	Do not use diff mode for a buffer when it
   2427        			becomes hidden.
   2428 
   2429        	iblank		Ignore changes where lines are all blank.
   2430        			Adds the "-B" flag to the "diff" command if
   2431        			'diffexpr' is empty.  Check the documentation
   2432        			of the "diff" command for what this does
   2433        			exactly.
   2434        			NOTE: the diff windows will get out of sync,
   2435        			because no differences between blank lines are
   2436        			taken into account.
   2437 
   2438        	icase		Ignore changes in case of text.  "a" and "A"
   2439        			are considered the same.  Adds the "-i" flag
   2440        			to the "diff" command if 'diffexpr' is empty.
   2441 
   2442        	indent-heuristic
   2443        			Use the indent heuristic for the internal
   2444        			diff library.
   2445 
   2446        	inline:{text}	Highlight inline differences within a change.
   2447        			See |view-diffs|.  Supported values are:
   2448 
   2449        			none    Do not perform inline highlighting.
   2450        			simple  Highlight from first different
   2451        				character to the last one in each
   2452        				line.  This is the default if no
   2453        				`inline:` value is set.
   2454        			char    Use internal diff to perform a
   2455        				character-wise diff and highlight the
   2456        				difference.
   2457        			word    Use internal diff to perform a
   2458        				|word|-wise diff and highlight the
   2459        				difference.  Non-alphanumeric
   2460        				multi-byte characters such as emoji
   2461        				and CJK characters are considered
   2462        				individual words.
   2463 
   2464        	internal	Use the internal diff library.  This is
   2465        			ignored when 'diffexpr' is set.  *E960*
   2466        			When running out of memory when writing a
   2467        			buffer or the diff is larger than 1 GB this
   2468        			item will be ignored for diffs involving that
   2469        			buffer.  Set the 'verbose' option to see when
   2470        			this happens.
   2471 
   2472        	iwhite		Ignore changes in amount of white space.  Adds
   2473        			the "-b" flag to the "diff" command if
   2474        			'diffexpr' is empty.  Check the documentation
   2475        			of the "diff" command for what this does
   2476        			exactly.  It should ignore adding trailing
   2477        			white space, but not leading white space.
   2478 
   2479        	iwhiteall	Ignore all white space changes.  Adds
   2480        			the "-w" flag to the "diff" command if
   2481        			'diffexpr' is empty.  Check the documentation
   2482        			of the "diff" command for what this does
   2483        			exactly.
   2484 
   2485        	iwhiteeol	Ignore white space changes at end of line.
   2486        			Adds the "-Z" flag to the "diff" command if
   2487        			'diffexpr' is empty.  Check the documentation
   2488        			of the "diff" command for what this does
   2489        			exactly.
   2490 
   2491        	linematch:{n}   Align and mark changes between the most
   2492        			similar lines between the buffers.  When the
   2493        			total number of lines in the diff hunk exceeds
   2494        			{n}, the lines will not be aligned because for
   2495        			very large diff hunks there will be a
   2496        			noticeable lag.  A reasonable setting is
   2497        			"linematch:60", as this will enable alignment
   2498        			for a 2 buffer diff hunk of 30 lines each, or
   2499        			a 3 buffer diff hunk of 20 lines each.
   2500        			Implicitly sets "filler" when this is set.
   2501 
   2502        	vertical	Start diff mode with vertical splits (unless
   2503        			explicitly specified otherwise).
   2504 
   2505        Examples: >vim
   2506        	set diffopt=internal,filler,context:4
   2507        	set diffopt=
   2508        	set diffopt=internal,filler,foldcolumn:3
   2509        	set diffopt-=internal  " do NOT use the internal diff parser
   2510        <
   2511      ]=],
   2512      expand_cb = 'expand_set_diffopt',
   2513      full_name = 'diffopt',
   2514      list = 'onecommacolon',
   2515      redraw = { 'current_window' },
   2516      scope = { 'global' },
   2517      short_desc = N_('options for using diff mode'),
   2518      type = 'string',
   2519      varname = 'p_dip',
   2520    },
   2521    {
   2522      abbreviation = 'dg',
   2523      defaults = false,
   2524      desc = [=[
   2525        Enable the entering of digraphs in Insert mode with {char1} <BS>
   2526        {char2}.  See |digraphs|.
   2527      ]=],
   2528      full_name = 'digraph',
   2529      scope = { 'global' },
   2530      short_desc = N_('enable the entering of digraphs in Insert mode'),
   2531      type = 'boolean',
   2532      varname = 'p_dg',
   2533    },
   2534    {
   2535      abbreviation = 'dir',
   2536      defaults = '',
   2537      deny_duplicates = true,
   2538      desc = [=[
   2539        List of directory names for the swap file, separated with commas.
   2540 
   2541        Possible items:
   2542        - The swap file will be created in the first directory where this is
   2543          possible.  If it is not possible in any directory, but last
   2544          directory listed in the option does not exist, it is created.
   2545        - Empty means that no swap file will be used (recovery is
   2546          impossible!) and no |E303| error will be given.
   2547        - A directory "." means to put the swap file in the same directory as
   2548          the edited file.  On Unix, a dot is prepended to the file name, so
   2549          it doesn't show in a directory listing.  On MS-Windows the "hidden"
   2550          attribute is set and a dot prepended if possible.
   2551        - A directory starting with "./" (or ".\" for MS-Windows) means to put
   2552          the swap file relative to where the edited file is.  The leading "."
   2553          is replaced with the path name of the edited file.
   2554        - For Unix and Win32, if a directory ends in two path separators "//",
   2555          the swap file name will be built from the complete path to the file
   2556          with all path separators replaced by percent '%' signs (including
   2557          the colon following the drive letter on Win32).  This will ensure
   2558          file name uniqueness in the preserve directory.
   2559          On Win32, it is also possible to end with "\\".  However, When a
   2560          separating comma is following, you must use "//", since "\\" will
   2561          include the comma in the file name.  Therefore it is recommended to
   2562          use '//', instead of '\\'.
   2563        - Spaces after the comma are ignored, other spaces are considered part
   2564          of the directory name.  To have a space at the start of a directory
   2565          name, precede it with a backslash.
   2566        - To include a comma in a directory name precede it with a backslash.
   2567        - A directory name may end in an ':' or '/'.
   2568        - Environment variables are expanded |:set_env|.
   2569        - Careful with '\' characters, type one before a space, type two to
   2570          get one in the option (see |option-backslash|), for example: >vim
   2571            set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
   2572        <
   2573        Editing the same file twice will result in a warning.  Using "/tmp" on
   2574        is discouraged: if the system crashes you lose the swap file. And
   2575        others on the computer may be able to see the files.
   2576        Use |:set+=| and |:set-=| when adding or removing directories from the
   2577        list, this avoids problems if the Nvim default is changed.
   2578 
   2579        This option cannot be set from a |modeline| or in the |sandbox|, for
   2580        security reasons.
   2581      ]=],
   2582      expand = 'nodefault',
   2583      full_name = 'directory',
   2584      list = 'onecomma',
   2585      scope = { 'global' },
   2586      secure = true,
   2587      short_desc = N_('list of directory names for the swap file'),
   2588      type = 'string',
   2589      varname = 'p_dir',
   2590    },
   2591    {
   2592      abbreviation = 'dy',
   2593      cb = 'did_set_display',
   2594      defaults = 'lastline',
   2595      values = { 'lastline', 'truncate', 'uhex', 'msgsep' },
   2596      flags = true,
   2597      deny_duplicates = true,
   2598      desc = [=[
   2599        Change the way text is displayed.  This is a comma-separated list of
   2600        flags:
   2601        lastline	When included, as much as possible of the last line
   2602        		in a window will be displayed.  "@@@" is put in the
   2603        		last columns of the last screen line to indicate the
   2604        		rest of the line is not displayed.
   2605        truncate	Like "lastline", but "@@@" is displayed in the first
   2606        		column of the last screen line.  Overrules "lastline".
   2607        uhex		Show unprintable characters hexadecimal as <xx>
   2608        		instead of using ^C and ~C.
   2609        msgsep		Obsolete flag. Allowed but takes no effect. |msgsep|
   2610 
   2611        When neither "lastline" nor "truncate" is included, a last line that
   2612        doesn't fit is replaced with "@" lines.
   2613 
   2614        The "@" character can be changed by setting the "lastline" item in
   2615        'fillchars'.  The character is highlighted with |hl-NonText|.
   2616      ]=],
   2617      full_name = 'display',
   2618      list = 'onecomma',
   2619      redraw = { 'all_windows' },
   2620      scope = { 'global' },
   2621      short_desc = N_('list of flags for how to display text'),
   2622      type = 'string',
   2623      varname = 'p_dy',
   2624      flags_varname = 'dy_flags',
   2625    },
   2626    {
   2627      abbreviation = 'ead',
   2628      defaults = 'both',
   2629      values = { 'both', 'ver', 'hor' },
   2630      desc = [=[
   2631        Tells when the 'equalalways' option applies:
   2632        	ver	vertically, width of windows is not affected
   2633        	hor	horizontally, height of windows is not affected
   2634        	both	width and height of windows is affected
   2635      ]=],
   2636      full_name = 'eadirection',
   2637      scope = { 'global' },
   2638      short_desc = N_("in which direction 'equalalways' works"),
   2639      type = 'string',
   2640      varname = 'p_ead',
   2641    },
   2642    {
   2643      abbreviation = 'ed',
   2644      defaults = false,
   2645      full_name = 'edcompatible',
   2646      scope = { 'global' },
   2647      short_desc = N_('Deprecated'),
   2648      type = 'boolean',
   2649      immutable = true,
   2650    },
   2651    {
   2652      abbreviation = 'emo',
   2653      cb = 'did_set_emoji',
   2654      defaults = true,
   2655      desc = [=[
   2656        When on all Unicode emoji characters are considered to be full width.
   2657        This excludes "text emoji" characters, which are normally displayed as
   2658        single width. However, such "text emoji" are treated as full-width
   2659        emoji if they are followed by the U+FE0F variant selector.
   2660 
   2661        Unfortunately there is no good specification for this and it has been
   2662        determined on trial-and-error basis.  Use the |setcellwidths()|
   2663        function to change the behavior.
   2664      ]=],
   2665      full_name = 'emoji',
   2666      redraw = { 'all_windows', 'ui_option' },
   2667      scope = { 'global' },
   2668      short_desc = N_('No description'),
   2669      type = 'boolean',
   2670      varname = 'p_emoji',
   2671    },
   2672    {
   2673      abbreviation = 'enc',
   2674      cb = 'did_set_encoding',
   2675      defaults = macros('ENC_DFLT', 'string'),
   2676      deny_in_modelines = true,
   2677      desc = [=[
   2678        String-encoding used internally and for |RPC| communication.
   2679        Always UTF-8.
   2680 
   2681        See 'fileencoding' to control file-content encoding.
   2682      ]=],
   2683      full_name = 'encoding',
   2684      scope = { 'global' },
   2685      short_desc = N_('encoding used internally'),
   2686      type = 'string',
   2687      varname = 'p_enc',
   2688    },
   2689    {
   2690      abbreviation = 'eof',
   2691      cb = 'did_set_eof_eol_fixeol_bomb',
   2692      defaults = false,
   2693      desc = [=[
   2694        Indicates that a CTRL-Z character was found at the end of the file
   2695        when reading it.  Normally only happens when 'fileformat' is "dos".
   2696        When writing a file and this option is off and the 'binary' option
   2697        is on, or 'fixeol' option is off, no CTRL-Z will be written at the
   2698        end of the file.
   2699        See |eol-and-eof| for example settings.
   2700      ]=],
   2701      full_name = 'endoffile',
   2702      no_mkrc = true,
   2703      redraw = { 'statuslines' },
   2704      scope = { 'buf' },
   2705      short_desc = N_('write CTRL-Z for last line in file'),
   2706      type = 'boolean',
   2707      varname = 'p_eof',
   2708    },
   2709    {
   2710      abbreviation = 'eol',
   2711      cb = 'did_set_eof_eol_fixeol_bomb',
   2712      defaults = true,
   2713      desc = [=[
   2714        When writing a file and this option is off and the 'binary' option
   2715        is on, or 'fixeol' option is off, no <EOL> will be written for the
   2716        last line in the file.  This option is automatically set or reset when
   2717        starting to edit a new file, depending on whether file has an <EOL>
   2718        for the last line in the file.  Normally you don't have to set or
   2719        reset this option.
   2720        When 'binary' is off and 'fixeol' is on the value is not used when
   2721        writing the file.  When 'binary' is on or 'fixeol' is off it is used
   2722        to remember the presence of a <EOL> for the last line in the file, so
   2723        that when you write the file the situation from the original file can
   2724        be kept.  But you can change it if you want to.
   2725        See |eol-and-eof| for example settings.
   2726      ]=],
   2727      full_name = 'endofline',
   2728      no_mkrc = true,
   2729      redraw = { 'statuslines' },
   2730      scope = { 'buf' },
   2731      short_desc = N_('write <EOL> for last line in file'),
   2732      type = 'boolean',
   2733      varname = 'p_eol',
   2734    },
   2735    {
   2736      abbreviation = 'ea',
   2737      cb = 'did_set_equalalways',
   2738      defaults = true,
   2739      desc = [=[
   2740        When on, all the windows are automatically made the same size after
   2741        splitting or closing a window.  This also happens the moment the
   2742        option is switched on.  When off, splitting a window will reduce the
   2743        size of the current window and leave the other windows the same.  When
   2744        closing a window the extra lines are given to the window next to it
   2745        (depending on 'splitbelow' and 'splitright').
   2746        When mixing vertically and horizontally split windows, a minimal size
   2747        is computed and some windows may be larger if there is room.  The
   2748        'eadirection' option tells in which direction the size is affected.
   2749        Changing the height and width of a window can be avoided by setting
   2750        'winfixheight' and 'winfixwidth', respectively.
   2751        If a window size is specified when creating a new window sizes are
   2752        currently not equalized (it's complicated, but may be implemented in
   2753        the future).
   2754      ]=],
   2755      full_name = 'equalalways',
   2756      scope = { 'global' },
   2757      short_desc = N_('windows are automatically made the same size'),
   2758      type = 'boolean',
   2759      varname = 'p_ea',
   2760    },
   2761    {
   2762      abbreviation = 'ep',
   2763      defaults = '',
   2764      desc = [=[
   2765        External program to use for "=" command.  When this option is empty
   2766        the internal formatting functions are used; either 'lisp', 'cindent'
   2767        or 'indentexpr'.
   2768        Environment variables are expanded |:set_env|.  See |option-backslash|
   2769        about including spaces and backslashes.
   2770        This option cannot be set from a |modeline| or in the |sandbox|, for
   2771        security reasons.
   2772      ]=],
   2773      expand = true,
   2774      full_name = 'equalprg',
   2775      scope = { 'global', 'buf' },
   2776      secure = true,
   2777      short_desc = N_('external program to use for "=" command'),
   2778      type = 'string',
   2779      varname = 'p_ep',
   2780    },
   2781    {
   2782      abbreviation = 'eb',
   2783      defaults = false,
   2784      desc = [=[
   2785        Ring the bell (beep or screen flash) for error messages.  This only
   2786        makes a difference for error messages, the bell will be used always
   2787        for a lot of errors without a message (e.g., hitting <Esc> in Normal
   2788        mode).  See 'visualbell' to make the bell behave like a screen flash
   2789        or do nothing.  See 'belloff' to finetune when to ring the bell.
   2790      ]=],
   2791      full_name = 'errorbells',
   2792      scope = { 'global' },
   2793      short_desc = N_('ring the bell for error messages'),
   2794      type = 'boolean',
   2795      varname = 'p_eb',
   2796    },
   2797    {
   2798      abbreviation = 'ef',
   2799      defaults = macros('DFLT_ERRORFILE', 'string'),
   2800      desc = [=[
   2801        Name of the errorfile for the QuickFix mode (see |:cf|).
   2802        When the "-q" command-line argument is used, 'errorfile' is set to the
   2803        following argument.  See |-q|.
   2804        NOT used for the ":make" command.  See 'makeef' for that.
   2805        Environment variables are expanded |:set_env|.
   2806        See |option-backslash| about including spaces and backslashes.
   2807        This option cannot be set from a |modeline| or in the |sandbox|, for
   2808        security reasons.
   2809      ]=],
   2810      expand = true,
   2811      full_name = 'errorfile',
   2812      scope = { 'global' },
   2813      secure = true,
   2814      short_desc = N_('name of the errorfile for the QuickFix mode'),
   2815      type = 'string',
   2816      varname = 'p_ef',
   2817    },
   2818    {
   2819      abbreviation = 'efm',
   2820      defaults = {
   2821        if_true = macros('DFLT_EFM', 'string'),
   2822        doc = 'is very long',
   2823      },
   2824      deny_duplicates = true,
   2825      desc = [=[
   2826        Scanf-like description of the format for the lines in the error file
   2827        (see |errorformat|).
   2828      ]=],
   2829      full_name = 'errorformat',
   2830      list = 'onecomma',
   2831      scope = { 'global', 'buf' },
   2832      short_desc = N_('description of the lines in the error file'),
   2833      type = 'string',
   2834      varname = 'p_efm',
   2835    },
   2836    {
   2837      abbreviation = 'ei',
   2838      cb = 'did_set_eventignore',
   2839      defaults = '',
   2840      deny_duplicates = true,
   2841      desc = [=[
   2842        A list of autocommand event names, which are to be ignored.
   2843        When set to "all" or when "all" is one of the items, all autocommand
   2844        events are ignored, autocommands will not be executed.
   2845        Otherwise this is a comma-separated list of event names.  Example: >vim
   2846            set ei=WinEnter,WinLeave
   2847        <
   2848        To ignore all but some events, a "-" prefix can be used: >vim
   2849            :set ei=all,-WinLeave
   2850        <
   2851      ]=],
   2852      expand_cb = 'expand_set_eventignore',
   2853      full_name = 'eventignore',
   2854      list = 'onecomma',
   2855      scope = { 'global' },
   2856      short_desc = N_('autocommand events that are ignored'),
   2857      type = 'string',
   2858      varname = 'p_ei',
   2859    },
   2860    {
   2861      abbreviation = 'eiw',
   2862      cb = 'did_set_eventignore',
   2863      defaults = '',
   2864      deny_duplicates = true,
   2865      desc = [=[
   2866        Similar to 'eventignore' but applies to a particular window and its
   2867        buffers, for which window and buffer related autocommands can be
   2868        ignored indefinitely without affecting the global 'eventignore'.
   2869 
   2870        Note: The following events are considered to happen outside of a
   2871        window context and thus cannot be ignored by 'eventignorewin':
   2872 
   2873        	<PLACEHOLDER>
   2874      ]=],
   2875      expand_cb = 'expand_set_eventignore',
   2876      full_name = 'eventignorewin',
   2877      list = 'onecomma',
   2878      scope = { 'win' },
   2879      short_desc = N_('autocommand events that are ignored in a window'),
   2880      type = 'string',
   2881    },
   2882    {
   2883      abbreviation = 'et',
   2884      defaults = false,
   2885      desc = [=[
   2886        In Insert mode: Use the appropriate number of spaces to insert a
   2887        <Tab>.  Spaces are used in indents with the '>' and '<' commands and
   2888        when 'autoindent' is on.  To insert a real tab when 'expandtab' is
   2889        on, use CTRL-V<Tab>.  See also |:retab| and |ins-expandtab|.
   2890      ]=],
   2891      full_name = 'expandtab',
   2892      scope = { 'buf' },
   2893      short_desc = N_('use spaces when <Tab> is inserted'),
   2894      type = 'boolean',
   2895      varname = 'p_et',
   2896    },
   2897    {
   2898      abbreviation = 'ex',
   2899      defaults = false,
   2900      desc = [=[
   2901        Enables project-local configuration. Nvim will execute any .nvim.lua,
   2902        .nvimrc, or .exrc file found in the |current-directory| and all parent
   2903        directories (ordered upwards), if the files are in the |trust| list.
   2904        Use |:trust| to manage trusted files. See also |vim.secure.read()|.
   2905 
   2906        Unset 'exrc' to stop further searching of 'exrc' files in parent
   2907        directories, similar to |editorconfig.root|.
   2908 
   2909        To get its own location, a Lua exrc file can use |debug.getinfo()|.
   2910        See |lua-script-location|.
   2911 
   2912        Compare 'exrc' to |editorconfig|:
   2913        - 'exrc' can execute any code; editorconfig only specifies settings.
   2914        - 'exrc' is Nvim-specific; editorconfig works in other editors.
   2915 
   2916        To achieve project-local LSP configuration:
   2917        1. Enable 'exrc'.
   2918        2. Place LSP configs at ".nvim/lsp/*.lua" in your project root.
   2919        3. Create ".nvim.lua" in your project root directory with this line: >lua
   2920            vim.cmd[[set runtimepath+=.nvim]]
   2921        <
   2922        This option cannot be set from a |modeline| or in the |sandbox|, for
   2923        security reasons.
   2924      ]=],
   2925      full_name = 'exrc',
   2926      scope = { 'global' },
   2927      secure = true,
   2928      short_desc = N_('read project-local configuration in parent directories'),
   2929      tags = { 'project-config', 'workspace-config' },
   2930      type = 'boolean',
   2931      varname = 'p_exrc',
   2932    },
   2933    {
   2934      abbreviation = 'fenc',
   2935      cb = 'did_set_encoding',
   2936      defaults = '',
   2937      desc = [=[
   2938        File-content encoding for the current buffer. Conversion is done with
   2939        iconv() or as specified with 'charconvert'.
   2940 
   2941        When 'fileencoding' is not UTF-8, conversion will be done when
   2942        writing the file.  For reading see below.
   2943        When 'fileencoding' is empty, the file will be saved with UTF-8
   2944        encoding (no conversion when reading or writing a file).
   2945 
   2946        WARNING: Conversion to a non-Unicode encoding can cause loss of
   2947        information!
   2948 
   2949        See |encoding-names| for the possible values.  Additionally, values may be
   2950        specified that can be handled by the converter, see
   2951        |mbyte-conversion|.
   2952 
   2953        When reading a file 'fileencoding' will be set from 'fileencodings'.
   2954        To read a file in a certain encoding it won't work by setting
   2955        'fileencoding', use the |++enc| argument.  One exception: when
   2956        'fileencodings' is empty the value of 'fileencoding' is used.
   2957        For a new file the global value of 'fileencoding' is used.
   2958 
   2959        Prepending "8bit-" and "2byte-" has no meaning here, they are ignored.
   2960        When the option is set, the value is converted to lowercase.  Thus
   2961        you can set it with uppercase values too.  '_' characters are
   2962        replaced with '-'.  If a name is recognized from the list at
   2963        |encoding-names|, it is replaced by the standard name.  For example
   2964        "ISO8859-2" becomes "iso-8859-2".
   2965 
   2966        When this option is set, after starting to edit a file, the 'modified'
   2967        option is set, because the file would be different when written.
   2968 
   2969        Keep in mind that changing 'fenc' from a modeline happens
   2970        AFTER the text has been read, thus it applies to when the file will be
   2971        written.  If you do set 'fenc' in a modeline, you might want to set
   2972        'nomodified' to avoid not being able to ":q".
   2973 
   2974        This option cannot be changed when 'modifiable' is off.
   2975      ]=],
   2976      expand_cb = 'expand_set_encoding',
   2977      full_name = 'fileencoding',
   2978      no_mkrc = true,
   2979      redraw = { 'statuslines', 'current_buffer' },
   2980      scope = { 'buf' },
   2981      short_desc = N_('file encoding for multi-byte text'),
   2982      tags = { 'E213' },
   2983      type = 'string',
   2984      varname = 'p_fenc',
   2985    },
   2986    {
   2987      abbreviation = 'fencs',
   2988      defaults = 'ucs-bom,utf-8,default,latin1',
   2989      deny_duplicates = true,
   2990      desc = [=[
   2991        This is a list of character encodings considered when starting to edit
   2992        an existing file.  When a file is read, Vim tries to use the first
   2993        mentioned character encoding.  If an error is detected, the next one
   2994        in the list is tried.  When an encoding is found that works,
   2995        'fileencoding' is set to it.  If all fail, 'fileencoding' is set to
   2996        an empty string, which means that UTF-8 is used.
   2997        	WARNING: Conversion can cause loss of information! You can use
   2998        	the |++bad| argument to specify what is done with characters
   2999        	that can't be converted.
   3000        For an empty file or a file with only ASCII characters most encodings
   3001        will work and the first entry of 'fileencodings' will be used (except
   3002        "ucs-bom", which requires the BOM to be present).  If you prefer
   3003        another encoding use an BufReadPost autocommand event to test if your
   3004        preferred encoding is to be used.  Example: >vim
   3005        	au BufReadPost * if search('\S', 'w') == 0 |
   3006        		\ set fenc=iso-2022-jp | endif
   3007        <	This sets 'fileencoding' to "iso-2022-jp" if the file does not contain
   3008        non-blank characters.
   3009        When the |++enc| argument is used then the value of 'fileencodings' is
   3010        not used.
   3011        Note that 'fileencodings' is not used for a new file, the global value
   3012        of 'fileencoding' is used instead.  You can set it with: >vim
   3013        	setglobal fenc=iso-8859-2
   3014        <	This means that a non-existing file may get a different encoding than
   3015        an empty file.
   3016        The special value "ucs-bom" can be used to check for a Unicode BOM
   3017        (Byte Order Mark) at the start of the file.  It must not be preceded
   3018        by "utf-8" or another Unicode encoding for this to work properly.
   3019        An entry for an 8-bit encoding (e.g., "latin1") should be the last,
   3020        because Vim cannot detect an error, thus the encoding is always
   3021        accepted.
   3022        The special value "default" can be used for the encoding from the
   3023        environment.  It is useful when your environment uses a non-latin1
   3024        encoding, such as Russian.
   3025        When a file contains an illegal UTF-8 byte sequence it won't be
   3026        recognized as "utf-8".  You can use the |8g8| command to find the
   3027        illegal byte sequence.
   3028        WRONG VALUES:			WHAT'S WRONG:
   3029        	latin1,utf-8		"latin1" will always be used
   3030        	utf-8,ucs-bom,latin1	BOM won't be recognized in a utf-8
   3031        				file
   3032        	cp1250,latin1		"cp1250" will always be used
   3033        If 'fileencodings' is empty, 'fileencoding' is not modified.
   3034        See 'fileencoding' for the possible values.
   3035        Setting this option does not have an effect until the next time a file
   3036        is read.
   3037      ]=],
   3038      expand_cb = 'expand_set_encoding',
   3039      full_name = 'fileencodings',
   3040      list = 'onecomma',
   3041      scope = { 'global' },
   3042      short_desc = N_('automatically detected character encodings'),
   3043      type = 'string',
   3044      varname = 'p_fencs',
   3045    },
   3046    {
   3047      abbreviation = 'ff',
   3048      cb = 'did_set_fileformat',
   3049      defaults = {
   3050        condition = 'USE_CRNL',
   3051        if_true = 'dos',
   3052        if_false = 'unix',
   3053        doc = 'Windows: "dos", Unix: "unix"',
   3054      },
   3055      values = { 'unix', 'dos', 'mac' },
   3056      desc = [=[
   3057        This gives the <EOL> of the current buffer, which is used for
   3058        reading/writing the buffer from/to a file:
   3059            dos	    <CR><NL>
   3060            unix    <NL>
   3061            mac	    <CR>
   3062        When "dos" is used, CTRL-Z at the end of a file is ignored.
   3063        See |file-formats| and |file-read|.
   3064        For the character encoding of the file see 'fileencoding'.
   3065        When 'binary' is set, the value of 'fileformat' is ignored, file I/O
   3066        works like it was set to "unix".
   3067        This option is set automatically when starting to edit a file and
   3068        'fileformats' is not empty and 'binary' is off.
   3069        When this option is set, after starting to edit a file, the 'modified'
   3070        option is set, because the file would be different when written.
   3071        This option cannot be changed when 'modifiable' is off.
   3072      ]=],
   3073      full_name = 'fileformat',
   3074      no_mkrc = true,
   3075      redraw = { 'curswant', 'statuslines' },
   3076      scope = { 'buf' },
   3077      short_desc = N_('file format used for file I/O'),
   3078      type = 'string',
   3079      varname = 'p_ff',
   3080    },
   3081    {
   3082      abbreviation = 'ffs',
   3083      cb = 'did_set_str_generic',
   3084      defaults = {
   3085        condition = 'USE_CRNL',
   3086        if_true = 'dos,unix',
   3087        if_false = 'unix,dos',
   3088        doc = 'Windows: "dos,unix", Unix: "unix,dos"',
   3089      },
   3090      deny_duplicates = true,
   3091      desc = [=[
   3092        This gives the end-of-line (<EOL>) formats that will be tried when
   3093        starting to edit a new buffer and when reading a file into an existing
   3094        buffer:
   3095        - When empty, the format defined with 'fileformat' will be used
   3096          always.  It is not set automatically.
   3097        - When set to one name, that format will be used whenever a new buffer
   3098          is opened.  'fileformat' is set accordingly for that buffer.  The
   3099          'fileformats' name will be used when a file is read into an existing
   3100          buffer, no matter what 'fileformat' for that buffer is set to.
   3101        - When more than one name is present, separated by commas, automatic
   3102          <EOL> detection will be done when reading a file.  When starting to
   3103          edit a file, a check is done for the <EOL>:
   3104          1. If all lines end in <CR><NL>, and 'fileformats' includes "dos",
   3105             'fileformat' is set to "dos".
   3106          2. If a <NL> is found and 'fileformats' includes "unix",
   3107             'fileformat' is set to "unix".  Note that when a <NL> is found
   3108             without a preceding <CR>, "unix" is preferred over "dos".
   3109          3. If 'fileformat' has not yet been set, and if a <CR> is found, and
   3110             if 'fileformats' includes "mac", 'fileformat' is set to "mac".
   3111             This means that "mac" is only chosen when:
   3112              "unix" is not present or no <NL> is found in the file, and
   3113              "dos" is not present or no <CR><NL> is found in the file.
   3114             Except: if "unix" was chosen, but there is a <CR> before
   3115             the first <NL>, and there appear to be more <CR>s than <NL>s in
   3116             the first few lines, "mac" is used.
   3117          4. If 'fileformat' is still not set, the first name from
   3118             'fileformats' is used.
   3119          When reading a file into an existing buffer, the same is done, but
   3120          this happens like 'fileformat' has been set appropriately for that
   3121          file only, the option is not changed.
   3122        When 'binary' is set, the value of 'fileformats' is not used.
   3123 
   3124        When Vim starts up with an empty buffer the first item is used.  You
   3125        can overrule this by setting 'fileformat' in your .vimrc.
   3126 
   3127        For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
   3128        are ":source"ed and for vimrc files, automatic <EOL> detection may be
   3129        done:
   3130        - When 'fileformats' is empty, there is no automatic detection.  Dos
   3131          format will be used.
   3132        - When 'fileformats' is set to one or more names, automatic detection
   3133          is done.  This is based on the first <NL> in the file: If there is a
   3134          <CR> in front of it, Dos format is used, otherwise Unix format is
   3135          used.
   3136        Also see |file-formats|.
   3137      ]=],
   3138      expand_cb = 'expand_set_str_generic',
   3139      full_name = 'fileformats',
   3140      list = 'onecomma',
   3141      scope = { 'global' },
   3142      short_desc = N_("automatically detected values for 'fileformat'"),
   3143      type = 'string',
   3144      varname = 'p_ffs',
   3145    },
   3146    {
   3147      abbreviation = 'fic',
   3148      defaults = {
   3149        condition = 'CASE_INSENSITIVE_FILENAME',
   3150        if_false = false,
   3151        if_true = true,
   3152        doc = [[on for systems where case in file
   3153   names is normally ignored]],
   3154      },
   3155      desc = [=[
   3156        When set, case is ignored when using file and directory names.
   3157 
   3158        This option is on by default on systems where the filesystem is
   3159        traditionally case-insensitive (for example MS-Windows and macOS).
   3160        However, Vim cannot determine at runtime whether a particular
   3161        filesystem is case-sensitive or case-insensitive.
   3162 
   3163        See 'wildignorecase' for only ignoring case when doing completion.
   3164      ]=],
   3165      full_name = 'fileignorecase',
   3166      scope = { 'global' },
   3167      short_desc = N_('ignore case when using file names'),
   3168      type = 'boolean',
   3169      varname = 'p_fic',
   3170    },
   3171    {
   3172      abbreviation = 'ft',
   3173      cb = 'did_set_filetype_or_syntax',
   3174      defaults = '',
   3175      desc = [=[
   3176        When this option is set, the FileType autocommand event is triggered.
   3177        All autocommands that match with the value of this option will be
   3178        executed.  Thus the value of 'filetype' is used in place of the file
   3179        name.
   3180        Otherwise this option does not always reflect the current file type.
   3181        This option is normally set when the file type is detected.  To enable
   3182        this use the ":filetype on" command. |:filetype|
   3183        Setting this option to a different value is most useful in a modeline,
   3184        for a file for which the file type is not automatically recognized.
   3185        Example, for in an IDL file: >c
   3186        	/* vim: set filetype=idl : */
   3187        <	|FileType| |filetypes|
   3188        When a dot appears in the value then this separates two filetype
   3189        names, it should therefore not be used for a filetype.  Example: >c
   3190        	/* vim: set filetype=c.doxygen : */
   3191        <	This will use the "c" filetype first, then the "doxygen" filetype.
   3192        This works both for filetype plugins and for syntax files.  More than
   3193        one dot may appear.
   3194        This option is not copied to another buffer, independent of the 's' or
   3195        'S' flag in 'cpoptions'.
   3196        Only alphanumeric characters, '-' and '_' can be used (and a '.' is
   3197        allowed as delimiter when combining different filetypes).
   3198      ]=],
   3199      full_name = 'filetype',
   3200      noglob = true,
   3201      normal_fname_chars = true,
   3202      scope = { 'buf' },
   3203      short_desc = N_('type of file, used for autocommands'),
   3204      type = 'string',
   3205      varname = 'p_ft',
   3206    },
   3207    {
   3208      abbreviation = 'fcs',
   3209      cb = 'did_set_chars_option',
   3210      defaults = '',
   3211      deny_duplicates = true,
   3212      desc = [=[
   3213        Characters to fill the statuslines, vertical separators, special
   3214        lines in the window and truncated text in the |ins-completion-menu|.
   3215        It is a comma-separated list of items.  Each item has a name, a colon
   3216        and the value of that item: |E1511|
   3217 
   3218          item		default		Used for ~
   3219          stl		' '		statusline of the current window
   3220          stlnc		' '		statusline of the non-current windows
   3221          wbr		' '		window bar
   3222          horiz		'─' or '-'	horizontal separators |:split|
   3223          horizup	'┴' or '-'	upwards facing horizontal separator
   3224          horizdown	'┬' or '-'	downwards facing horizontal separator
   3225          vert		'│' or '|'	vertical separators |:vsplit|
   3226          vertleft	'┤' or '|'	left facing vertical separator
   3227          vertright	'├' or '|'	right facing vertical separator
   3228          verthoriz	'┼' or '+'	overlapping vertical and horizontal
   3229        				separator
   3230          fold		'·' or '-'	filling 'foldtext'
   3231          foldopen	'-'		mark the beginning of a fold
   3232          foldclose	'+'		show a closed fold
   3233          foldsep	'│' or '|'	open fold middle marker
   3234          foldinner	none		character to show instead of the
   3235        				numeric foldlevel when it would be
   3236        				repeated in a narrow 'foldcolumn'
   3237          diff		'-'		deleted lines of the 'diff' option
   3238          msgsep	' '		message separator 'display'
   3239          eob		'~'		empty lines at the end of a buffer
   3240          lastline	'@'		'display' contains lastline/truncate
   3241          trunc		'>'		truncated text in the
   3242        				|ins-completion-menu|.
   3243          truncrl	'<'		same as "trunc" in 'rightleft' mode
   3244 
   3245        Any one that is omitted will fall back to the default.
   3246 
   3247        Note that "horiz", "horizup", "horizdown", "vertleft", "vertright" and
   3248        "verthoriz" are only used when 'laststatus' is 3, since only vertical
   3249        window separators are used otherwise.
   3250 
   3251        If 'ambiwidth' is "double" then "horiz", "horizup", "horizdown",
   3252        "vert", "vertleft", "vertright", "verthoriz", "foldsep" and "fold"
   3253        default to single-byte alternatives.
   3254 
   3255        Example: >vim
   3256            set fillchars=stl:\ ,stlnc:\ ,vert:│,fold:·,diff:-
   3257        <
   3258        All items support single-byte and multibyte characters.  But
   3259        double-width characters are not supported. |E1512|
   3260 
   3261        The highlighting used for these items:
   3262          item		highlight group ~
   3263          stl		StatusLine		|hl-StatusLine|
   3264          stlnc		StatusLineNC		|hl-StatusLineNC|
   3265          wbr		WinBar			|hl-WinBar| or |hl-WinBarNC|
   3266          horiz		WinSeparator		|hl-WinSeparator|
   3267          horizup	WinSeparator		|hl-WinSeparator|
   3268          horizdown	WinSeparator		|hl-WinSeparator|
   3269          vert		WinSeparator		|hl-WinSeparator|
   3270          vertleft	WinSeparator		|hl-WinSeparator|
   3271          vertright	WinSeparator		|hl-WinSeparator|
   3272          verthoriz	WinSeparator		|hl-WinSeparator|
   3273          fold		Folded			|hl-Folded|
   3274          foldopen	FoldColumn		|hl-FoldColumn|
   3275          foldclose	FoldColumn		|hl-FoldColumn|
   3276          foldsep	FoldColumn		|hl-FoldColumn|
   3277          diff		DiffDelete		|hl-DiffDelete|
   3278          msgsep	MsgSeparator		|hl-MsgSeparator|
   3279          eob		EndOfBuffer		|hl-EndOfBuffer|
   3280          lastline	NonText			|hl-NonText|
   3281          trunc		one of the many Popup menu highlighting groups like
   3282        		|hl-PmenuSel|
   3283          truncrl	same as "trunc"
   3284      ]=],
   3285      expand_cb = 'expand_set_chars_option',
   3286      full_name = 'fillchars',
   3287      list = 'onecomma',
   3288      redraw = { 'current_window' },
   3289      scope = { 'global', 'win' },
   3290      short_desc = N_('characters to use for displaying special items'),
   3291      type = 'string',
   3292      varname = 'p_fcs',
   3293    },
   3294    {
   3295      abbreviation = 'ffu',
   3296      cb = 'did_set_findfunc',
   3297      defaults = '',
   3298      desc = [=[
   3299        Function that is called to obtain the filename(s) for the |:find|
   3300        command.  When this option is empty, the internal |file-searching|
   3301        mechanism is used.
   3302 
   3303        The value can be the name of a function, a |lambda| or a |Funcref|.
   3304        See |option-value-function| for more information.
   3305 
   3306        The function is called with two arguments.  The first argument is a
   3307        |String| and is the |:find| command argument.  The second argument is
   3308        a |Boolean| and is set to |v:true| when the function is called to get
   3309        a List of command-line completion matches for the |:find| command.
   3310        The function should return a List of strings.
   3311 
   3312        The function is called only once per |:find| command invocation.
   3313        The function can process all the directories specified in 'path'.
   3314 
   3315        If a match is found, the function should return a |List| containing
   3316        one or more file names.  If a match is not found, the function
   3317        should return an empty List.
   3318 
   3319        If any errors are encountered during the function invocation, an
   3320        empty List is used as the return value.
   3321 
   3322        It is not allowed to change text or jump to another window while
   3323        executing the 'findfunc' |textlock|.
   3324 
   3325        This option cannot be set from a |modeline| or in the |sandbox|, for
   3326        security reasons.
   3327 
   3328        Examples:
   3329        >vim
   3330            " Use glob()
   3331            func FindFuncGlob(cmdarg, cmdcomplete)
   3332        	let pat = a:cmdcomplete ? $'{a:cmdarg}*' : a:cmdarg
   3333        	return glob(pat, v:false, v:true)
   3334            endfunc
   3335            set findfunc=FindFuncGlob
   3336 
   3337            " Use the 'git ls-files' output
   3338            func FindGitFiles(cmdarg, cmdcomplete)
   3339        	let fnames = systemlist('git ls-files')
   3340        	return fnames->filter('v:val =~? a:cmdarg')
   3341            endfunc
   3342            set findfunc=FindGitFiles
   3343        <
   3344      ]=],
   3345      full_name = 'findfunc',
   3346      func = true,
   3347      scope = { 'global', 'buf' },
   3348      secure = true,
   3349      short_desc = N_('function called for :find'),
   3350      tags = { 'E1514' },
   3351      type = 'string',
   3352      varname = 'p_ffu',
   3353    },
   3354    {
   3355      abbreviation = 'fixeol',
   3356      cb = 'did_set_eof_eol_fixeol_bomb',
   3357      defaults = true,
   3358      desc = [=[
   3359        When writing a file and this option is on, <EOL> at the end of file
   3360        will be restored if missing.  Turn this option off if you want to
   3361        preserve the situation from the original file.
   3362        When the 'binary' option is set the value of this option doesn't
   3363        matter.
   3364        See the 'endofline' option.
   3365        See |eol-and-eof| for example settings.
   3366      ]=],
   3367      full_name = 'fixendofline',
   3368      redraw = { 'statuslines' },
   3369      scope = { 'buf' },
   3370      short_desc = N_('make sure last line in file has <EOL>'),
   3371      type = 'boolean',
   3372      varname = 'p_fixeol',
   3373    },
   3374    {
   3375      abbreviation = 'fcl',
   3376      defaults = '',
   3377      values = { 'all' },
   3378      deny_duplicates = true,
   3379      desc = [=[
   3380        When set to "all", a fold is closed when the cursor isn't in it and
   3381        its level is higher than 'foldlevel'.  Useful if you want folds to
   3382        automatically close when moving out of them.
   3383      ]=],
   3384      full_name = 'foldclose',
   3385      list = 'onecomma',
   3386      redraw = { 'current_window' },
   3387      scope = { 'global' },
   3388      short_desc = N_('close a fold when the cursor leaves it'),
   3389      type = 'string',
   3390      varname = 'p_fcl',
   3391    },
   3392    {
   3393      abbreviation = 'fdc',
   3394      defaults = '0',
   3395      values = {
   3396        'auto',
   3397        'auto:1',
   3398        'auto:2',
   3399        'auto:3',
   3400        'auto:4',
   3401        'auto:5',
   3402        'auto:6',
   3403        'auto:7',
   3404        'auto:8',
   3405        'auto:9',
   3406        '0',
   3407        '1',
   3408        '2',
   3409        '3',
   3410        '4',
   3411        '5',
   3412        '6',
   3413        '7',
   3414        '8',
   3415        '9',
   3416      },
   3417      desc = [=[
   3418        When and how to draw the foldcolumn. Valid values are:
   3419            "auto":       resize to the minimum amount of folds to display.
   3420            "auto:[1-9]": resize to accommodate multiple folds up to the
   3421        		  selected level
   3422            "0":          to disable foldcolumn
   3423            "[1-9]":      to display a fixed number of columns
   3424        See |folding|.
   3425      ]=],
   3426      full_name = 'foldcolumn',
   3427      redraw = { 'current_window' },
   3428      scope = { 'win' },
   3429      short_desc = N_('width of the column used to indicate folds'),
   3430      type = 'string',
   3431    },
   3432    {
   3433      abbreviation = 'fen',
   3434      defaults = true,
   3435      desc = [=[
   3436        When off, all folds are open.  This option can be used to quickly
   3437        switch between showing all text unfolded and viewing the text with
   3438        folds (including manually opened or closed folds).  It can be toggled
   3439        with the |zi| command.  The 'foldcolumn' will remain blank when
   3440        'foldenable' is off.
   3441        This option is set by commands that create a new fold or close a fold.
   3442        See |folding|.
   3443      ]=],
   3444      full_name = 'foldenable',
   3445      redraw = { 'current_window' },
   3446      scope = { 'win' },
   3447      short_desc = N_('set to display all folds open'),
   3448      type = 'boolean',
   3449    },
   3450    {
   3451      abbreviation = 'fde',
   3452      cb = 'did_set_foldexpr',
   3453      defaults = '0',
   3454      desc = [=[
   3455        The expression used for when 'foldmethod' is "expr".  It is evaluated
   3456        for each line to obtain its fold level.  The context is set to the
   3457        script where 'foldexpr' was set, script-local items can be accessed.
   3458        See |fold-expr| for the usage.
   3459 
   3460        The expression will be evaluated in the |sandbox| if set from a
   3461        modeline, see |sandbox-option|.
   3462        This option can't be set from a |modeline| when the 'diff' option is
   3463        on or the 'modelineexpr' option is off.
   3464 
   3465        It is not allowed to change text or jump to another window while
   3466        evaluating 'foldexpr' |textlock|.
   3467      ]=],
   3468      full_name = 'foldexpr',
   3469      modelineexpr = true,
   3470      redraw = { 'current_window' },
   3471      scope = { 'win' },
   3472      short_desc = N_('expression used when \'foldmethod\' is "expr"'),
   3473      type = 'string',
   3474    },
   3475    {
   3476      abbreviation = 'fdi',
   3477      cb = 'did_set_foldignore',
   3478      defaults = '#',
   3479      desc = [=[
   3480        Used only when 'foldmethod' is "indent".  Lines starting with
   3481        characters in 'foldignore' will get their fold level from surrounding
   3482        lines.  White space is skipped before checking for this character.
   3483        The default "#" works well for C programs.  See |fold-indent|.
   3484      ]=],
   3485      full_name = 'foldignore',
   3486      redraw = { 'current_window' },
   3487      scope = { 'win' },
   3488      short_desc = N_('ignore lines when \'foldmethod\' is "indent"'),
   3489      type = 'string',
   3490    },
   3491    {
   3492      abbreviation = 'fdl',
   3493      cb = 'did_set_foldlevel',
   3494      defaults = 0,
   3495      desc = [=[
   3496        Sets the fold level: Folds with a higher level will be closed.
   3497        Setting this option to zero will close all folds.  Higher numbers will
   3498        close fewer folds.
   3499        This option is set by commands like |zm|, |zM| and |zR|.
   3500        See |fold-foldlevel|.
   3501      ]=],
   3502      full_name = 'foldlevel',
   3503      redraw = { 'current_window' },
   3504      scope = { 'win' },
   3505      short_desc = N_('close folds with a level higher than this'),
   3506      type = 'number',
   3507    },
   3508    {
   3509      abbreviation = 'fdls',
   3510      defaults = -1,
   3511      desc = [=[
   3512        Sets 'foldlevel' when starting to edit another buffer in a window.
   3513        Useful to always start editing with all folds closed (value zero),
   3514        some folds closed (one) or no folds closed (99).
   3515        This is done before reading any modeline, thus a setting in a modeline
   3516        overrules this option.  Starting to edit a file for |diff-mode| also
   3517        ignores this option and closes all folds.
   3518        It is also done before BufReadPre autocommands, to allow an autocmd to
   3519        overrule the 'foldlevel' value for specific files.
   3520        When the value is negative, it is not used.
   3521      ]=],
   3522      full_name = 'foldlevelstart',
   3523      redraw = { 'curswant' },
   3524      scope = { 'global' },
   3525      short_desc = N_("'foldlevel' when starting to edit a file"),
   3526      type = 'number',
   3527      varname = 'p_fdls',
   3528    },
   3529    {
   3530      abbreviation = 'fmr',
   3531      cb = 'did_set_foldmarker',
   3532      defaults = '{{{,}}}',
   3533      deny_duplicates = true,
   3534      desc = [=[
   3535        The start and end marker used when 'foldmethod' is "marker".  There
   3536        must be one comma, which separates the start and end marker.  The
   3537        marker is a literal string (a regular expression would be too slow).
   3538        See |fold-marker|.
   3539      ]=],
   3540      full_name = 'foldmarker',
   3541      list = 'onecomma',
   3542      redraw = { 'current_window' },
   3543      scope = { 'win' },
   3544      short_desc = N_('markers used when \'foldmethod\' is "marker"'),
   3545      tags = { 'E536' },
   3546      type = 'string',
   3547    },
   3548    {
   3549      abbreviation = 'fdm',
   3550      cb = 'did_set_foldmethod',
   3551      defaults = 'manual',
   3552      values = { 'manual', 'expr', 'marker', 'indent', 'syntax', 'diff' },
   3553      desc = [=[
   3554        The kind of folding used for the current window.  Possible values:
   3555        |fold-manual|	manual	    Folds are created manually.
   3556        |fold-indent|	indent	    Lines with equal indent form a fold.
   3557        |fold-expr|	expr	    'foldexpr' gives the fold level of a line.
   3558        |fold-marker|	marker	    Markers are used to specify folds.
   3559        |fold-syntax|	syntax	    Syntax highlighting items specify folds.
   3560        |fold-diff|	diff	    Fold text that is not changed.
   3561      ]=],
   3562      full_name = 'foldmethod',
   3563      redraw = { 'current_window' },
   3564      scope = { 'win' },
   3565      short_desc = N_('folding type'),
   3566      type = 'string',
   3567    },
   3568    {
   3569      abbreviation = 'fml',
   3570      cb = 'did_set_foldminlines',
   3571      defaults = 1,
   3572      desc = [=[
   3573        Sets the number of screen lines above which a fold can be displayed
   3574        closed.  Also for manually closed folds.  With the default value of
   3575        one a fold can only be closed if it takes up two or more screen lines.
   3576        Set to zero to be able to close folds of just one screen line.
   3577        Note that this only has an effect on what is displayed.  After using
   3578        "zc" to close a fold, which is displayed open because it's smaller
   3579        than 'foldminlines', a following "zc" may close a containing fold.
   3580      ]=],
   3581      full_name = 'foldminlines',
   3582      redraw = { 'current_window' },
   3583      scope = { 'win' },
   3584      short_desc = N_('minimum number of lines for a fold to be closed'),
   3585      type = 'number',
   3586    },
   3587    {
   3588      abbreviation = 'fdn',
   3589      cb = 'did_set_foldnestmax',
   3590      defaults = 20,
   3591      desc = [=[
   3592        Sets the maximum nesting of folds for the "indent" and "syntax"
   3593        methods.  This avoids that too many folds will be created.  Using more
   3594        than 20 doesn't work, because the internal limit is 20.
   3595      ]=],
   3596      full_name = 'foldnestmax',
   3597      redraw = { 'current_window' },
   3598      scope = { 'win' },
   3599      short_desc = N_('maximum fold depth'),
   3600      type = 'number',
   3601    },
   3602    {
   3603      abbreviation = 'fdo',
   3604      defaults = 'block,hor,mark,percent,quickfix,search,tag,undo',
   3605      values = {
   3606        'all',
   3607        'block',
   3608        'hor',
   3609        'mark',
   3610        'percent',
   3611        'quickfix',
   3612        'search',
   3613        'tag',
   3614        'insert',
   3615        'undo',
   3616        'jump',
   3617      },
   3618      flags = true,
   3619      deny_duplicates = true,
   3620      desc = [=[
   3621        Specifies for which type of commands folds will be opened, if the
   3622        command moves the cursor into a closed fold.  It is a comma-separated
   3623        list of items.
   3624        NOTE: When the command is part of a mapping this option is not used.
   3625        Add the |zv| command to the mapping to get the same effect.
   3626        (rationale: the mapping may want to control opening folds itself)
   3627 
   3628        	item		commands ~
   3629        	all		any
   3630        	block		(, {, [[, [{, etc.
   3631        	hor		horizontal movements: "l", "w", "fx", etc.
   3632        	insert		any command in Insert mode
   3633        	jump		far jumps: "G", "gg", etc.
   3634        	mark		jumping to a mark: "'m", CTRL-O, etc.
   3635        	percent		"%"
   3636        	quickfix	":cn", ":crew", ":make", etc.
   3637        	search		search for a pattern: "/", "n", "*", "gd", etc.
   3638        			(not for a search pattern in a ":" command)
   3639        			Also for |[s| and |]s|.
   3640        	tag		jumping to a tag: ":ta", CTRL-T, etc.
   3641        	undo		undo or redo: "u" and CTRL-R
   3642        When a movement command is used for an operator (e.g., "dl" or "y%")
   3643        this option is not used.  This means the operator will include the
   3644        whole closed fold.
   3645        Note that vertical movements are not here, because it would make it
   3646        very difficult to move onto a closed fold.
   3647        In insert mode the folds containing the cursor will always be open
   3648        when text is inserted.
   3649        To close folds you can re-apply 'foldlevel' with the |zx| command or
   3650        set the 'foldclose' option to "all".
   3651      ]=],
   3652      full_name = 'foldopen',
   3653      list = 'onecomma',
   3654      redraw = { 'curswant' },
   3655      scope = { 'global' },
   3656      short_desc = N_('for which commands a fold will be opened'),
   3657      type = 'string',
   3658      varname = 'p_fdo',
   3659      flags_varname = 'fdo_flags',
   3660    },
   3661    {
   3662      abbreviation = 'fdt',
   3663      cb = 'did_set_optexpr',
   3664      defaults = 'foldtext()',
   3665      desc = [=[
   3666        An expression which is used to specify the text displayed for a closed
   3667        fold.  The context is set to the script where 'foldexpr' was set,
   3668        script-local items can be accessed.  See |fold-foldtext| for the
   3669        usage.
   3670 
   3671        The expression will be evaluated in the |sandbox| if set from a
   3672        modeline, see |sandbox-option|.
   3673        This option cannot be set in a modeline when 'modelineexpr' is off.
   3674 
   3675        It is not allowed to change text or jump to another window while
   3676        evaluating 'foldtext' |textlock|.
   3677 
   3678        When set to an empty string, foldtext is disabled, and the line
   3679        is displayed normally with highlighting and no line wrapping.
   3680      ]=],
   3681      full_name = 'foldtext',
   3682      modelineexpr = true,
   3683      redraw = { 'current_window' },
   3684      scope = { 'win' },
   3685      short_desc = N_('expression used to display for a closed fold'),
   3686      type = 'string',
   3687    },
   3688    {
   3689      abbreviation = 'fex',
   3690      cb = 'did_set_optexpr',
   3691      defaults = '',
   3692      desc = [=[
   3693        Expression which is evaluated to format a range of lines for the |gq|
   3694        operator or automatic formatting (see 'formatoptions').  When this
   3695        option is empty 'formatprg' is used.
   3696 
   3697        The |v:lnum|  variable holds the first line to be formatted.
   3698        The |v:count| variable holds the number of lines to be formatted.
   3699        The |v:char|  variable holds the character that is going to be
   3700        	      inserted if the expression is being evaluated due to
   3701        	      automatic formatting.  This can be empty.  Don't insert
   3702        	      it yet!
   3703 
   3704        Example: >vim
   3705        	set formatexpr=mylang#Format()
   3706        <	This will invoke the mylang#Format() function in the
   3707        autoload/mylang.vim file in 'runtimepath'. |autoload|
   3708 
   3709        The advantage of using a function call without arguments is that it is
   3710        faster, see |expr-option-function|.
   3711 
   3712        The expression is also evaluated when 'textwidth' is set and adding
   3713        text beyond that limit.  This happens under the same conditions as
   3714        when internal formatting is used.  Make sure the cursor is kept in the
   3715        same spot relative to the text then!  The |mode()| function will
   3716        return "i" or "R" in this situation.
   3717 
   3718        When the expression evaluates to non-zero Vim will fall back to using
   3719        the internal format mechanism.
   3720 
   3721        If the expression starts with s: or |<SID>|, then it is replaced with
   3722        the script ID (|local-function|).  Example: >vim
   3723        	set formatexpr=s:MyFormatExpr()
   3724        	set formatexpr=<SID>SomeFormatExpr()
   3725        <	Otherwise, the expression is evaluated in the context of the script
   3726        where the option was set, thus script-local items are available.
   3727 
   3728        The expression will be evaluated in the |sandbox| when set from a
   3729        modeline, see |sandbox-option|.  That stops the option from working,
   3730        since changing the buffer text is not allowed.
   3731        This option cannot be set in a modeline when 'modelineexpr' is off.
   3732      ]=],
   3733      full_name = 'formatexpr',
   3734      modelineexpr = true,
   3735      scope = { 'buf' },
   3736      short_desc = N_('expression used with "gq" command'),
   3737      type = 'string',
   3738      varname = 'p_fex',
   3739    },
   3740    {
   3741      abbreviation = 'flp',
   3742      defaults = '^\\s*\\d\\+[\\]:.)}\\t ]\\s*',
   3743      desc = [=[
   3744        A pattern that is used to recognize a list header.  This is used for
   3745        the "n" flag in 'formatoptions'.
   3746        The pattern must match exactly the text that will be the indent for
   3747        the line below it.  You can use |/\ze| to mark the end of the match
   3748        while still checking more characters.  There must be a character
   3749        following the pattern, when it matches the whole line it is handled
   3750        like there is no match.
   3751        The default recognizes a number, followed by an optional punctuation
   3752        character and white space.
   3753      ]=],
   3754      full_name = 'formatlistpat',
   3755      scope = { 'buf' },
   3756      short_desc = N_('pattern used to recognize a list header'),
   3757      type = 'string',
   3758      varname = 'p_flp',
   3759    },
   3760    {
   3761      abbreviation = 'fo',
   3762      cb = 'did_set_formatoptions',
   3763      defaults = macros('DFLT_FO_VIM', 'string'),
   3764      desc = [=[
   3765        This is a sequence of letters which describes how automatic
   3766        formatting is to be done.
   3767        See |fo-table| for possible values and |gq| for how to format text.
   3768        Commas can be inserted for readability.
   3769        To avoid problems with flags that are added in the future, use the
   3770        "+=" and "-=" feature of ":set" |add-option-flags|.
   3771      ]=],
   3772      expand_cb = 'expand_set_formatoptions',
   3773      full_name = 'formatoptions',
   3774      list = 'flags',
   3775      scope = { 'buf' },
   3776      short_desc = N_('how automatic formatting is to be done'),
   3777      type = 'string',
   3778      varname = 'p_fo',
   3779    },
   3780    {
   3781      abbreviation = 'fp',
   3782      defaults = '',
   3783      desc = [=[
   3784        The name of an external program that will be used to format the lines
   3785        selected with the |gq| operator.  The program must take the input on
   3786        stdin and produce the output on stdout.  The Unix program "fmt" is
   3787        such a program.
   3788        If the 'formatexpr' option is not empty it will be used instead.
   3789        Otherwise, if 'formatprg' option is an empty string, the internal
   3790        format function will be used |C-indenting|.
   3791        Environment variables are expanded |:set_env|.  See |option-backslash|
   3792        about including spaces and backslashes.
   3793        This option cannot be set from a |modeline| or in the |sandbox|, for
   3794        security reasons.
   3795      ]=],
   3796      expand = true,
   3797      full_name = 'formatprg',
   3798      scope = { 'global', 'buf' },
   3799      secure = true,
   3800      short_desc = N_('name of external program used with "gq" command'),
   3801      type = 'string',
   3802      varname = 'p_fp',
   3803    },
   3804    {
   3805      abbreviation = 'fs',
   3806      defaults = true,
   3807      desc = [=[
   3808        When on, the OS function fsync() will be called after saving a file
   3809        (|:write|, |writefile()|, …), |swap-file|, |undo-persistence| and |shada-file|.
   3810        This flushes the file to disk, ensuring that it is safely written.
   3811        Slow on some systems: writing buffers, quitting Nvim, and other
   3812        operations may sometimes take a few seconds.
   3813 
   3814        Files are ALWAYS flushed ('fsync' is ignored) when:
   3815        - |CursorHold| event is triggered
   3816        - |:preserve| is called
   3817        - system signals low battery life
   3818        - Nvim exits abnormally
   3819 
   3820        This is a |global-local| option, so it can be set per buffer, for
   3821        example when writing to a slow filesystem.
   3822        This option cannot be set from a |modeline| or in the |sandbox|, for
   3823        security reasons.
   3824      ]=],
   3825      full_name = 'fsync',
   3826      scope = { 'global', 'buf' },
   3827      secure = true,
   3828      short_desc = N_('whether to invoke fsync() after file write'),
   3829      type = 'boolean',
   3830      varname = 'p_fs',
   3831    },
   3832    {
   3833      abbreviation = 'gd',
   3834      defaults = false,
   3835      full_name = 'gdefault',
   3836      scope = { 'global' },
   3837      short_desc = N_('Deprecated'),
   3838      type = 'boolean',
   3839      varname = 'p_gd',
   3840    },
   3841    {
   3842      abbreviation = 'gfm',
   3843      defaults = macros('DFLT_GREPFORMAT', 'string'),
   3844      deny_duplicates = true,
   3845      desc = [=[
   3846        Format to recognize for the ":grep" command output.
   3847        This is a scanf-like string that uses the same format as the
   3848        'errorformat' option: see |errorformat|.
   3849 
   3850        If ripgrep ('grepprg') is available, this option defaults to `%f:%l:%c:%m`.
   3851      ]=],
   3852      full_name = 'grepformat',
   3853      list = 'onecomma',
   3854      scope = { 'global', 'buf' },
   3855      short_desc = N_("format of 'grepprg' output"),
   3856      type = 'string',
   3857      varname = 'p_gefm',
   3858    },
   3859    {
   3860      abbreviation = 'gp',
   3861      defaults = {
   3862        condition = 'MSWIN',
   3863        if_false = 'grep -HIn $* /dev/null',
   3864        if_true = 'findstr /n $* nul',
   3865        doc = [[see below]],
   3866      },
   3867      desc = [=[
   3868        Program to use for the |:grep| command.  This option may contain '%'
   3869        and '#' characters, which are expanded like when used in a command-
   3870        line.  The placeholder "$*" is allowed to specify where the arguments
   3871        will be included.  Environment variables are expanded |:set_env|.  See
   3872        |option-backslash| about including spaces and backslashes.
   3873        Special value: When 'grepprg' is set to "internal" the |:grep| command
   3874        works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like
   3875        |:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.
   3876        See also the section |:make_makeprg|, since most of the comments there
   3877        apply equally to 'grepprg'.
   3878        This option cannot be set from a |modeline| or in the |sandbox|, for
   3879        security reasons.
   3880        This option defaults to:
   3881        - `rg --vimgrep -uu ` if ripgrep is available (|:checkhealth|),
   3882        - `grep -HIn $* /dev/null` on Unix,
   3883        - `findstr /n $* nul` on Windows.
   3884        Ripgrep can perform additional filtering such as using .gitignore rules
   3885        and skipping hidden files. This is disabled by default (see the -u option)
   3886        to more closely match the behaviour of standard grep.
   3887        You can make ripgrep match Vim's case handling using the
   3888        -i/--ignore-case and -S/--smart-case options.
   3889        An |OptionSet| autocmd can be used to set it up to match automatically.
   3890      ]=],
   3891      expand = true,
   3892      full_name = 'grepprg',
   3893      scope = { 'global', 'buf' },
   3894      secure = true,
   3895      short_desc = N_('program to use for ":grep"'),
   3896      type = 'string',
   3897      varname = 'p_gp',
   3898    },
   3899    {
   3900      abbreviation = 'gcr',
   3901      cb = 'did_set_guicursor',
   3902      defaults = 'n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20,t:block-blinkon500-blinkoff500-TermCursor',
   3903      deny_duplicates = true,
   3904      desc = [=[
   3905        Configures the cursor style for each mode. Works in the GUI and many
   3906        terminals.  See |tui-cursor-shape|.
   3907 
   3908        To disable cursor-styling, reset the option: >vim
   3909        	set guicursor=
   3910 
   3911        <	To enable mode shapes, "Cursor" highlight, and blinking: >vim
   3912        	set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50
   3913        	  \,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor
   3914        	  \,sm:block-blinkwait175-blinkoff150-blinkon175
   3915 
   3916        <	The option is a comma-separated list of parts.  Each part consists of a
   3917        mode-list and an argument-list:
   3918        	mode-list:argument-list,mode-list:argument-list,..
   3919        The mode-list is a dash separated list of these modes:
   3920        	n	Normal mode
   3921        	v	Visual mode
   3922        	ve	Visual mode with 'selection' "exclusive" (same as 'v',
   3923        		if not specified)
   3924        	o	Operator-pending mode
   3925        	i	Insert mode
   3926        	r	Replace mode
   3927        	c	Command-line Normal (append) mode
   3928        	ci	Command-line Insert mode
   3929        	cr	Command-line Replace mode
   3930        	sm	showmatch in Insert mode
   3931        	t	Terminal mode
   3932        	a	all modes
   3933        The argument-list is a dash separated list of these arguments:
   3934        	hor{N}	horizontal bar, {N} percent of the character height
   3935        	ver{N}	vertical bar, {N} percent of the character width
   3936        	block	block cursor, fills the whole character
   3937        		- Only one of the above three should be present.
   3938        		- Default is "block" for each mode.
   3939        	blinkwait{N}				*cursor-blinking*
   3940        	blinkon{N}
   3941        	blinkoff{N}
   3942        		blink times for cursor: blinkwait is the delay before
   3943        		the cursor starts blinking, blinkon is the time that
   3944        		the cursor is shown and blinkoff is the time that the
   3945        		cursor is not shown.  Times are in msec.  When one of
   3946        		the numbers is zero, there is no blinking. E.g.: >vim
   3947        			set guicursor=n:blinkon0
   3948        <
   3949        		Default is "blinkon0" for each mode.
   3950        	{group-name}
   3951        		Highlight group that decides the color and font of the
   3952        		cursor.
   3953        		In the |TUI|:
   3954        		- |inverse|/reverse and no group-name are interpreted
   3955        		  as "host-terminal default cursor colors" which
   3956        		  typically means "inverted bg and fg colors".
   3957        		- |ctermfg| and |guifg| are ignored.
   3958        	{group-name}/{group-name}
   3959        		Two highlight group names, the first is used when
   3960        		no language mappings are used, the other when they
   3961        		are. |language-mapping|
   3962 
   3963        Examples of parts:
   3964           n-c-v:block-nCursor	In Normal, Command-line and Visual mode, use a
   3965        			block cursor with colors from the "nCursor"
   3966        			highlight group
   3967           n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20
   3968        			In Normal et al. modes, use a block cursor
   3969        			with the default colors defined by the host
   3970        			terminal.  In Insert-like modes, use
   3971        			a vertical bar cursor with colors from
   3972        			"Cursor" highlight group.  In Replace-like
   3973        			modes, use an underline cursor with
   3974        			default colors.
   3975           i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150
   3976        			In Insert and Command-line Insert mode, use a
   3977        			30% vertical bar cursor with colors from the
   3978        			"iCursor" highlight group.  Blink a bit
   3979        			faster.
   3980 
   3981        The 'a' mode is different.  It will set the given argument-list for
   3982        all modes.  It does not reset anything to defaults.  This can be used
   3983        to do a common setting for all modes.  For example, to switch off
   3984        blinking: "a:blinkon0"
   3985 
   3986        Examples of cursor highlighting: >vim
   3987            highlight Cursor gui=reverse guifg=NONE guibg=NONE
   3988            highlight Cursor gui=NONE guifg=bg guibg=fg
   3989        <
   3990      ]=],
   3991      full_name = 'guicursor',
   3992      list = 'onecomma',
   3993      scope = { 'global' },
   3994      short_desc = N_('GUI: settings for cursor shape and blinking'),
   3995      tags = { 'E545', 'E546', 'E548', 'E549' },
   3996      type = 'string',
   3997      varname = 'p_guicursor',
   3998    },
   3999    {
   4000      abbreviation = 'gfn',
   4001      defaults = {
   4002        if_true = macros('DFLT_GFN', 'string'),
   4003        doc = [[(MS-Windows) "Cascadia Code,Cascadia Mono,Consolas,Courier New,monospace"
   4004                     (Mac) "SF Mono,Menlo,Monaco,Courier New,monospace"
   4005                   (Linux) "Source Code Pro,DejaVu Sans Mono,Courier New,monospace"
   4006                  (others) "DejaVu Sans Mono,Courier New,monospace"]],
   4007      },
   4008      desc = [=[
   4009        This is a list of fonts which will be used for the GUI version of Vim.
   4010        In its simplest form the value is just one font name.  When
   4011        the font cannot be found you will get an error message.  To try other
   4012        font names a list can be specified, font names separated with commas.
   4013        The first valid font is used.
   4014 
   4015        Spaces after a comma are ignored.  To include a comma in a font name
   4016        precede it with a backslash.  Setting an option requires an extra
   4017        backslash before a space and a backslash.  See also
   4018        |option-backslash|.  For example: >vim
   4019            set guifont=Screen15,\ 7x13,font\\,with\\,commas
   4020        <	will make Vim try to use the font "Screen15" first, and if it fails it
   4021        will try to use "7x13" and then "font,with,commas" instead.
   4022 
   4023        If none of the fonts can be loaded, Vim will keep the current setting.
   4024        If an empty font list is given, Vim will try using other resource
   4025        settings (for X, it will use the Vim.font resource), and finally it
   4026        will try some builtin default which should always be there ("7x13" in
   4027        the case of X).  The font names given should be "normal" fonts.  Vim
   4028        will try to find the related bold and italic fonts.
   4029 
   4030        For Win32 and Mac OS: >vim
   4031            set guifont=*
   4032        <	will bring up a font requester, where you can pick the font you want.
   4033 
   4034        The font name depends on the GUI used.
   4035 
   4036        For Mac OSX you can use something like this: >vim
   4037            set guifont=Monaco:h10
   4038        <								*E236*
   4039        Note that the fonts must be mono-spaced (all characters have the same
   4040        width).
   4041 
   4042        To preview a font on X11, you might be able to use the "xfontsel"
   4043        program.  The "xlsfonts" program gives a list of all available fonts.
   4044 
   4045        For the Win32 GUI					*E244* *E245*
   4046        - takes these options in the font name:
   4047        	hXX - height is XX (points, can be floating-point)
   4048        	wXX - width is XX (points, can be floating-point)
   4049        	b   - bold
   4050        	i   - italic
   4051        	u   - underline
   4052        	s   - strikeout
   4053        	cXX - character set XX.  Valid charsets are: ANSI, ARABIC,
   4054        	      BALTIC, CHINESEBIG5, DEFAULT, EASTEUROPE, GB2312, GREEK,
   4055        	      HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS,
   4056        	      SYMBOL, THAI, TURKISH, VIETNAMESE ANSI and BALTIC.
   4057        	      Normally you would use "cDEFAULT".
   4058 
   4059          Use a ':' to separate the options.
   4060        - A '_' can be used in the place of a space, so you don't need to use
   4061          backslashes to escape the spaces.
   4062        - Examples: >vim
   4063            set guifont=courier_new:h12:w5:b:cRUSSIAN
   4064            set guifont=Andale_Mono:h7.5:w4.5
   4065        <
   4066      ]=],
   4067      deny_duplicates = true,
   4068      full_name = 'guifont',
   4069      list = 'onecomma',
   4070      redraw = { 'ui_option' },
   4071      scope = { 'global' },
   4072      short_desc = N_('GUI: Name(s) of font(s) to be used'),
   4073      tags = { 'E235', 'E596' },
   4074      type = 'string',
   4075      varname = 'p_guifont',
   4076    },
   4077    {
   4078      abbreviation = 'gfw',
   4079      defaults = '',
   4080      deny_duplicates = true,
   4081      desc = [=[
   4082        Comma-separated list of fonts to be used for double-width characters.
   4083        The first font that can be loaded is used.
   4084        Note: The size of these fonts must be exactly twice as wide as the one
   4085        specified with 'guifont' and the same height.
   4086 
   4087        When 'guifont' has a valid font and 'guifontwide' is empty Vim will
   4088        attempt to set 'guifontwide' to a matching double-width font.
   4089      ]=],
   4090      full_name = 'guifontwide',
   4091      list = 'onecomma',
   4092      redraw = { 'ui_option' },
   4093      scope = { 'global' },
   4094      short_desc = N_('list of font names for double-wide characters'),
   4095      tags = { 'E231', 'E533', 'E534' },
   4096      type = 'string',
   4097      varname = 'p_guifontwide',
   4098    },
   4099    {
   4100      abbreviation = 'go',
   4101      defaults = {
   4102        if_true = '',
   4103        doc = '"egmrLT"   (MS-Windows)',
   4104      },
   4105      desc = [=[
   4106        This option only has an effect in the GUI version of Vim.  It is a
   4107        sequence of letters which describes what components and options of the
   4108        GUI should be used.
   4109        To avoid problems with flags that are added in the future, use the
   4110        "+=" and "-=" feature of ":set" |add-option-flags|.
   4111 
   4112        Valid letters are as follows:
   4113        						*guioptions_a* *'go-a'*
   4114          'a'	Autoselect:  If present, then whenever VISUAL mode is started,
   4115        	or the Visual area extended, Vim tries to become the owner of
   4116        	the windowing system's global selection.  This means that the
   4117        	Visually highlighted text is available for pasting into other
   4118        	applications as well as into Vim itself.  When the Visual mode
   4119        	ends, possibly due to an operation on the text, or when an
   4120        	application wants to paste the selection, the highlighted text
   4121        	is automatically yanked into the "* selection register.
   4122        	Thus the selection is still available for pasting into other
   4123        	applications after the VISUAL mode has ended.
   4124        	    If not present, then Vim won't become the owner of the
   4125        	windowing system's global selection unless explicitly told to
   4126        	by a yank or delete operation for the "* register.
   4127        	The same applies to the modeless selection.
   4128        							*'go-P'*
   4129          'P'	Like autoselect but using the "+ register instead of the "*
   4130        	register.
   4131        							*'go-A'*
   4132          'A'	Autoselect for the modeless selection.  Like 'a', but only
   4133        	applies to the modeless selection.
   4134 
   4135        	    'guioptions'   autoselect Visual  autoselect modeless ~
   4136        		 ""		 -			 -
   4137        		 "a"		yes			yes
   4138        		 "A"		 -			yes
   4139        		 "aA"		yes			yes
   4140 
   4141        							*'go-c'*
   4142          'c'	Use console dialogs instead of popup dialogs for simple
   4143        	choices.
   4144        							*'go-d'*
   4145          'd'	Use dark theme variant if available.
   4146        							*'go-e'*
   4147          'e'	Add tab pages when indicated with 'showtabline'.
   4148        	'guitablabel' can be used to change the text in the labels.
   4149        	When 'e' is missing a non-GUI tab pages line may be used.
   4150        	The GUI tabs are only supported on some systems, currently
   4151        	Mac OS/X and MS-Windows.
   4152        							*'go-i'*
   4153          'i'	Use a Vim icon.
   4154        							*'go-m'*
   4155          'm'	Menu bar is present.
   4156        							*'go-M'*
   4157          'M'	The system menu "$VIMRUNTIME/menu.vim" is not sourced.  Note
   4158        	that this flag must be added in the vimrc file, before
   4159        	switching on syntax or filetype recognition (when the |gvimrc|
   4160        	file is sourced the system menu has already been loaded; the
   4161        	`:syntax on` and `:filetype on` commands load the menu too).
   4162        							*'go-g'*
   4163          'g'	Grey menu items: Make menu items that are not active grey.  If
   4164        	'g' is not included inactive menu items are not shown at all.
   4165        							*'go-T'*
   4166          'T'	Include Toolbar.  Currently only in Win32 GUI.
   4167        							*'go-r'*
   4168          'r'	Right-hand scrollbar is always present.
   4169        							*'go-R'*
   4170          'R'	Right-hand scrollbar is present when there is a vertically
   4171        	split window.
   4172        							*'go-l'*
   4173          'l'	Left-hand scrollbar is always present.
   4174        							*'go-L'*
   4175          'L'	Left-hand scrollbar is present when there is a vertically
   4176        	split window.
   4177        							*'go-b'*
   4178          'b'	Bottom (horizontal) scrollbar is present.  Its size depends on
   4179        	the longest visible line, or on the cursor line if the 'h'
   4180        	flag is included. |gui-horiz-scroll|
   4181        							*'go-h'*
   4182          'h'	Limit horizontal scrollbar size to the length of the cursor
   4183        	line.  Reduces computations. |gui-horiz-scroll|
   4184 
   4185        And yes, you may even have scrollbars on the left AND the right if
   4186        you really want to :-).  See |gui-scrollbars| for more information.
   4187 
   4188        							*'go-v'*
   4189          'v'	Use a vertical button layout for dialogs.  When not included,
   4190        	a horizontal layout is preferred, but when it doesn't fit a
   4191        	vertical layout is used anyway.  Not supported in GTK 3.
   4192        							*'go-p'*
   4193          'p'	Use Pointer callbacks for X11 GUI.  This is required for some
   4194        	window managers.  If the cursor is not blinking or hollow at
   4195        	the right moment, try adding this flag.  This must be done
   4196        	before starting the GUI.  Set it in your |gvimrc|.  Adding or
   4197        	removing it after the GUI has started has no effect.
   4198        							*'go-k'*
   4199          'k'	Keep the GUI window size when adding/removing a scrollbar, or
   4200        	toolbar, tabline, etc.  Instead, the behavior is similar to
   4201        	when the window is maximized and will adjust 'lines' and
   4202        	'columns' to fit to the window.  Without the 'k' flag Vim will
   4203        	try to keep 'lines' and 'columns' the same when adding and
   4204        	removing GUI components.
   4205      ]=],
   4206      full_name = 'guioptions',
   4207      list = 'flags',
   4208      scope = { 'global' },
   4209      short_desc = N_('GUI: Which components and options are used'),
   4210      type = 'string',
   4211      immutable = true,
   4212    },
   4213    {
   4214      abbreviation = 'gtl',
   4215      defaults = '',
   4216      desc = [=[
   4217        When non-empty describes the text to use in a label of the GUI tab
   4218        pages line.  When empty and when the result is empty Vim will use a
   4219        default label.  See |setting-guitablabel| for more info.
   4220 
   4221        The format of this option is like that of 'statusline'.
   4222        'guitabtooltip' is used for the tooltip, see below.
   4223        The expression will be evaluated in the |sandbox| when set from a
   4224        modeline, see |sandbox-option|.
   4225        This option cannot be set in a modeline when 'modelineexpr' is off.
   4226 
   4227        Only used when the GUI tab pages line is displayed.  'e' must be
   4228        present in 'guioptions'.  For the non-GUI tab pages line 'tabline' is
   4229        used.
   4230      ]=],
   4231      full_name = 'guitablabel',
   4232      modelineexpr = true,
   4233      redraw = { 'current_window' },
   4234      scope = { 'global' },
   4235      short_desc = N_('GUI: custom label for a tab page'),
   4236      type = 'string',
   4237      immutable = true,
   4238    },
   4239    {
   4240      abbreviation = 'gtt',
   4241      defaults = '',
   4242      desc = [=[
   4243        When non-empty describes the text to use in a tooltip for the GUI tab
   4244        pages line.  When empty Vim will use a default tooltip.
   4245        This option is otherwise just like 'guitablabel' above.
   4246        You can include a line break.  Simplest method is to use |:let|: >vim
   4247        	let &guitabtooltip = "line one\nline two"
   4248        <
   4249      ]=],
   4250      full_name = 'guitabtooltip',
   4251      redraw = { 'current_window' },
   4252      scope = { 'global' },
   4253      short_desc = N_('GUI: custom tooltip for a tab page'),
   4254      type = 'string',
   4255      immutable = true,
   4256    },
   4257    {
   4258      abbreviation = 'hf',
   4259      cb = 'did_set_helpfile',
   4260      defaults = {
   4261        if_true = macros('DFLT_HELPFILE', 'string'),
   4262        doc = [[(MS-Windows) "$VIMRUNTIME\doc\help.txt"
   4263                  (others) "$VIMRUNTIME/doc/help.txt"]],
   4264      },
   4265      desc = [=[
   4266        Name of the main help file.  All distributed help files should be
   4267        placed together in one directory.  Additionally, all "doc" directories
   4268        in 'runtimepath' will be used.
   4269        Environment variables are expanded |:set_env|.  For example:
   4270        "$VIMRUNTIME/doc/help.txt".  If $VIMRUNTIME is not set, $VIM is also
   4271        tried.  Also see |$VIMRUNTIME| and |option-backslash| about including
   4272        spaces and backslashes.
   4273        This option cannot be set from a |modeline| or in the |sandbox|, for
   4274        security reasons.
   4275      ]=],
   4276      expand = true,
   4277      full_name = 'helpfile',
   4278      scope = { 'global' },
   4279      secure = true,
   4280      short_desc = N_('full path name of the main help file'),
   4281      type = 'string',
   4282      varname = 'p_hf',
   4283    },
   4284    {
   4285      abbreviation = 'hh',
   4286      cb = 'did_set_helpheight',
   4287      defaults = 20,
   4288      desc = [=[
   4289        Minimal initial height of the help window when it is opened with the
   4290        ":help" command.  The initial height of the help window is half of the
   4291        current window, or (when the 'ea' option is on) the same as other
   4292        windows.  When the height is less than 'helpheight', the height is
   4293        set to 'helpheight'.  Set to zero to disable.
   4294      ]=],
   4295      full_name = 'helpheight',
   4296      scope = { 'global' },
   4297      short_desc = N_('minimum height of a new help window'),
   4298      type = 'number',
   4299      varname = 'p_hh',
   4300    },
   4301    {
   4302      abbreviation = 'hlg',
   4303      cb = 'did_set_helplang',
   4304      defaults = {
   4305        if_true = '',
   4306        doc = 'messages language or empty',
   4307      },
   4308      deny_duplicates = true,
   4309      desc = [=[
   4310        Comma-separated list of languages.  Vim will use the first language
   4311        for which the desired help can be found.  The English help will always
   4312        be used as a last resort.  You can add "en" to prefer English over
   4313        another language, but that will only find tags that exist in that
   4314        language and not in the English help.
   4315        Example: >vim
   4316        	set helplang=de,it
   4317        <	This will first search German, then Italian and finally English help
   4318        files.
   4319        When using |CTRL-]| and ":help!" in a non-English help file Vim will
   4320        try to find the tag in the current language before using this option.
   4321        See |help-translated|.
   4322      ]=],
   4323      full_name = 'helplang',
   4324      list = 'onecomma',
   4325      scope = { 'global' },
   4326      short_desc = N_('preferred help languages'),
   4327      type = 'string',
   4328      varname = 'p_hlg',
   4329    },
   4330    {
   4331      abbreviation = 'hid',
   4332      defaults = true,
   4333      desc = [=[
   4334        When off a buffer is unloaded (including loss of undo information)
   4335        when it is |abandon|ed.  When on a buffer becomes hidden when it is
   4336        |abandon|ed.  A buffer displayed in another window does not become
   4337        hidden, of course.
   4338 
   4339        Commands that move through the buffer list sometimes hide a buffer
   4340        although the 'hidden' option is off when these three are true:
   4341        - the buffer is modified
   4342        - 'autowrite' is off or writing is not possible
   4343        - the '!' flag was used
   4344        Also see |windows|.
   4345 
   4346        To hide a specific buffer use the 'bufhidden' option.
   4347        'hidden' is set for one command with ":hide {command}" |:hide|.
   4348      ]=],
   4349      full_name = 'hidden',
   4350      scope = { 'global' },
   4351      short_desc = N_("don't unload buffer when it is |abandon|ed"),
   4352      type = 'boolean',
   4353      varname = 'p_hid',
   4354    },
   4355    {
   4356      abbreviation = 'hl',
   4357      cb = 'did_set_highlight',
   4358      defaults = macros('HIGHLIGHT_INIT', 'string'),
   4359      deny_duplicates = true,
   4360      full_name = 'highlight',
   4361      list = 'onecomma',
   4362      scope = { 'global' },
   4363      short_desc = N_('sets highlighting mode for various occasions'),
   4364      type = 'string',
   4365      varname = 'p_hl',
   4366    },
   4367    {
   4368      abbreviation = 'hi',
   4369      defaults = 10000,
   4370      desc = [=[
   4371        A history of ":" commands, and a history of previous search patterns
   4372        is remembered.  This option decides how many entries may be stored in
   4373        each of these histories (see |cmdline-editing| and 'messagesopt' for
   4374        the number of messages to remember).
   4375        The maximum value is 10000.
   4376      ]=],
   4377      full_name = 'history',
   4378      scope = { 'global' },
   4379      short_desc = N_('number of command-lines that are remembered'),
   4380      type = 'number',
   4381      varname = 'p_hi',
   4382    },
   4383    {
   4384      abbreviation = 'hk',
   4385      defaults = false,
   4386      full_name = 'hkmap',
   4387      scope = { 'global' },
   4388      short_desc = N_('Deprecated'),
   4389      type = 'boolean',
   4390      immutable = true,
   4391    },
   4392    {
   4393      abbreviation = 'hkp',
   4394      defaults = false,
   4395      full_name = 'hkmapp',
   4396      scope = { 'global' },
   4397      short_desc = N_('Deprecated'),
   4398      type = 'boolean',
   4399      immutable = true,
   4400    },
   4401    {
   4402      abbreviation = 'hls',
   4403      cb = 'did_set_hlsearch',
   4404      defaults = true,
   4405      desc = [=[
   4406        When there is a previous search pattern, highlight all its matches.
   4407        The |hl-Search| highlight group determines the highlighting for all
   4408        matches not under the cursor while the |hl-CurSearch| highlight group
   4409        (if defined) determines the highlighting for the match under the
   4410        cursor. If |hl-CurSearch| is not defined, then |hl-Search| is used for
   4411        both. Note that only the matching text is highlighted, any offsets
   4412        are not applied.
   4413        See also: 'incsearch' and |:match|.
   4414        When you get bored looking at the highlighted matches, you can turn it
   4415        off with |:nohlsearch|.  This does not change the option value, as
   4416        soon as you use a search command, the highlighting comes back.
   4417        'redrawtime' specifies the maximum time spent on finding matches.
   4418        When the search pattern can match an end-of-line, Vim will try to
   4419        highlight all of the matched text.  However, this depends on where the
   4420        search starts.  This will be the first line in the window or the first
   4421        line below a closed fold.  A match in a previous line which is not
   4422        drawn may not continue in a newly drawn line.
   4423        You can specify whether the highlight status is restored on startup
   4424        with the 'h' flag in 'shada' |shada-h|.
   4425      ]=],
   4426      full_name = 'hlsearch',
   4427      redraw = { 'all_windows', 'highlight_only' },
   4428      scope = { 'global' },
   4429      short_desc = N_('highlight matches with last search pattern'),
   4430      type = 'boolean',
   4431      varname = 'p_hls',
   4432    },
   4433    {
   4434      cb = 'did_set_title_icon',
   4435      defaults = {
   4436        if_true = false,
   4437        doc = 'off, on when title can be restored',
   4438      },
   4439      desc = [=[
   4440        When on, the icon text of the window will be set to the value of
   4441        'iconstring' (if it is not empty), or to the name of the file
   4442        currently being edited.  Only the last part of the name is used.
   4443        Overridden by the 'iconstring' option.
   4444        Only works if the terminal supports setting window icons.
   4445      ]=],
   4446      full_name = 'icon',
   4447      scope = { 'global' },
   4448      short_desc = N_('Vim set the text of the window icon'),
   4449      type = 'boolean',
   4450      varname = 'p_icon',
   4451    },
   4452    {
   4453      cb = 'did_set_iconstring',
   4454      defaults = '',
   4455      desc = [=[
   4456        When this option is not empty, it will be used for the icon text of
   4457        the window.  This happens only when the 'icon' option is on.
   4458        Only works if the terminal supports setting window icon text
   4459        When this option contains printf-style '%' items, they will be
   4460        expanded according to the rules used for 'statusline'.  See
   4461        'titlestring' for example settings.
   4462        This option cannot be set in a modeline when 'modelineexpr' is off.
   4463      ]=],
   4464      full_name = 'iconstring',
   4465      modelineexpr = true,
   4466      scope = { 'global' },
   4467      short_desc = N_('to use for the Vim icon text'),
   4468      type = 'string',
   4469      varname = 'p_iconstring',
   4470    },
   4471    {
   4472      abbreviation = 'ic',
   4473      cb = 'did_set_ignorecase',
   4474      defaults = false,
   4475      desc = [=[
   4476        Ignore case in search patterns, |cmdline-completion|, when
   4477        searching in the tags file, |expr-==| and for Insert-mode completion
   4478        |ins-completion|.
   4479        Also see 'smartcase' and 'tagcase'.
   4480        Can be overruled by using "\c" or "\C" in the pattern, see
   4481        |/ignorecase|.
   4482      ]=],
   4483      full_name = 'ignorecase',
   4484      scope = { 'global' },
   4485      short_desc = N_('ignore case in search patterns'),
   4486      type = 'boolean',
   4487      varname = 'p_ic',
   4488    },
   4489    {
   4490      abbreviation = 'imc',
   4491      defaults = false,
   4492      desc = [=[
   4493        When set the Input Method is always on when starting to edit a command
   4494        line, unless entering a search pattern (see 'imsearch' for that).
   4495        Setting this option is useful when your input method allows entering
   4496        English characters directly, e.g., when it's used to type accented
   4497        characters with dead keys.
   4498      ]=],
   4499      full_name = 'imcmdline',
   4500      scope = { 'global' },
   4501      short_desc = N_('use IM when starting to edit a command line'),
   4502      type = 'boolean',
   4503      immutable = true,
   4504    },
   4505    {
   4506      abbreviation = 'imd',
   4507      defaults = {
   4508        if_true = false,
   4509        doc = 'off, on for some systems (SGI)',
   4510      },
   4511      desc = [=[
   4512        When set the Input Method is never used.  This is useful to disable
   4513        the IM when it doesn't work properly.
   4514        Currently this option is on by default for SGI/IRIX machines.  This
   4515        may change in later releases.
   4516      ]=],
   4517      full_name = 'imdisable',
   4518      scope = { 'global' },
   4519      short_desc = N_('do not use the IM in any mode'),
   4520      type = 'boolean',
   4521      immutable = true,
   4522    },
   4523    {
   4524      abbreviation = 'imi',
   4525      cb = 'did_set_iminsert',
   4526      defaults = macros('B_IMODE_NONE', 'number'),
   4527      desc = [=[
   4528        Specifies whether :lmap or an Input Method (IM) is to be used in
   4529        Insert mode.  Valid values:
   4530        	0	:lmap is off and IM is off
   4531        	1	:lmap is ON and IM is off
   4532        	2	:lmap is off and IM is ON
   4533        To always reset the option to zero when leaving Insert mode with <Esc>
   4534        this can be used: >vim
   4535        	inoremap <ESC> <ESC>:set iminsert=0<CR>
   4536        <	This makes :lmap and IM turn off automatically when leaving Insert
   4537        mode.
   4538        Note that this option changes when using CTRL-^ in Insert mode
   4539        |i_CTRL-^|.
   4540        The value is set to 1 when setting 'keymap' to a valid keymap name.
   4541        It is also used for the argument of commands like "r" and "f".
   4542      ]=],
   4543      full_name = 'iminsert',
   4544      scope = { 'buf' },
   4545      short_desc = N_('use :lmap or IM in Insert mode'),
   4546      type = 'number',
   4547      varname = 'p_iminsert',
   4548    },
   4549    {
   4550      abbreviation = 'ims',
   4551      defaults = macros('B_IMODE_USE_INSERT', 'number'),
   4552      desc = [=[
   4553        Specifies whether :lmap or an Input Method (IM) is to be used when
   4554        entering a search pattern.  Valid values:
   4555        	-1	the value of 'iminsert' is used, makes it look like
   4556        		'iminsert' is also used when typing a search pattern
   4557        	0	:lmap is off and IM is off
   4558        	1	:lmap is ON and IM is off
   4559        	2	:lmap is off and IM is ON
   4560        Note that this option changes when using CTRL-^ in Command-line mode
   4561        |c_CTRL-^|.
   4562        The value is set to 1 when it is not -1 and setting the 'keymap'
   4563        option to a valid keymap name.
   4564      ]=],
   4565      full_name = 'imsearch',
   4566      scope = { 'buf' },
   4567      short_desc = N_('use :lmap or IM when typing a search pattern'),
   4568      type = 'number',
   4569      varname = 'p_imsearch',
   4570    },
   4571    {
   4572      abbreviation = 'icm',
   4573      cb = 'did_set_inccommand',
   4574      defaults = 'nosplit',
   4575      values = { 'nosplit', 'split', '' },
   4576      desc = [=[
   4577        When nonempty, shows the effects of |:substitute|, |:smagic|,
   4578        |:snomagic| and user commands with the |:command-preview| flag as you
   4579        type.
   4580 
   4581        Possible values:
   4582        	nosplit	Shows the effects of a command incrementally in the
   4583        		buffer.
   4584        	split	Like "nosplit", but also shows partial off-screen
   4585        		results in a preview window.
   4586 
   4587        If the preview for built-in commands is too slow (exceeds
   4588        'redrawtime') then 'inccommand' is automatically disabled until
   4589        |Command-line-mode| is done.
   4590      ]=],
   4591      full_name = 'inccommand',
   4592      scope = { 'global' },
   4593      short_desc = N_('Live preview of substitution'),
   4594      type = 'string',
   4595      varname = 'p_icm',
   4596    },
   4597    {
   4598      abbreviation = 'inc',
   4599      defaults = '',
   4600      desc = [=[
   4601        Pattern to be used to find an include command.  It is a search
   4602        pattern, just like for the "/" command (See |pattern|).  This option
   4603        is used for the commands "[i", "]I", "[d", etc.
   4604        Normally the 'isfname' option is used to recognize the file name that
   4605        comes after the matched pattern.  But if "\zs" appears in the pattern
   4606        then the text matched from "\zs" to the end, or until "\ze" if it
   4607        appears, is used as the file name.  Use this to include characters
   4608        that are not in 'isfname', such as a space.  You can then use
   4609        'includeexpr' to process the matched text.
   4610        See |option-backslash| about including spaces and backslashes.
   4611      ]=],
   4612      full_name = 'include',
   4613      scope = { 'global', 'buf' },
   4614      short_desc = N_('pattern to be used to find an include file'),
   4615      type = 'string',
   4616      varname = 'p_inc',
   4617    },
   4618    {
   4619      abbreviation = 'inex',
   4620      cb = 'did_set_optexpr',
   4621      defaults = '',
   4622      desc = [=[
   4623        Expression to be used to transform the string found with the 'include'
   4624        option to a file name.  Mostly useful to change "." to "/" for Java: >vim
   4625        	setlocal includeexpr=substitute(v:fname,'\\.','/','g')
   4626        <	The "v:fname" variable will be set to the file name that was detected.
   4627        Note the double backslash: the `:set` command first halves them, then
   4628        one remains in the value, where "\." matches a dot literally.  For
   4629        simple character replacements `tr()` avoids the need for escaping: >vim
   4630        	setlocal includeexpr=tr(v:fname,'.','/')
   4631        <
   4632        Also used for the |gf| command if an unmodified file name can't be
   4633        found.  Allows doing "gf" on the name after an 'include' statement.
   4634        Note: Not used for |<cfile>|.
   4635 
   4636        If the expression starts with s: or |<SID>|, then it is replaced with
   4637        the script ID (|local-function|).  Example: >vim
   4638        	setlocal includeexpr=s:MyIncludeExpr()
   4639        	setlocal includeexpr=<SID>SomeIncludeExpr()
   4640        <	Otherwise, the expression is evaluated in the context of the script
   4641        where the option was set, thus script-local items are available.
   4642 
   4643        It is more efficient if the value is just a function call without
   4644        arguments, see |expr-option-function|.
   4645 
   4646        The expression will be evaluated in the |sandbox| when set from a
   4647        modeline, see |sandbox-option|.
   4648        This option cannot be set in a modeline when 'modelineexpr' is off.
   4649 
   4650        It is not allowed to change text or jump to another window while
   4651        evaluating 'includeexpr' |textlock|.
   4652      ]=],
   4653      full_name = 'includeexpr',
   4654      modelineexpr = true,
   4655      scope = { 'buf' },
   4656      short_desc = N_('expression used to process an include line'),
   4657      type = 'string',
   4658      varname = 'p_inex',
   4659    },
   4660    {
   4661      abbreviation = 'is',
   4662      defaults = true,
   4663      desc = [=[
   4664        While typing a search command, show where the pattern, as it was typed
   4665        so far, matches.  The matched string is highlighted.  If the pattern
   4666        is invalid or not found, nothing is shown.  The screen will be updated
   4667        often, this is only useful on fast terminals.
   4668        Note that the match will be shown, but the cursor will return to its
   4669        original position when no match is found and when pressing <Esc>.  You
   4670        still need to finish the search command with <Enter> to move the
   4671        cursor to the match.
   4672        You can use the CTRL-G and CTRL-T keys to move to the next and
   4673        previous match. |c_CTRL-G| |c_CTRL-T|
   4674        Vim only searches for about half a second.  With a complicated
   4675        pattern and/or a lot of text the match may not be found.  This is to
   4676        avoid that Vim hangs while you are typing the pattern.
   4677        The |hl-IncSearch| highlight group determines the highlighting.
   4678        When 'hlsearch' is on, all matched strings are highlighted too while
   4679        typing a search command.  See also: 'hlsearch'.
   4680        If you don't want to turn 'hlsearch' on, but want to highlight all
   4681        matches while searching, you can turn on and off 'hlsearch' with
   4682        autocmd.  Example: >vim
   4683        	augroup vimrc-incsearch-highlight
   4684        	  autocmd!
   4685        	  autocmd CmdlineEnter [\/\?] :set hlsearch
   4686        	  autocmd CmdlineLeave [\/\?] :set nohlsearch
   4687        	augroup END
   4688        <
   4689        CTRL-L can be used to add one character from after the current match
   4690        to the command line.  If 'ignorecase' and 'smartcase' are set and the
   4691        command line has no uppercase characters, the added character is
   4692        converted to lowercase.
   4693        CTRL-R CTRL-W can be used to add the word at the end of the current
   4694        match, excluding the characters that were already typed.
   4695      ]=],
   4696      full_name = 'incsearch',
   4697      scope = { 'global' },
   4698      short_desc = N_('highlight match while typing search pattern'),
   4699      type = 'boolean',
   4700      varname = 'p_is',
   4701    },
   4702    {
   4703      abbreviation = 'inde',
   4704      cb = 'did_set_optexpr',
   4705      defaults = '',
   4706      desc = [=[
   4707        Expression which is evaluated to obtain the proper indent for a line.
   4708        It is used when a new line is created, for the |=| operator and
   4709        in Insert mode as specified with the 'indentkeys' option.
   4710        When this option is not empty, it overrules the 'cindent' and
   4711        'smartindent' indenting.  When 'lisp' is set, this option is
   4712        only used when 'lispoptions' contains "expr:1".
   4713        The expression is evaluated with |v:lnum| set to the line number for
   4714        which the indent is to be computed.  The cursor is also in this line
   4715        when the expression is evaluated (but it may be moved around).
   4716 
   4717        If the expression starts with s: or |<SID>|, then it is replaced with
   4718        the script ID (|local-function|).  Example: >vim
   4719        	set indentexpr=s:MyIndentExpr()
   4720        	set indentexpr=<SID>SomeIndentExpr()
   4721        <	Otherwise, the expression is evaluated in the context of the script
   4722        where the option was set, thus script-local items are available.
   4723 
   4724        The advantage of using a function call without arguments is that it is
   4725        faster, see |expr-option-function|.
   4726 
   4727        The expression must return the number of spaces worth of indent.  It
   4728        can return "-1" to keep the current indent (this means 'autoindent' is
   4729        used for the indent).
   4730        Functions useful for computing the indent are |indent()|, |cindent()|
   4731        and |lispindent()|.
   4732        The evaluation of the expression must not have side effects!  It must
   4733        not change the text, jump to another window, etc.  Afterwards the
   4734        cursor position is always restored, thus the cursor may be moved.
   4735        Normally this option would be set to call a function: >vim
   4736        	set indentexpr=GetMyIndent()
   4737        <	Error messages will be suppressed, unless the 'debug' option contains
   4738        "msg".
   4739        See |indent-expression|.
   4740 
   4741        The expression will be evaluated in the |sandbox| when set from a
   4742        modeline, see |sandbox-option|.
   4743        This option cannot be set in a modeline when 'modelineexpr' is off.
   4744 
   4745        It is not allowed to change text or jump to another window while
   4746        evaluating 'indentexpr' |textlock|.
   4747      ]=],
   4748      full_name = 'indentexpr',
   4749      modelineexpr = true,
   4750      scope = { 'buf' },
   4751      short_desc = N_('expression used to obtain the indent of a line'),
   4752      type = 'string',
   4753      varname = 'p_inde',
   4754    },
   4755    {
   4756      abbreviation = 'indk',
   4757      defaults = '0{,0},0),0],:,0#,!^F,o,O,e',
   4758      deny_duplicates = true,
   4759      desc = [=[
   4760        A list of keys that, when typed in Insert mode, cause reindenting of
   4761        the current line.  Only happens if 'indentexpr' isn't empty.
   4762        The format is identical to 'cinkeys', see |indentkeys-format|.
   4763        See |C-indenting| and |indent-expression|.
   4764      ]=],
   4765      full_name = 'indentkeys',
   4766      list = 'onecomma',
   4767      scope = { 'buf' },
   4768      short_desc = N_("keys that trigger indenting with 'indentexpr'"),
   4769      type = 'string',
   4770      varname = 'p_indk',
   4771    },
   4772    {
   4773      abbreviation = 'inf',
   4774      defaults = false,
   4775      desc = [=[
   4776        When doing keyword completion in insert mode |ins-completion|, and
   4777        'ignorecase' is also on, the case of the match is adjusted depending
   4778        on the typed text.  If the typed text contains a lowercase letter
   4779        where the match has an upper case letter, the completed part is made
   4780        lowercase.  If the typed text has no lowercase letters and the match
   4781        has a lowercase letter where the typed text has an uppercase letter,
   4782        and there is a letter before it, the completed part is made uppercase.
   4783        With 'noinfercase' the match is used as-is.
   4784      ]=],
   4785      full_name = 'infercase',
   4786      scope = { 'buf' },
   4787      short_desc = N_('adjust case of match for keyword completion'),
   4788      type = 'boolean',
   4789      varname = 'p_inf',
   4790    },
   4791    {
   4792      abbreviation = 'im',
   4793      defaults = false,
   4794      full_name = 'insertmode',
   4795      scope = { 'global' },
   4796      short_desc = N_('Deprecated'),
   4797      type = 'boolean',
   4798      immutable = true,
   4799    },
   4800    {
   4801      abbreviation = 'isf',
   4802      cb = 'did_set_isopt',
   4803      defaults = {
   4804        condition = 'BACKSLASH_IN_FILENAME',
   4805        if_false = '@,48-57,/,.,-,_,+,,,#,$,%,~,=',
   4806        if_true = '@,48-57,/,\\,.,-,_,+,,,#,$,%,{,},[,],@-@,!,~,=',
   4807        doc = [[for Windows:
   4808      "@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],@-@,!,~,="
   4809     otherwise: "@,48-57,/,.,-,_,+,,,#,$,%,~,="]],
   4810      },
   4811      deny_duplicates = true,
   4812      desc = [=[
   4813        The characters specified by this option are included in file names and
   4814        path names.  Filenames are used for commands like "gf", "[i" and in
   4815        the tags file.  It is also used for "\f" in a |pattern|.
   4816        Multi-byte characters 256 and above are always included, only the
   4817        characters up to 255 are specified with this option.
   4818        For UTF-8 the characters 0xa0 to 0xff are included as well.
   4819        Think twice before adding white space to this option.  Although a
   4820        space may appear inside a file name, the effect will be that Vim
   4821        doesn't know where a file name starts or ends when doing completion.
   4822        It most likely works better without a space in 'isfname'.
   4823 
   4824        Note that on systems using a backslash as path separator, Vim tries to
   4825        do its best to make it work as you would expect.  That is a bit
   4826        tricky, since Vi originally used the backslash to escape special
   4827        characters.  Vim will not remove a backslash in front of a normal file
   4828        name character on these systems, but it will on Unix and alikes.  The
   4829        '&' and '^' are not included by default, because these are special for
   4830        cmd.exe.
   4831 
   4832        The format of this option is a list of parts, separated with commas.
   4833        Each part can be a single character number or a range.  A range is two
   4834        character numbers with '-' in between.  A character number can be a
   4835        decimal number between 0 and 255 or the ASCII character itself (does
   4836        not work for digits).  Example:
   4837        	"_,-,128-140,#-43"	(include '_' and '-' and the range
   4838        				128 to 140 and '#' to 43)
   4839        If a part starts with '^', the following character number or range
   4840        will be excluded from the option.  The option is interpreted from left
   4841        to right.  Put the excluded character after the range where it is
   4842        included.  To include '^' itself use it as the last character of the
   4843        option or the end of a range.  Example:
   4844        	"^a-z,#,^"	(exclude 'a' to 'z', include '#' and '^')
   4845        If the character is '@', all characters where isalpha() returns TRUE
   4846        are included.  Normally these are the characters a to z and A to Z,
   4847        plus accented characters.  To include '@' itself use "@-@".  Examples:
   4848        	"@,^a-z"	All alphabetic characters, excluding lower
   4849        			case ASCII letters.
   4850        	"a-z,A-Z,@-@"	All letters plus the '@' character.
   4851        A comma can be included by using it where a character number is
   4852        expected.  Example:
   4853        	"48-57,,,_"	Digits, comma and underscore.
   4854        A comma can be excluded by prepending a '^'.  Example:
   4855        	" -~,^,,9"	All characters from space to '~', excluding
   4856        			comma, plus <Tab>.
   4857        See |option-backslash| about including spaces and backslashes.
   4858      ]=],
   4859      full_name = 'isfname',
   4860      list = 'comma',
   4861      scope = { 'global' },
   4862      short_desc = N_('characters included in file names and pathnames'),
   4863      type = 'string',
   4864      varname = 'p_isf',
   4865    },
   4866    {
   4867      abbreviation = 'isi',
   4868      cb = 'did_set_isopt',
   4869      defaults = {
   4870        condition = 'MSWIN',
   4871        if_false = '@,48-57,_,192-255',
   4872        if_true = '@,48-57,_,128-167,224-235',
   4873        doc = [[for Windows:
   4874                    "@,48-57,_,128-167,224-235"
   4875         otherwise: "@,48-57,_,192-255"]],
   4876      },
   4877      deny_duplicates = true,
   4878      desc = [=[
   4879        The characters given by this option are included in identifiers.
   4880        Identifiers are used in recognizing environment variables and after a
   4881        match of the 'define' option.  It is also used for "\i" in a
   4882        |pattern|.  See 'isfname' for a description of the format of this
   4883        option.  For '@' only characters up to 255 are used.
   4884        Careful: If you change this option, it might break expanding
   4885        environment variables.  E.g., when '/' is included and Vim tries to
   4886        expand "$HOME/.local/state/nvim/shada/main.shada".  Maybe you should
   4887        change 'iskeyword' instead.
   4888      ]=],
   4889      full_name = 'isident',
   4890      list = 'comma',
   4891      scope = { 'global' },
   4892      short_desc = N_('characters included in identifiers'),
   4893      type = 'string',
   4894      varname = 'p_isi',
   4895    },
   4896    {
   4897      abbreviation = 'isk',
   4898      cb = 'did_set_iskeyword',
   4899      defaults = '@,48-57,_,192-255',
   4900      deny_duplicates = true,
   4901      desc = [=[
   4902        Keywords are used in searching and recognizing with many commands:
   4903        "w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.  See
   4904        'isfname' for a description of the format of this option.  For '@'
   4905        characters above 255 check the "word" character class (any character
   4906        that is categorized as a letter, number or emoji according to the
   4907        Unicode general category).
   4908 
   4909        Note that there is a difference between the "\k" character class and
   4910        the |word| motion.  The former matches any word character, while the
   4911        latter stops at a change of the character class.
   4912 
   4913        For C programs you could use "a-z,A-Z,48-57,_,.,-,>".
   4914        For a help file it is set to all non-blank printable characters except
   4915        "*", '"' and '|' (so that CTRL-] on a command finds the help for that
   4916        command).
   4917        When the 'lisp' option is on the '-' character is always included.
   4918        This option also influences syntax highlighting, unless the syntax
   4919        uses |:syn-iskeyword|.
   4920      ]=],
   4921      full_name = 'iskeyword',
   4922      list = 'comma',
   4923      scope = { 'buf' },
   4924      short_desc = N_('characters included in keywords'),
   4925      type = 'string',
   4926      varname = 'p_isk',
   4927    },
   4928    {
   4929      abbreviation = 'isp',
   4930      cb = 'did_set_isopt',
   4931      defaults = '@,161-255',
   4932      deny_duplicates = true,
   4933      desc = [=[
   4934        The characters given by this option are displayed directly on the
   4935        screen.  It is also used for "\p" in a |pattern|.  The characters from
   4936        space (ASCII 32) to '~' (ASCII 126) are always displayed directly,
   4937        even when they are not included in 'isprint' or excluded.  See
   4938        'isfname' for a description of the format of this option.
   4939 
   4940        Non-printable characters are displayed with two characters:
   4941        	  0 -  31	"^@" - "^_"
   4942        	 32 - 126	always single characters
   4943        	   127		"^?"
   4944        	128 - 159	"~@" - "~_"
   4945        	160 - 254	"| " - "|~"
   4946        	   255		"~?"
   4947        Illegal bytes from 128 to 255 (invalid UTF-8) are
   4948        displayed as <xx>, with the hexadecimal value of the byte.
   4949        When 'display' contains "uhex" all unprintable characters are
   4950        displayed as <xx>.
   4951        The SpecialKey highlighting will be used for unprintable characters.
   4952        |hl-SpecialKey|
   4953 
   4954        Multi-byte characters 256 and above are always included, only the
   4955        characters up to 255 are specified with this option.  When a character
   4956        is printable but it is not available in the current font, a
   4957        replacement character will be shown.
   4958        Unprintable and zero-width Unicode characters are displayed as <xxxx>.
   4959        There is no option to specify these characters.
   4960      ]=],
   4961      full_name = 'isprint',
   4962      list = 'comma',
   4963      redraw = { 'all_windows' },
   4964      scope = { 'global' },
   4965      short_desc = N_('printable characters'),
   4966      type = 'string',
   4967      varname = 'p_isp',
   4968    },
   4969    {
   4970      abbreviation = 'js',
   4971      defaults = false,
   4972      desc = [=[
   4973        Insert two spaces after a '.', '?' and '!' with a join command.
   4974        Otherwise only one space is inserted.
   4975      ]=],
   4976      full_name = 'joinspaces',
   4977      scope = { 'global' },
   4978      short_desc = N_('two spaces after a period with a join command'),
   4979      type = 'boolean',
   4980      varname = 'p_js',
   4981    },
   4982    {
   4983      abbreviation = 'jop',
   4984      defaults = 'clean',
   4985      values = { 'stack', 'view', 'clean' },
   4986      flags = true,
   4987      deny_duplicates = true,
   4988      desc = [=[
   4989        List of words that change the behavior of the |jumplist|.
   4990          stack         Make the jumplist behave like the tagstack.
   4991        		Relative location of entries in the jumplist is
   4992        		preserved at the cost of discarding subsequent entries
   4993        		when navigating backwards in the jumplist and then
   4994        		jumping to a location.  |jumplist-stack|
   4995 
   4996          view          When moving through the jumplist, |changelist|,
   4997        		|alternate-file|, using |mark-motions| or when popping
   4998        		the |tagstack| try to restore the |mark-view| in which
   4999        		the action occurred.
   5000 
   5001          clean         Remove unloaded buffers from the jumplist.
   5002        		EXPERIMENTAL: this flag may change in the future.
   5003      ]=],
   5004      full_name = 'jumpoptions',
   5005      list = 'onecomma',
   5006      scope = { 'global' },
   5007      short_desc = N_('Controls the behavior of the jumplist'),
   5008      type = 'string',
   5009      varname = 'p_jop',
   5010      flags_varname = 'jop_flags',
   5011    },
   5012    {
   5013      abbreviation = 'kmp',
   5014      cb = 'did_set_keymap',
   5015      defaults = '',
   5016      desc = [=[
   5017        Name of a keyboard mapping.  See |mbyte-keymap|.
   5018        Setting this option to a valid keymap name has the side effect of
   5019        setting 'iminsert' to one, so that the keymap becomes effective.
   5020        'imsearch' is also set to one, unless it was -1
   5021        Only alphanumeric characters, '.', '-' and '_' can be used.
   5022      ]=],
   5023      full_name = 'keymap',
   5024      normal_fname_chars = true,
   5025      pri_mkrc = true,
   5026      redraw = { 'statuslines', 'current_buffer' },
   5027      scope = { 'buf' },
   5028      short_desc = N_('name of a keyboard mapping'),
   5029      type = 'string',
   5030      varname = 'p_keymap',
   5031    },
   5032    {
   5033      abbreviation = 'km',
   5034      cb = 'did_set_keymodel',
   5035      defaults = '',
   5036      values = { 'startsel', 'stopsel' },
   5037      deny_duplicates = true,
   5038      desc = [=[
   5039        List of comma-separated words, which enable special things that keys
   5040        can do.  These values can be used:
   5041           startsel	Using a shifted special key starts selection (either
   5042        		Select mode or Visual mode, depending on "key" being
   5043        		present in 'selectmode').
   5044           stopsel	Using a not-shifted special key stops selection.
   5045        Special keys in this context are the cursor keys, <End>, <Home>,
   5046        <PageUp> and <PageDown>.
   5047      ]=],
   5048      full_name = 'keymodel',
   5049      list = 'onecomma',
   5050      scope = { 'global' },
   5051      short_desc = N_('enable starting/stopping selection with keys'),
   5052      type = 'string',
   5053      varname = 'p_km',
   5054    },
   5055    {
   5056      abbreviation = 'kp',
   5057      defaults = {
   5058        condition = 'MSWIN',
   5059        if_true = ':help',
   5060        if_false = ':Man',
   5061        doc = '":Man", Windows: ":help"',
   5062      },
   5063      desc = [=[
   5064        Program to use for the |K| command.  Environment variables are
   5065        expanded |:set_env|.  ":help" may be used to access the Vim internal
   5066        help.  (Note that previously setting the global option to the empty
   5067        value did this, which is now deprecated.)
   5068        When the first character is ":", the command is invoked as a Vim
   5069        Ex command prefixed with [count].
   5070        When "man" or "man -s" is used, Vim will automatically translate
   5071        a [count] for the "K" command to a section number.
   5072        See |option-backslash| about including spaces and backslashes.
   5073        Example: >vim
   5074        	set keywordprg=man\ -s
   5075        	set keywordprg=:Man
   5076        <	This option cannot be set from a |modeline| or in the |sandbox|, for
   5077        security reasons.
   5078      ]=],
   5079      expand = true,
   5080      full_name = 'keywordprg',
   5081      scope = { 'global', 'buf' },
   5082      secure = true,
   5083      short_desc = N_('program to use for the "K" command'),
   5084      type = 'string',
   5085      varname = 'p_kp',
   5086    },
   5087    {
   5088      abbreviation = 'lmap',
   5089      cb = 'did_set_langmap',
   5090      defaults = '',
   5091      deny_duplicates = true,
   5092      desc = [=[
   5093        This option allows switching your keyboard into a special language
   5094        mode.  When you are typing text in Insert mode the characters are
   5095        inserted directly.  When in Normal mode the 'langmap' option takes
   5096        care of translating these special characters to the original meaning
   5097        of the key.  This means you don't have to change the keyboard mode to
   5098        be able to execute Normal mode commands.
   5099        This is the opposite of the 'keymap' option, where characters are
   5100        mapped in Insert mode.
   5101        Also consider setting 'langremap' to off, to prevent 'langmap' from
   5102        applying to characters resulting from a mapping.
   5103        This option cannot be set from a |modeline| or in the |sandbox|, for
   5104        security reasons.
   5105 
   5106        Example (for Greek, in UTF-8):				*greek*  >vim
   5107            set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz
   5108        <	Example (exchanges meaning of z and y for commands): >vim
   5109            set langmap=zy,yz,ZY,YZ
   5110        <
   5111        The 'langmap' option is a list of parts, separated with commas.  Each
   5112        part can be in one of two forms:
   5113        1.  A list of pairs.  Each pair is a "from" character immediately
   5114            followed by the "to" character.  Examples: "aA", "aAbBcC".
   5115        2.  A list of "from" characters, a semicolon and a list of "to"
   5116            characters.  Example: "abc;ABC"
   5117        Example: "aA,fgh;FGH,cCdDeE"
   5118        Special characters need to be preceded with a backslash.  These are
   5119        ";", ',', '"', '|' and backslash itself.
   5120 
   5121        This will allow you to activate vim actions without having to switch
   5122        back and forth between the languages.  Your language characters will
   5123        be understood as normal vim English characters (according to the
   5124        langmap mappings) in the following cases:
   5125         o Normal/Visual mode (commands, buffer/register names, user mappings)
   5126         o Insert/Replace Mode: Register names after CTRL-R
   5127         o Insert/Replace Mode: Mappings
   5128        Characters entered in Command-line mode will NOT be affected by
   5129        this option.   Note that this option can be changed at any time
   5130        allowing to switch between mappings for different languages/encodings.
   5131        Use a mapping to avoid having to type it each time!
   5132      ]=],
   5133      full_name = 'langmap',
   5134      list = 'onecomma',
   5135      scope = { 'global' },
   5136      secure = true,
   5137      short_desc = N_('alphabetic characters for other language mode'),
   5138      tags = { 'E357', 'E358' },
   5139      type = 'string',
   5140      varname = 'p_langmap',
   5141    },
   5142    {
   5143      abbreviation = 'lm',
   5144      defaults = '',
   5145      desc = [=[
   5146        Language to use for menu translation.  Tells which file is loaded
   5147        from the "lang" directory in 'runtimepath': >vim
   5148        	"lang/menu_" .. &langmenu .. ".vim"
   5149        <	(without the spaces).  For example, to always use the Dutch menus, no
   5150        matter what $LANG is set to: >vim
   5151        	set langmenu=nl_NL.ISO_8859-1
   5152        <	When 'langmenu' is empty, |v:lang| is used.
   5153        Only normal file name characters can be used, `/\*?[|<>` are illegal.
   5154        If your $LANG is set to a non-English language but you do want to use
   5155        the English menus: >vim
   5156        	set langmenu=none
   5157        <	This option must be set before loading menus, switching on filetype
   5158        detection or syntax highlighting.  Once the menus are defined setting
   5159        this option has no effect.  But you could do this: >vim
   5160        	source $VIMRUNTIME/delmenu.vim
   5161        	set langmenu=de_DE.ISO_8859-1
   5162        	source $VIMRUNTIME/menu.vim
   5163        <	Warning: This deletes all menus that you defined yourself!
   5164      ]=],
   5165      full_name = 'langmenu',
   5166      normal_fname_chars = true,
   5167      scope = { 'global' },
   5168      short_desc = N_('language to be used for the menus'),
   5169      type = 'string',
   5170      varname = 'p_lm',
   5171    },
   5172    {
   5173      abbreviation = 'lnr',
   5174      cb = 'did_set_langnoremap',
   5175      defaults = true,
   5176      full_name = 'langnoremap',
   5177      scope = { 'global' },
   5178      short_desc = N_("do not apply 'langmap' to mapped characters"),
   5179      type = 'boolean',
   5180      varname = 'p_lnr',
   5181    },
   5182    {
   5183      abbreviation = 'lrm',
   5184      cb = 'did_set_langremap',
   5185      defaults = false,
   5186      desc = [=[
   5187        When off, setting 'langmap' does not apply to characters resulting
   5188        from a mapping.  If setting 'langmap' disables some of your mappings,
   5189        make sure this option is off.
   5190      ]=],
   5191      full_name = 'langremap',
   5192      scope = { 'global' },
   5193      short_desc = N_('Deprecated'),
   5194      type = 'boolean',
   5195      varname = 'p_lrm',
   5196    },
   5197    {
   5198      abbreviation = 'ls',
   5199      cb = 'did_set_laststatus',
   5200      defaults = 2,
   5201      desc = [=[
   5202        The value of this option influences when the last window will have a
   5203        status line:
   5204        	0: never
   5205        	1: only if there are at least two windows
   5206        	2: always
   5207        	3: always and ONLY the last window
   5208        The screen looks nicer with a status line if you have several
   5209        windows, but it takes another screen line. |status-line|
   5210      ]=],
   5211      full_name = 'laststatus',
   5212      redraw = { 'all_windows' },
   5213      scope = { 'global' },
   5214      short_desc = N_('tells when last window has status lines'),
   5215      type = 'number',
   5216      varname = 'p_ls',
   5217    },
   5218    {
   5219      abbreviation = 'lz',
   5220      defaults = false,
   5221      desc = [=[
   5222        When this option is set, the screen will not be redrawn while
   5223        executing macros, registers and other commands that have not been
   5224        typed.  Also, updating the window title is postponed.  To force an
   5225        update use |:redraw|.
   5226        This may occasionally cause display errors.  It is only meant to be
   5227        set temporarily when performing an operation where redrawing may cause
   5228        flickering or cause a slowdown.
   5229      ]=],
   5230      full_name = 'lazyredraw',
   5231      scope = { 'global' },
   5232      short_desc = N_("don't redraw while executing macros"),
   5233      type = 'boolean',
   5234      varname = 'p_lz',
   5235    },
   5236    {
   5237      abbreviation = 'lhi',
   5238      cb = 'did_set_xhistory',
   5239      defaults = 10,
   5240      desc = [=[
   5241        Like 'chistory', but for the location list stack associated with a
   5242        window.  If the option is changed in either the location list window
   5243        itself or the window that is associated with the location list stack,
   5244        the new value will also be applied to the other one.  This means this
   5245        value will always be the same for a given location list window and its
   5246        corresponding window.  See |quickfix-stack| for additional info.
   5247      ]=],
   5248      full_name = 'lhistory',
   5249      scope = { 'win' },
   5250      short_desc = N_('number of location lists stored in history'),
   5251      type = 'number',
   5252    },
   5253    {
   5254      abbreviation = 'lbr',
   5255      defaults = false,
   5256      desc = [=[
   5257        If on, Vim will wrap long lines at a character in 'breakat' rather
   5258        than at the last character that fits on the screen.  Unlike
   5259        'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
   5260        it only affects the way the file is displayed, not its contents.
   5261        If 'breakindent' is set, line is visually indented.  Then, the value
   5262        of 'showbreak' is used to put in front of wrapped lines.  This option
   5263        is not used when the 'wrap' option is off.
   5264        Note that <Tab> characters after an <EOL> are mostly not displayed
   5265        with the right amount of white space.
   5266      ]=],
   5267      full_name = 'linebreak',
   5268      redraw = { 'current_window' },
   5269      scope = { 'win' },
   5270      short_desc = N_('wrap long lines at a blank'),
   5271      type = 'boolean',
   5272    },
   5273    {
   5274      cb = 'did_set_lines_or_columns',
   5275      defaults = {
   5276        if_true = macros('DFLT_ROWS', 'number'),
   5277        doc = '24 or terminal height',
   5278      },
   5279      desc = [=[
   5280        Number of lines of the Vim window.
   5281        Normally you don't need to set this.  It is done automatically by the
   5282        terminal initialization code.
   5283        When Vim is running in the GUI or in a resizable window, setting this
   5284        option will cause the window size to be changed.  When you only want
   5285        to use the size for the GUI, put the command in your |gvimrc| file.
   5286        Vim limits the number of lines to what fits on the screen.  You can
   5287        use this command to get the tallest window possible: >vim
   5288        	set lines=999
   5289        <	Minimum value is 2, maximum value is 1000.
   5290      ]=],
   5291      full_name = 'lines',
   5292      no_mkrc = true,
   5293      scope = { 'global' },
   5294      short_desc = N_('of lines in the display'),
   5295      tags = { 'E593' },
   5296      type = 'number',
   5297      varname = 'p_lines',
   5298    },
   5299    {
   5300      abbreviation = 'lsp',
   5301      defaults = 0,
   5302      desc = [=[
   5303        		only in the GUI
   5304        Number of pixel lines inserted between characters.  Useful if the font
   5305        uses the full character cell height, making lines touch each other.
   5306        When non-zero there is room for underlining.
   5307        With some fonts there can be too much room between lines (to have
   5308        space for ascents and descents).  Then it makes sense to set
   5309        'linespace' to a negative value.  This may cause display problems
   5310        though!
   5311      ]=],
   5312      full_name = 'linespace',
   5313      redraw = { 'ui_option' },
   5314      scope = { 'global' },
   5315      short_desc = N_('number of pixel lines to use between characters'),
   5316      type = 'number',
   5317      varname = 'p_linespace',
   5318    },
   5319    {
   5320      cb = 'did_set_lisp',
   5321      defaults = false,
   5322      desc = [=[
   5323        Lisp mode: When <Enter> is typed in insert mode set the indent for
   5324        the next line to Lisp standards (well, sort of).  Also happens with
   5325        "cc" or "S".  'autoindent' must also be on for this to work.
   5326        Also see 'lispwords'.
   5327        The '-' character is included in keyword characters.  Redefines the
   5328        "=" operator to use this same indentation algorithm rather than
   5329        calling an external program if 'equalprg' is empty.
   5330      ]=],
   5331      full_name = 'lisp',
   5332      scope = { 'buf' },
   5333      short_desc = N_('indenting for Lisp'),
   5334      type = 'boolean',
   5335      varname = 'p_lisp',
   5336    },
   5337    {
   5338      abbreviation = 'lop',
   5339      cb = 'did_set_lispoptions',
   5340      defaults = '',
   5341      values = { 'expr:0', 'expr:1' },
   5342      deny_duplicates = true,
   5343      desc = [=[
   5344        Comma-separated list of items that influence the Lisp indenting when
   5345        enabled with the 'lisp' option.  Currently only one item is supported:
   5346        	expr:1	use 'indentexpr' for Lisp indenting when it is set
   5347        	expr:0	do not use 'indentexpr' for Lisp indenting (default)
   5348        Note that when using 'indentexpr' the `=` operator indents all the
   5349        lines, otherwise the first line is not indented (Vi-compatible).
   5350      ]=],
   5351      full_name = 'lispoptions',
   5352      list = 'onecomma',
   5353      scope = { 'buf' },
   5354      short_desc = N_('options for lisp indenting'),
   5355      type = 'string',
   5356      varname = 'p_lop',
   5357    },
   5358    {
   5359      abbreviation = 'lw',
   5360      defaults = {
   5361        if_true = macros('LISPWORD_VALUE', 'string'),
   5362        doc = 'is very long',
   5363      },
   5364      deny_duplicates = true,
   5365      desc = [=[
   5366        Comma-separated list of words that influence the Lisp indenting when
   5367        enabled with the 'lisp' option.
   5368      ]=],
   5369      full_name = 'lispwords',
   5370      list = 'onecomma',
   5371      scope = { 'global', 'buf' },
   5372      short_desc = N_('words that change how lisp indenting works'),
   5373      type = 'string',
   5374      varname = 'p_lispwords',
   5375    },
   5376    {
   5377      defaults = false,
   5378      desc = [=[
   5379        List mode: By default, show tabs as ">", trailing spaces as "-", and
   5380        non-breakable space characters as "+". Useful to see the difference
   5381        between tabs and spaces and for trailing blanks. Further changed by
   5382        the 'listchars' option.
   5383 
   5384        When 'listchars' does not contain "tab" field, tabs are shown as "^I"
   5385        or "<09>", like how unprintable characters are displayed.
   5386 
   5387        The cursor is displayed at the start of the space a Tab character
   5388        occupies, not at the end as usual in Normal mode.  To get this cursor
   5389        position while displaying Tabs with spaces, use: >vim
   5390        	let &list = v:true | let &lcs = 'tab:  '
   5391        <
   5392        Note that list mode will also affect formatting (set with 'textwidth'
   5393        or 'wrapmargin') when 'cpoptions' includes 'L'.  See 'listchars' for
   5394        changing the way tabs are displayed.
   5395      ]=],
   5396      full_name = 'list',
   5397      redraw = { 'current_window' },
   5398      scope = { 'win' },
   5399      short_desc = N_('<Tab> and <EOL>'),
   5400      type = 'boolean',
   5401    },
   5402    {
   5403      abbreviation = 'lcs',
   5404      cb = 'did_set_chars_option',
   5405      defaults = 'tab:> ,trail:-,nbsp:+',
   5406      deny_duplicates = true,
   5407      desc = [=[
   5408        Strings to use in 'list' mode and for the |:list| command.  It is a
   5409        comma-separated list of string settings. *E1511*
   5410 
   5411        						*lcs-eol*
   5412          eol:c		Character to show at the end of each line.  When
   5413        		omitted, there is no extra character at the end of the
   5414        		line.
   5415        						*lcs-tab*
   5416          tab:xy[z]	Two or three characters to be used to show a tab.
   5417        		The third character is optional.
   5418 
   5419          tab:xy	The 'x' is always used, then 'y' as many times as will
   5420        		fit.  Thus "tab:>-" displays: >
   5421        			>
   5422        			>-
   5423        			>--
   5424        			etc.
   5425        <
   5426          tab:xyz	The 'z' is always used, then 'x' is prepended, and
   5427        		then 'y' is used as many times as will fit.  Thus
   5428        		"tab:<->" displays: >
   5429        			>
   5430        			<>
   5431        			<->
   5432        			<-->
   5433        			etc.
   5434        <
   5435        		When "tab:" is omitted, a tab is shown as ^I.
   5436        						*lcs-space*
   5437          space:c	Character to show for a space.  When omitted, spaces
   5438        		are left blank.
   5439        						*lcs-multispace*
   5440          multispace:c...
   5441        		One or more characters to use cyclically to show for
   5442        		multiple consecutive spaces.  Overrides the "space"
   5443        		setting, except for single spaces.  When omitted, the
   5444        		"space" setting is used.  For example,
   5445        		`:set listchars=multispace:---+` shows ten consecutive
   5446        		spaces as: >
   5447        			---+---+--
   5448        <
   5449        						*lcs-lead*
   5450          lead:c	Character to show for leading spaces.  When omitted,
   5451        		leading spaces are blank.  Overrides the "space" and
   5452        		"multispace" settings for leading spaces.  You can
   5453        		combine it with "tab:", for example: >vim
   5454        			set listchars+=tab:>-,lead:.
   5455        <
   5456        						*lcs-leadmultispace*
   5457          leadmultispace:c...
   5458        		Like the |lcs-multispace| value, but for leading
   5459        		spaces only.  Also overrides |lcs-lead| for leading
   5460        		multiple spaces.
   5461        		`:set listchars=leadmultispace:---+` shows ten
   5462        		consecutive leading spaces as: >
   5463        			---+---+--XXX
   5464        <
   5465        		Where "XXX" denotes the first non-blank characters in
   5466        		the line.
   5467        						*lcs-leadtab*
   5468          leadtab:xy[z]
   5469        		Like |lcs-tab|, but only for leading tabs.  When
   5470        		omitted, the "tab" setting is used for leading tabs.
   5471        		|lcs-tab| must also be set for this to work. *E1572*
   5472        		You can combine it with "tab:", for example: >vim
   5473        			let &listchars = 'tab:>-,leadtab:. '
   5474        <			This shows leading tabs as periods(.) and other tabs
   5475        		as ">--".
   5476        						*lcs-trail*
   5477          trail:c	Character to show for trailing spaces.  When omitted,
   5478        		trailing spaces are blank.  Overrides the "space" and
   5479        		"multispace" settings for trailing spaces.
   5480        						*lcs-extends*
   5481          extends:c	Character to show in the last column, when 'wrap' is
   5482        		off and the line continues beyond the right of the
   5483        		screen.
   5484        						*lcs-precedes*
   5485          precedes:c	Character to show in the first visible column of the
   5486        		physical line, when there is text preceding the
   5487        		character visible in the first column.
   5488        						*lcs-conceal*
   5489          conceal:c	Character to show in place of concealed text, when
   5490        		'conceallevel' is set to 1.  A space when omitted.
   5491        						*lcs-nbsp*
   5492          nbsp:c	Character to show for a non-breakable space character
   5493        		(0xA0 (160 decimal) and U+202F).  Left blank when
   5494        		omitted.
   5495 
   5496        The characters ':' and ',' should not be used.  UTF-8 characters can
   5497        be used.  All characters must be single width. *E1512*
   5498 
   5499        Each character can be specified as hex: >vim
   5500        	set listchars=eol:\\x24
   5501        	set listchars=eol:\\u21b5
   5502        	set listchars=eol:\\U000021b5
   5503        <	Note that a double backslash is used.  The number of hex characters
   5504        must be exactly 2 for \\x, 4 for \\u and 8 for \\U.
   5505 
   5506        Examples: >vim
   5507            set lcs=tab:>-,trail:-
   5508            set lcs=tab:>-,eol:<,nbsp:%
   5509            set lcs=extends:>,precedes:<
   5510        <	|hl-NonText| highlighting will be used for "eol", "extends" and
   5511        "precedes". |hl-Whitespace| for "nbsp", "space", "tab", "multispace",
   5512        "lead" and "trail".
   5513      ]=],
   5514      expand_cb = 'expand_set_chars_option',
   5515      full_name = 'listchars',
   5516      list = 'onecomma',
   5517      redraw = { 'current_window' },
   5518      scope = { 'global', 'win' },
   5519      short_desc = N_('characters for displaying in list mode'),
   5520      type = 'string',
   5521      varname = 'p_lcs',
   5522    },
   5523    {
   5524      abbreviation = 'lpl',
   5525      defaults = true,
   5526      desc = [=[
   5527        When on the plugin scripts are loaded when starting up |load-plugins|.
   5528        This option can be reset in your |vimrc| file to disable the loading
   5529        of plugins.
   5530        Note that using the "-u NONE" and "--noplugin" command line arguments
   5531        reset this option. |-u| |--noplugin|
   5532      ]=],
   5533      full_name = 'loadplugins',
   5534      scope = { 'global' },
   5535      short_desc = N_('load plugin scripts when starting up'),
   5536      type = 'boolean',
   5537      varname = 'p_lpl',
   5538    },
   5539    {
   5540      defaults = true,
   5541      full_name = 'magic',
   5542      scope = { 'global' },
   5543      short_desc = N_('Deprecated'),
   5544      type = 'boolean',
   5545      varname = 'p_magic',
   5546    },
   5547    {
   5548      abbreviation = 'mef',
   5549      defaults = '',
   5550      desc = [=[
   5551        Name of the errorfile for the |:make| command (see |:make_makeprg|)
   5552        and the |:grep| command.
   5553        When it is empty, an internally generated temp file will be used.
   5554        When "##" is included, it is replaced by a number to make the name
   5555        unique.  This makes sure that the ":make" command doesn't overwrite an
   5556        existing file.
   5557        NOT used for the ":cf" command.  See 'errorfile' for that.
   5558        Environment variables are expanded |:set_env|.
   5559        See |option-backslash| about including spaces and backslashes.
   5560        This option cannot be set from a |modeline| or in the |sandbox|, for
   5561        security reasons.
   5562      ]=],
   5563      expand = true,
   5564      full_name = 'makeef',
   5565      scope = { 'global' },
   5566      secure = true,
   5567      short_desc = N_('name of the errorfile for ":make"'),
   5568      type = 'string',
   5569      varname = 'p_mef',
   5570    },
   5571    {
   5572      abbreviation = 'menc',
   5573      cb = 'did_set_encoding',
   5574      defaults = '',
   5575      desc = [=[
   5576        Encoding used for reading the output of external commands.  When
   5577        empty, encoding is not converted.
   5578        This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
   5579        `:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
   5580        and `:laddfile`.
   5581 
   5582        This would be mostly useful when you use MS-Windows.  If iconv is
   5583        enabled, setting 'makeencoding' to "char" has the same effect as
   5584        setting to the system locale encoding.  Example: >vim
   5585        	set makeencoding=char	" system locale is used
   5586        <
   5587      ]=],
   5588      expand_cb = 'expand_set_encoding',
   5589      full_name = 'makeencoding',
   5590      scope = { 'global', 'buf' },
   5591      short_desc = N_('Converts the output of external commands'),
   5592      type = 'string',
   5593      varname = 'p_menc',
   5594    },
   5595    {
   5596      abbreviation = 'mp',
   5597      defaults = 'make',
   5598      desc = [=[
   5599        Program to use for the ":make" command.  See |:make_makeprg|.
   5600        This option may contain '%' and '#' characters (see  |:_%| and |:_#|),
   5601        which are expanded to the current and alternate file name.  Use |::S|
   5602        to escape file names in case they contain special characters.
   5603        Environment variables are expanded |:set_env|.  See |option-backslash|
   5604        about including spaces and backslashes.
   5605        Note that a '|' must be escaped twice: once for ":set" and once for
   5606        the interpretation of a command.  When you use a filter called
   5607        "myfilter" do it like this: >vim
   5608            set makeprg=gmake\ \\\|\ myfilter
   5609        <	The placeholder "$*" can be given (even multiple times) to specify
   5610        where the arguments will be included, for example: >vim
   5611            set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
   5612        <	This option cannot be set from a |modeline| or in the |sandbox|, for
   5613        security reasons.
   5614      ]=],
   5615      expand = true,
   5616      full_name = 'makeprg',
   5617      scope = { 'global', 'buf' },
   5618      secure = true,
   5619      short_desc = N_('program to use for the ":make" command'),
   5620      type = 'string',
   5621      varname = 'p_mp',
   5622    },
   5623    {
   5624      abbreviation = 'mps',
   5625      cb = 'did_set_matchpairs',
   5626      defaults = '(:),{:},[:]',
   5627      deny_duplicates = true,
   5628      desc = [=[
   5629        Characters that form pairs.  The |%| command jumps from one to the
   5630        other.
   5631        Only character pairs are allowed that are different, thus you cannot
   5632        jump between two double quotes.
   5633        The characters must be separated by a colon.
   5634        The pairs must be separated by a comma.  Example for including '<' and
   5635        '>' (for HTML): >vim
   5636        	set mps+=<:>
   5637 
   5638        <	A more exotic example, to jump between the '=' and ';' in an
   5639        assignment, useful for languages like C and Java: >vim
   5640        	au FileType c,cpp,java set mps+==:;
   5641 
   5642        <	For a more advanced way of using "%", see the matchit.vim plugin in
   5643        the $VIMRUNTIME/plugin directory. |add-local-help|
   5644      ]=],
   5645      full_name = 'matchpairs',
   5646      list = 'onecomma',
   5647      scope = { 'buf' },
   5648      short_desc = N_('pairs of characters that "%" can match'),
   5649      type = 'string',
   5650      varname = 'p_mps',
   5651    },
   5652    {
   5653      abbreviation = 'mat',
   5654      defaults = 5,
   5655      desc = [=[
   5656        Tenths of a second to show the matching paren, when 'showmatch' is
   5657        set.  Note that this is not in milliseconds, like other options that
   5658        set a time.  This is to be compatible with Nvi.
   5659      ]=],
   5660      full_name = 'matchtime',
   5661      scope = { 'global' },
   5662      short_desc = N_('tenths of a second to show matching paren'),
   5663      type = 'number',
   5664      varname = 'p_mat',
   5665    },
   5666    {
   5667      abbreviation = 'mco',
   5668      defaults = macros('MAX_MCO', 'number'),
   5669      full_name = 'maxcombine',
   5670      scope = { 'global' },
   5671      short_desc = N_('maximum nr of combining characters displayed'),
   5672      type = 'number',
   5673      varname = 'p_mco',
   5674    },
   5675    {
   5676      abbreviation = 'mfd',
   5677      defaults = 100,
   5678      desc = [=[
   5679        Maximum depth of function calls for user functions.  This normally
   5680        catches endless recursion.  When using a recursive function with
   5681        more depth, set 'maxfuncdepth' to a bigger number.  But this will use
   5682        more memory, there is the danger of failing when memory is exhausted.
   5683        Increasing this limit above 200 also changes the maximum for Ex
   5684        command recursion, see |E169|.
   5685        See also |:function|.
   5686        Also used for maximum depth of callback functions.
   5687      ]=],
   5688      full_name = 'maxfuncdepth',
   5689      scope = { 'global' },
   5690      short_desc = N_('maximum recursive depth for user functions'),
   5691      type = 'number',
   5692      varname = 'p_mfd',
   5693    },
   5694    {
   5695      abbreviation = 'mmd',
   5696      defaults = 1000,
   5697      desc = [=[
   5698        Maximum number of times a mapping is done without resulting in a
   5699        character to be used.  This normally catches endless mappings, like
   5700        ":map x y" with ":map y x".  It still does not catch ":map g wg",
   5701        because the 'w' is used before the next mapping is done.  See also
   5702        |key-mapping|.
   5703      ]=],
   5704      full_name = 'maxmapdepth',
   5705      scope = { 'global' },
   5706      short_desc = N_('maximum recursive depth for mapping'),
   5707      tags = { 'E223' },
   5708      type = 'number',
   5709      varname = 'p_mmd',
   5710    },
   5711    {
   5712      abbreviation = 'mmp',
   5713      defaults = 1000,
   5714      desc = [=[
   5715        Maximum amount of memory (in Kbyte) to use for pattern matching.
   5716        The maximum value is about 2000000.  Use this to work without a limit.
   5717        						*E363*
   5718        When Vim runs into the limit it gives an error message and mostly
   5719        behaves like CTRL-C was typed.
   5720        Running into the limit often means that the pattern is very
   5721        inefficient or too complex.  This may already happen with the pattern
   5722        `\(.\)*` on a very long line.  `.*` works much better.
   5723        Might also happen on redraw, when syntax rules try to match a complex
   5724        text structure.
   5725        Vim may run out of memory before hitting the 'maxmempattern' limit, in
   5726        which case you get an "Out of memory" error instead.
   5727      ]=],
   5728      full_name = 'maxmempattern',
   5729      scope = { 'global' },
   5730      short_desc = N_('maximum memory (in Kbyte) used for pattern search'),
   5731      type = 'number',
   5732      varname = 'p_mmp',
   5733    },
   5734    {
   5735      abbreviation = 'msc',
   5736      defaults = 999,
   5737      desc = [=[
   5738        Maximum number of matches shown for the search count status |shm-S|
   5739        When the number of matches exceeds this value, Vim shows ">" instead
   5740        of the exact count to keep searching fast.
   5741        Note: larger values may impact performance.
   5742        The value must be between 1 and 9999.  See also the |searchcount()|
   5743        function.
   5744      ]=],
   5745      full_name = 'maxsearchcount',
   5746      scope = { 'global' },
   5747      short_desc = N_('maximum number for the search count feature'),
   5748      type = 'number',
   5749      varname = 'p_msc',
   5750    },
   5751    {
   5752      abbreviation = 'mis',
   5753      defaults = 25,
   5754      desc = [=[
   5755        Maximum number of items to use in a menu.  Used for menus that are
   5756        generated from a list of items, e.g., the Buffers menu.  Changing this
   5757        option has no direct effect, the menu must be refreshed first.
   5758      ]=],
   5759      full_name = 'menuitems',
   5760      scope = { 'global' },
   5761      short_desc = N_('maximum number of items in a menu'),
   5762      type = 'number',
   5763      varname = 'p_mis',
   5764    },
   5765    {
   5766      abbreviation = 'mopt',
   5767      cb = 'did_set_messagesopt',
   5768      defaults = 'hit-enter,history:500',
   5769      values = { 'hit-enter', 'wait:', 'history:' },
   5770      flags = true,
   5771      deny_duplicates = true,
   5772      desc = [=[
   5773        Option settings for outputting messages.  It can consist of the
   5774        following items.  Items must be separated by a comma.
   5775 
   5776        hit-enter	Use a |hit-enter| prompt when the message is longer than
   5777        		'cmdheight' size.
   5778 
   5779        wait:{n}	Instead of using a |hit-enter| prompt, simply wait for
   5780        		{n} milliseconds so that the user has a chance to read
   5781        		the message.  The maximum value of {n} is 10000.  Use
   5782        		0 to disable the wait (but then the user may miss an
   5783        		important message).
   5784        		This item is ignored when "hit-enter" is present, but
   5785        		required when "hit-enter" is not present.
   5786 
   5787        history:{n}	Determines how many entries are remembered in the
   5788        		|:messages| history.  The maximum value is 10000.
   5789        		Setting it to zero clears the message history.
   5790        		This item must always be present.
   5791      ]=],
   5792      full_name = 'messagesopt',
   5793      list = 'onecommacolon',
   5794      scope = { 'global' },
   5795      short_desc = N_('options for outputting messages'),
   5796      type = 'string',
   5797      varname = 'p_mopt',
   5798    },
   5799    {
   5800      abbreviation = 'msm',
   5801      cb = 'did_set_mkspellmem',
   5802      defaults = '460000,2000,500',
   5803      desc = [=[
   5804        Parameters for |:mkspell|.  This tunes when to start compressing the
   5805        word tree.  Compression can be slow when there are many words, but
   5806        it's needed to avoid running out of memory.  The amount of memory used
   5807        per word depends very much on how similar the words are, that's why
   5808        this tuning is complicated.
   5809 
   5810        There are three numbers, separated by commas: >
   5811        	{start},{inc},{added}
   5812        <
   5813        For most languages the uncompressed word tree fits in memory.  {start}
   5814        gives the amount of memory in Kbyte that can be used before any
   5815        compression is done.  It should be a bit smaller than the amount of
   5816        memory that is available to Vim.
   5817 
   5818        When going over the {start} limit the {inc} number specifies the
   5819        amount of memory in Kbyte that can be allocated before another
   5820        compression is done.  A low number means compression is done after
   5821        less words are added, which is slow.  A high number means more memory
   5822        will be allocated.
   5823 
   5824        After doing compression, {added} times 1024 words can be added before
   5825        the {inc} limit is ignored and compression is done when any extra
   5826        amount of memory is needed.  A low number means there is a smaller
   5827        chance of hitting the {inc} limit, less memory is used but it's
   5828        slower.
   5829 
   5830        The languages for which these numbers are important are Italian and
   5831        Hungarian.  The default works for when you have about 512 Mbyte.  If
   5832        you have 1 Gbyte you could use: >vim
   5833        	set mkspellmem=900000,3000,800
   5834        <	If you have less than 512 Mbyte |:mkspell| may fail for some
   5835        languages, no matter what you set 'mkspellmem' to.
   5836        Environment variables are expanded |:set_env|.
   5837        This option cannot be set from a |modeline| or in the |sandbox|, for
   5838        security reasons.
   5839      ]=],
   5840      expand = true,
   5841      full_name = 'mkspellmem',
   5842      scope = { 'global' },
   5843      secure = true,
   5844      short_desc = N_('memory used before |:mkspell| compresses the tree'),
   5845      type = 'string',
   5846      varname = 'p_msm',
   5847    },
   5848    {
   5849      abbreviation = 'ml',
   5850      defaults = {
   5851        if_true = true,
   5852        doc = 'on (off for root)',
   5853      },
   5854      desc = [=[
   5855        If 'modeline' is on 'modelines' gives the number of lines that is
   5856        checked for set commands.  If 'modeline' is off or 'modelines' is zero
   5857        no lines are checked.  See |modeline|.
   5858      ]=],
   5859      full_name = 'modeline',
   5860      scope = { 'buf' },
   5861      short_desc = N_('recognize modelines at start or end of file'),
   5862      type = 'boolean',
   5863      varname = 'p_ml',
   5864    },
   5865    {
   5866      abbreviation = 'mle',
   5867      defaults = false,
   5868      desc = [=[
   5869        When on allow some options that are an expression to be set in the
   5870        modeline.  Check the option for whether it is affected by
   5871        'modelineexpr'.  Also see |modeline|.
   5872        This option cannot be set from a |modeline| or in the |sandbox|, for
   5873        security reasons.
   5874      ]=],
   5875      full_name = 'modelineexpr',
   5876      scope = { 'global' },
   5877      secure = true,
   5878      short_desc = N_('allow some options to be set in modeline'),
   5879      type = 'boolean',
   5880      varname = 'p_mle',
   5881    },
   5882    {
   5883      abbreviation = 'mls',
   5884      defaults = 5,
   5885      desc = [=[
   5886        If 'modeline' is on 'modelines' gives the number of lines that is
   5887        checked for set commands.  If 'modeline' is off or 'modelines' is zero
   5888        no lines are checked.  See |modeline|.
   5889 
   5890      ]=],
   5891      full_name = 'modelines',
   5892      scope = { 'global' },
   5893      short_desc = N_('number of lines checked for modelines'),
   5894      type = 'number',
   5895      varname = 'p_mls',
   5896    },
   5897    {
   5898      abbreviation = 'ma',
   5899      cb = 'did_set_modifiable',
   5900      defaults = true,
   5901      desc = [=[
   5902        When off the buffer contents cannot be changed.  The 'fileformat' and
   5903        'fileencoding' options also can't be changed.
   5904        Can be reset on startup with the |-M| command line argument.
   5905      ]=],
   5906      full_name = 'modifiable',
   5907      noglob = true,
   5908      scope = { 'buf' },
   5909      short_desc = N_('changes to the text are not possible'),
   5910      tags = { 'E21' },
   5911      type = 'boolean',
   5912      varname = 'p_ma',
   5913    },
   5914    {
   5915      abbreviation = 'mod',
   5916      cb = 'did_set_modified',
   5917      defaults = false,
   5918      desc = [=[
   5919        When on, the buffer is considered to be modified.  This option is set
   5920        when:
   5921        1. A change was made to the text since it was last written.  Using the
   5922           |undo| command to go back to the original text will reset the
   5923           option.  But undoing changes that were made before writing the
   5924           buffer will set the option again, since the text is different from
   5925           when it was written.
   5926        2. 'fileformat' or 'fileencoding' is different from its original
   5927           value.  The original value is set when the buffer is read or
   5928           written.  A ":set nomodified" command also resets the original
   5929           values to the current values and the 'modified' option will be
   5930           reset.
   5931           Similarly for 'eol' and 'bomb'.
   5932        This option is not set when a change is made to the buffer as the
   5933        result of a BufNewFile, BufRead/BufReadPost, BufWritePost,
   5934        FileAppendPost or VimLeave autocommand event.  See |gzip-example| for
   5935        an explanation.
   5936        When 'buftype' is "nowrite" or "nofile" this option may be set, but
   5937        will be ignored.
   5938        Note that the text may actually be the same, e.g. 'modified' is set
   5939        when using "rA" on an "A".
   5940      ]=],
   5941      full_name = 'modified',
   5942      no_mkrc = true,
   5943      redraw = { 'statuslines' },
   5944      scope = { 'buf' },
   5945      short_desc = N_('buffer has been modified'),
   5946      type = 'boolean',
   5947      varname = 'p_mod',
   5948    },
   5949    {
   5950      defaults = true,
   5951      desc = [=[
   5952        When on, listings pause when the whole screen is filled.  You will get
   5953        the |more-prompt|.  When this option is off there are no pauses, the
   5954        listing continues until finished.
   5955      ]=],
   5956      full_name = 'more',
   5957      scope = { 'global' },
   5958      short_desc = N_('listings when the whole screen is filled'),
   5959      type = 'boolean',
   5960      varname = 'p_more',
   5961    },
   5962    {
   5963      cb = 'did_set_mouse',
   5964      defaults = 'nvi',
   5965      desc = [=[
   5966        Enables mouse support. For example, to enable the mouse in Normal mode
   5967        and Visual mode: >vim
   5968        	set mouse=nv
   5969        <
   5970        To temporarily disable mouse support, hold the shift key while using
   5971        the mouse.
   5972 
   5973        Mouse support can be enabled for different modes:
   5974        	n	Normal mode
   5975        	v	Visual mode
   5976        	i	Insert mode
   5977        	c	Command-line mode
   5978        	h	all previous modes when editing a help file
   5979        	a	all previous modes
   5980        	r	for |hit-enter| and |more-prompt| prompt
   5981 
   5982        Left-click anywhere in a text buffer to place the cursor there.  This
   5983        works with operators too, e.g. type |d| then left-click to delete text
   5984        from the current cursor position to the position where you clicked.
   5985 
   5986        Drag the |status-line| or vertical separator of a window to resize it.
   5987 
   5988        If enabled for "v" (Visual mode) then double-click selects word-wise,
   5989        triple-click makes it line-wise, and quadruple-click makes it
   5990        rectangular block-wise.
   5991 
   5992        For scrolling with a mouse wheel see |scroll-mouse-wheel|.
   5993 
   5994        Note: When enabling the mouse in a terminal, copy/paste will use the
   5995        "* register if possible. See also 'clipboard'.
   5996 
   5997        Related options:
   5998        'mousefocus'	window focus follows mouse pointer
   5999        'mousemodel'	what mouse button does which action
   6000        'mousehide'	hide mouse pointer while typing text
   6001        'selectmode'	whether to start Select mode or Visual mode
   6002      ]=],
   6003      expand_cb = 'expand_set_mouse',
   6004      full_name = 'mouse',
   6005      list = 'flags',
   6006      scope = { 'global' },
   6007      short_desc = N_('the use of mouse clicks'),
   6008      type = 'string',
   6009      varname = 'p_mouse',
   6010    },
   6011    {
   6012      abbreviation = 'mousef',
   6013      defaults = false,
   6014      desc = [=[
   6015        The window that the mouse pointer is on is automatically activated.
   6016        When changing the window layout or window focus in another way, the
   6017        mouse pointer is moved to the window with keyboard focus.  Off is the
   6018        default because it makes using the pull down menus a little goofy, as
   6019        a pointer transit may activate a window unintentionally.
   6020      ]=],
   6021      full_name = 'mousefocus',
   6022      redraw = { 'ui_option' },
   6023      scope = { 'global' },
   6024      short_desc = N_('keyboard focus follows the mouse'),
   6025      type = 'boolean',
   6026      varname = 'p_mousef',
   6027    },
   6028    {
   6029      abbreviation = 'mh',
   6030      defaults = true,
   6031      desc = [=[
   6032        		only in the GUI
   6033        When on, the mouse pointer is hidden when characters are typed.
   6034        The mouse pointer is restored when the mouse is moved.
   6035      ]=],
   6036      full_name = 'mousehide',
   6037      redraw = { 'ui_option' },
   6038      scope = { 'global' },
   6039      short_desc = N_('hide mouse pointer while typing'),
   6040      type = 'boolean',
   6041      varname = 'p_mh',
   6042    },
   6043    {
   6044      abbreviation = 'mousem',
   6045      defaults = 'popup_setpos',
   6046      values = { 'extend', 'popup', 'popup_setpos' },
   6047      desc = [=[
   6048        Sets the model to use for the mouse.  The name mostly specifies what
   6049        the right mouse button is used for:
   6050           extend	Right mouse button extends a selection.  This works
   6051        		like in an xterm.
   6052           popup	Right mouse button pops up a menu.  The shifted left
   6053        		mouse button extends a selection.  This works like
   6054        		with Microsoft Windows.
   6055           popup_setpos Like "popup", but the cursor will be moved to the
   6056        		position where the mouse was clicked, and thus the
   6057        		selected operation will act upon the clicked object.
   6058        		If clicking inside a selection, that selection will
   6059        		be acted upon, i.e. no cursor move.  This implies of
   6060        		course, that right clicking outside a selection will
   6061        		end Visual mode.
   6062        Overview of what button does what for each model:
   6063        mouse		    extend		popup(_setpos) ~
   6064        left click	    place cursor	place cursor
   6065        left drag	    start selection	start selection
   6066        shift-left	    search word		extend selection
   6067        right click	    extend selection	popup menu (place cursor)
   6068        right drag	    extend selection	-
   6069        middle click	    paste		paste
   6070 
   6071        In the "popup" model the right mouse button produces a pop-up menu.
   6072        Nvim creates a default |popup-menu| but you can redefine it.
   6073 
   6074        Note that you can further refine the meaning of buttons with mappings.
   6075        See |mouse-overview|.  But mappings are NOT used for modeless selection.
   6076 
   6077        Example: >vim
   6078            map <S-LeftMouse>     <RightMouse>
   6079            map <S-LeftDrag>      <RightDrag>
   6080            map <S-LeftRelease>   <RightRelease>
   6081            map <2-S-LeftMouse>   <2-RightMouse>
   6082            map <2-S-LeftDrag>    <2-RightDrag>
   6083            map <2-S-LeftRelease> <2-RightRelease>
   6084            map <3-S-LeftMouse>   <3-RightMouse>
   6085            map <3-S-LeftDrag>    <3-RightDrag>
   6086            map <3-S-LeftRelease> <3-RightRelease>
   6087            map <4-S-LeftMouse>   <4-RightMouse>
   6088            map <4-S-LeftDrag>    <4-RightDrag>
   6089            map <4-S-LeftRelease> <4-RightRelease>
   6090        <
   6091        Mouse commands requiring the CTRL modifier can be simulated by typing
   6092        the "g" key before using the mouse:
   6093            "g<LeftMouse>"  is "<C-LeftMouse>	(jump to tag under mouse click)
   6094            "g<RightMouse>" is "<C-RightMouse>	("CTRL-T")
   6095      ]=],
   6096      full_name = 'mousemodel',
   6097      scope = { 'global' },
   6098      short_desc = N_('changes meaning of mouse buttons'),
   6099      type = 'string',
   6100      varname = 'p_mousem',
   6101    },
   6102    {
   6103      abbreviation = 'mousemev',
   6104      defaults = false,
   6105      desc = [=[
   6106        When on, mouse move events are delivered to the input queue and are
   6107        available for mapping |<MouseMove>|.  The default, off, avoids the
   6108        mouse movement overhead except when needed.
   6109        Warning: Setting this option can make pending mappings to be aborted
   6110        when the mouse is moved.
   6111      ]=],
   6112      full_name = 'mousemoveevent',
   6113      redraw = { 'ui_option' },
   6114      scope = { 'global' },
   6115      short_desc = N_('deliver mouse move events to input queue'),
   6116      tags = { 'mouse-hover' },
   6117      type = 'boolean',
   6118      varname = 'p_mousemev',
   6119    },
   6120    {
   6121      cb = 'did_set_mousescroll',
   6122      defaults = 'ver:3,hor:6',
   6123      values = { 'hor:', 'ver:' },
   6124      desc = [=[
   6125        This option controls the number of lines / columns to scroll by when
   6126        scrolling with a mouse wheel (|scroll-mouse-wheel|). The option is
   6127        a comma-separated list. Each part consists of a direction and a count
   6128        as follows:
   6129        	direction:count,direction:count
   6130        Direction is one of either "hor" or "ver". "hor" controls horizontal
   6131        scrolling and "ver" controls vertical scrolling. Count sets the amount
   6132        to scroll by for the given direction, it should be a non negative
   6133        integer. Each direction should be set at most once. If a direction
   6134        is omitted, a default value is used (6 for horizontal scrolling and 3
   6135        for vertical scrolling). You can disable mouse scrolling by using
   6136        a count of 0.
   6137 
   6138        Example: >vim
   6139        	set mousescroll=ver:5,hor:2
   6140        <	Will make Nvim scroll 5 lines at a time when scrolling vertically, and
   6141        scroll 2 columns at a time when scrolling horizontally.
   6142      ]=],
   6143      full_name = 'mousescroll',
   6144      list = 'comma',
   6145      scope = { 'global' },
   6146      short_desc = N_('amount to scroll by when scrolling with a mouse'),
   6147      tags = { 'E5080' },
   6148      type = 'string',
   6149      varname = 'p_mousescroll',
   6150      vi_def = true,
   6151    },
   6152    {
   6153      abbreviation = 'mouses',
   6154      deny_duplicates = true,
   6155      defaults = {
   6156        if_true = '',
   6157        doc = [["i:beam,r:beam,s:updown,sd:cross,
   6158            m:no,ml:up-arrow,v:rightup-arrow"]],
   6159      },
   6160      desc = [=[
   6161        This option tells Vim what the mouse pointer should look like in
   6162        different modes.  The option is a comma-separated list of parts, much
   6163        like used for 'guicursor'.  Each part consist of a mode/location-list
   6164        and an argument-list:
   6165        	mode-list:shape,mode-list:shape,..
   6166        The mode-list is a dash separated list of these modes/locations:
   6167        		In a normal window: ~
   6168        	n	Normal mode
   6169        	v	Visual mode
   6170        	ve	Visual mode with 'selection' "exclusive" (same as 'v',
   6171        		if not specified)
   6172        	o	Operator-pending mode
   6173        	i	Insert mode
   6174        	r	Replace mode
   6175 
   6176        		Others: ~
   6177        	c	appending to the command-line
   6178        	ci	inserting in the command-line
   6179        	cr	replacing in the command-line
   6180        	m	at the 'Hit ENTER' or 'More' prompts
   6181        	ml	idem, but cursor in the last line
   6182        	e	any mode, pointer below last window
   6183        	s	any mode, pointer on a status line
   6184        	sd	any mode, while dragging a status line
   6185        	vs	any mode, pointer on a vertical separator line
   6186        	vd	any mode, while dragging a vertical separator line
   6187        	a	everywhere
   6188 
   6189        The shape is one of the following:
   6190        avail	name		looks like ~
   6191        w x	arrow		Normal mouse pointer
   6192        w x	blank		no pointer at all (use with care!)
   6193        w x	beam		I-beam
   6194        w x	updown		up-down sizing arrows
   6195        w x	leftright	left-right sizing arrows
   6196        w x	busy		The system's usual busy pointer
   6197        w x	no		The system's usual "no input" pointer
   6198          x	udsizing	indicates up-down resizing
   6199          x	lrsizing	indicates left-right resizing
   6200          x	crosshair	like a big thin +
   6201          x	hand1		black hand
   6202          x	hand2		white hand
   6203          x	pencil		what you write with
   6204          x	question	big ?
   6205          x	rightup-arrow	arrow pointing right-up
   6206        w x	up-arrow	arrow pointing up
   6207          x	<number>	any X11 pointer number (see X11/cursorfont.h)
   6208 
   6209        The "avail" column contains a 'w' if the shape is available for Win32,
   6210        x for X11.
   6211        Any modes not specified or shapes not available use the normal mouse
   6212        pointer.
   6213 
   6214        Example: >vim
   6215        	set mouseshape=s:udsizing,m:no
   6216        <	will make the mouse turn to a sizing arrow over the status lines and
   6217        indicate no input when the hit-enter prompt is displayed (since
   6218        clicking the mouse has no effect in this state.)
   6219      ]=],
   6220      full_name = 'mouseshape',
   6221      list = 'onecomma',
   6222      scope = { 'global' },
   6223      short_desc = N_('shape of the mouse pointer in different modes'),
   6224      tags = { 'E547' },
   6225      type = 'string',
   6226      immutable = true,
   6227    },
   6228    {
   6229      abbreviation = 'mouset',
   6230      defaults = 500,
   6231      desc = [=[
   6232        Defines the maximum time in msec between two mouse clicks for the
   6233        second click to be recognized as a multi click.
   6234      ]=],
   6235      full_name = 'mousetime',
   6236      scope = { 'global' },
   6237      short_desc = N_('max time between mouse double-click'),
   6238      type = 'number',
   6239      varname = 'p_mouset',
   6240    },
   6241    {
   6242      abbreviation = 'nf',
   6243      defaults = 'bin,hex',
   6244      values = { 'bin', 'octal', 'hex', 'alpha', 'unsigned', 'blank' },
   6245      deny_duplicates = true,
   6246      desc = [=[
   6247        This defines what bases Vim will consider for numbers when using the
   6248        CTRL-A and CTRL-X commands for adding to and subtracting from a number
   6249        respectively; see |CTRL-A| for more info on these commands.
   6250        alpha	If included, single alphabetical characters will be
   6251        	incremented or decremented.  This is useful for a list with a
   6252        	letter index a), b), etc.		*octal-nrformats*
   6253        octal	If included, numbers that start with a zero will be considered
   6254        	to be octal.  Example: Using CTRL-A on "007" results in "010".
   6255        hex	If included, numbers starting with "0x" or "0X" will be
   6256        	considered to be hexadecimal.  Example: Using CTRL-X on
   6257        	"0x100" results in "0x0ff".
   6258        bin	If included, numbers starting with "0b" or "0B" will be
   6259        	considered to be binary.  Example: Using CTRL-X on
   6260        	"0b1000" subtracts one, resulting in "0b0111".
   6261        unsigned    If included, numbers are recognized as unsigned.  Thus a
   6262        	leading dash or negative sign won't be considered as part of
   6263        	the number.  Examples:
   6264        	    Using CTRL-X on "2020" in "9-2020" results in "9-2019"
   6265        	    (without "unsigned" it would become "9-2021").
   6266        	    Using CTRL-A on "2020" in "9-2020" results in "9-2021"
   6267        	    (without "unsigned" it would become "9-2019").
   6268        	    Using CTRL-X on "0" or CTRL-A on "18446744073709551615"
   6269        	    (2^64 - 1) has no effect, overflow is prevented.
   6270        blank	If included, treat numbers as signed or unsigned based on
   6271        	preceding whitespace.  If a number with a leading dash has its
   6272        	dash immediately preceded by a non-whitespace character (i.e.,
   6273        	not a tab or a " "), the negative sign won't be considered as
   6274        	part of the number.  For example:
   6275        	    Using CTRL-A on "14" in "Carbon-14" results in "Carbon-15"
   6276        	    (without "blank" it would become "Carbon-13").
   6277        	    Using CTRL-X on "8" in "Carbon -8" results in "Carbon -9"
   6278        	    (because -8 is preceded by whitespace.  If "unsigned" was
   6279        	    set, it would result in "Carbon -7").
   6280        	If this format is included, overflow is prevented as if
   6281        	"unsigned" were set.  If both this format and "unsigned" are
   6282        	included, "unsigned" will take precedence.
   6283 
   6284        Numbers which simply begin with a digit in the range 1-9 are always
   6285        considered decimal.  This also happens for numbers that are not
   6286        recognized as octal or hex.
   6287      ]=],
   6288      full_name = 'nrformats',
   6289      list = 'onecomma',
   6290      scope = { 'buf' },
   6291      short_desc = N_('number formats recognized for CTRL-A command'),
   6292      type = 'string',
   6293      varname = 'p_nf',
   6294    },
   6295    {
   6296      abbreviation = 'nu',
   6297      cb = 'did_set_number_relativenumber',
   6298      defaults = false,
   6299      desc = [=[
   6300        Print the line number in front of each line.  When the 'n' option is
   6301        excluded from 'cpoptions' a wrapped line will not use the column of
   6302        line numbers.
   6303        Use the 'numberwidth' option to adjust the room for the line number.
   6304        When a long, wrapped line doesn't start with the first character, '-'
   6305        characters are put before the number.
   6306        For highlighting see |hl-LineNr|, |hl-CursorLineNr|, and the
   6307        |:sign-define| "numhl" argument.
   6308        					*number_relativenumber*
   6309        The 'relativenumber' option changes the displayed number to be
   6310        relative to the cursor.  Together with 'number' there are these
   6311        four combinations (cursor in line 3):
   6312 
   6313        	'nonu'          'nu'            'nonu'          'nu'
   6314        	'nornu'         'nornu'         'rnu'           'rnu'
   6315        >
   6316            |apple          |  1 apple      |  2 apple      |  2 apple
   6317            |pear           |  2 pear       |  1 pear       |  1 pear
   6318            |nobody         |  3 nobody     |  0 nobody     |3   nobody
   6319            |there          |  4 there      |  1 there      |  1 there
   6320        <
   6321      ]=],
   6322      full_name = 'number',
   6323      redraw = { 'current_window' },
   6324      scope = { 'win' },
   6325      short_desc = N_('print the line number in front of each line'),
   6326      type = 'boolean',
   6327    },
   6328    {
   6329      abbreviation = 'nuw',
   6330      cb = 'did_set_numberwidth',
   6331      defaults = 4,
   6332      desc = [=[
   6333        Minimal number of columns to use for the line number.  Only relevant
   6334        when the 'number' or 'relativenumber' option is set or printing lines
   6335        with a line number.  Since one space is always between the number and
   6336        the text, there is one less character for the number itself.
   6337        The value is the minimum width.  A bigger width is used when needed to
   6338        fit the highest line number in the buffer respectively the number of
   6339        rows in the window, depending on whether 'number' or 'relativenumber'
   6340        is set.  Thus with the Vim default of 4 there is room for a line
   6341        number up to 999.  When the buffer has 1000 lines five columns will be
   6342        used. The minimum value is 1, the maximum value is 20.
   6343      ]=],
   6344      full_name = 'numberwidth',
   6345      redraw = { 'current_window' },
   6346      scope = { 'win' },
   6347      short_desc = N_('number of columns used for the line number'),
   6348      type = 'number',
   6349    },
   6350    {
   6351      abbreviation = 'ofu',
   6352      cb = 'did_set_omnifunc',
   6353      defaults = '',
   6354      desc = [=[
   6355        This option specifies a function to be used for Insert mode omni
   6356        completion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O|
   6357        See |complete-functions| for an explanation of how the function is
   6358        invoked and what it should return.  The value can be the name of a
   6359        function, a |lambda| or a |Funcref|.  See |option-value-function| for
   6360        more information.
   6361        This option is usually set by a filetype plugin:
   6362        |:filetype-plugin-on|
   6363        This option cannot be set from a |modeline| or in the |sandbox|, for
   6364        security reasons.
   6365      ]=],
   6366      full_name = 'omnifunc',
   6367      func = true,
   6368      scope = { 'buf' },
   6369      secure = true,
   6370      short_desc = N_('function for filetype-specific completion'),
   6371      type = 'string',
   6372      varname = 'p_ofu',
   6373    },
   6374    {
   6375      abbreviation = 'odev',
   6376      defaults = false,
   6377      desc = [=[
   6378        		only for Windows
   6379        Enable reading and writing from devices.  This may get Vim stuck on a
   6380        device that can be opened but doesn't actually do the I/O.  Therefore
   6381        it is off by default.
   6382        Note that on Windows editing "aux.h", "lpt1.txt" and the like also
   6383        result in editing a device.
   6384      ]=],
   6385      full_name = 'opendevice',
   6386      scope = { 'global' },
   6387      short_desc = N_('allow reading/writing devices on MS-Windows'),
   6388      type = 'boolean',
   6389      immutable = true,
   6390    },
   6391    {
   6392      abbreviation = 'opfunc',
   6393      cb = 'did_set_operatorfunc',
   6394      defaults = '',
   6395      desc = [=[
   6396        This option specifies a function to be called by the |g@| operator.
   6397        See |:map-operator| for more info and an example.  The value can be
   6398        the name of a function, a |lambda| or a |Funcref|.  See
   6399        |option-value-function| for more information.
   6400 
   6401        This option cannot be set from a |modeline| or in the |sandbox|, for
   6402        security reasons.
   6403      ]=],
   6404      full_name = 'operatorfunc',
   6405      func = true,
   6406      scope = { 'global' },
   6407      secure = true,
   6408      short_desc = N_('function to be called for |g@| operator'),
   6409      type = 'string',
   6410      varname = 'p_opfunc',
   6411    },
   6412    {
   6413      abbreviation = 'pp',
   6414      cb = 'did_set_runtimepackpath',
   6415      defaults = {
   6416        if_true = '',
   6417        doc = "see 'runtimepath'",
   6418        meta = '...',
   6419      },
   6420      deny_duplicates = true,
   6421      desc = [=[
   6422        Directories used to find packages.
   6423        See |packages| and |packages-runtimepath|.
   6424        Environment variables are expanded |:set_env|.
   6425        This option cannot be set from a |modeline| or in the |sandbox|, for
   6426        security reasons.
   6427      ]=],
   6428      expand = true,
   6429      full_name = 'packpath',
   6430      list = 'onecomma',
   6431      scope = { 'global' },
   6432      secure = true,
   6433      short_desc = N_('list of directories used for packages'),
   6434      type = 'string',
   6435      varname = 'p_pp',
   6436    },
   6437    {
   6438      abbreviation = 'para',
   6439      defaults = 'IPLPPPQPP TPHPLIPpLpItpplpipbp',
   6440      desc = [=[
   6441        Specifies the nroff macros that separate paragraphs.  These are pairs
   6442        of two letters (see |object-motions|).
   6443      ]=],
   6444      full_name = 'paragraphs',
   6445      scope = { 'global' },
   6446      short_desc = N_('nroff macros that separate paragraphs'),
   6447      type = 'string',
   6448      varname = 'p_para',
   6449    },
   6450    {
   6451      cb = 'did_set_paste',
   6452      defaults = false,
   6453      full_name = 'paste',
   6454      pri_mkrc = true,
   6455      scope = { 'global' },
   6456      short_desc = N_('Deprecated'),
   6457      type = 'boolean',
   6458      varname = 'p_paste',
   6459    },
   6460    {
   6461      abbreviation = 'pt',
   6462      defaults = '',
   6463      full_name = 'pastetoggle',
   6464      scope = { 'global' },
   6465      short_desc = N_('Deprecated'),
   6466      type = 'string',
   6467      immutable = true,
   6468    },
   6469    {
   6470      abbreviation = 'pex',
   6471      cb = 'did_set_optexpr',
   6472      defaults = '',
   6473      desc = [=[
   6474        Expression which is evaluated to apply a patch to a file and generate
   6475        the resulting new version of the file.  See |diff-patchexpr|.
   6476        This option cannot be set from a |modeline| or in the |sandbox|, for
   6477        security reasons.
   6478      ]=],
   6479      full_name = 'patchexpr',
   6480      scope = { 'global' },
   6481      secure = true,
   6482      short_desc = N_('expression used to patch a file'),
   6483      type = 'string',
   6484      varname = 'p_pex',
   6485    },
   6486    {
   6487      abbreviation = 'pm',
   6488      cb = 'did_set_backupext_or_patchmode',
   6489      defaults = '',
   6490      desc = [=[
   6491        When non-empty the oldest version of a file is kept.  This can be used
   6492        to keep the original version of a file if you are changing files in a
   6493        source distribution.  Only the first time that a file is written a
   6494        copy of the original file will be kept.  The name of the copy is the
   6495        name of the original file with the string in the 'patchmode' option
   6496        appended.  This option should start with a dot.  Use a string like
   6497        ".orig" or ".org".  'backupdir' must not be empty for this to work
   6498        (Detail: The backup file is renamed to the patchmode file after the
   6499        new file has been successfully written, that's why it must be possible
   6500        to write a backup file).  If there was no file to be backed up, an
   6501        empty file is created.
   6502        When the 'backupskip' pattern matches, a patchmode file is not made.
   6503        Using 'patchmode' for compressed files appends the extension at the
   6504        end (e.g., "file.gz.orig"), thus the resulting name isn't always
   6505        recognized as a compressed file.
   6506        Only normal file name characters can be used, `/\*?[|<>` are illegal.
   6507      ]=],
   6508      full_name = 'patchmode',
   6509      normal_fname_chars = true,
   6510      scope = { 'global' },
   6511      short_desc = N_('keep the oldest version of a file'),
   6512      tags = { 'E205', 'E206' },
   6513      type = 'string',
   6514      varname = 'p_pm',
   6515    },
   6516    {
   6517      abbreviation = 'pa',
   6518      defaults = '.,,',
   6519      deny_duplicates = true,
   6520      desc = [=[
   6521        This is a list of directories which will be searched when using the
   6522        |gf|, [f, ]f, ^Wf, |:find|, |:sfind|, |:tabfind| and other commands,
   6523        provided that the file being searched for has a relative path (not
   6524        starting with "/", "./" or "../").  The directories in the 'path'
   6525        option may be relative or absolute.
   6526        - Use commas to separate directory names: >vim
   6527        	set path=.,/usr/local/include,/usr/include
   6528        <	- Spaces can also be used to separate directory names.  To have a
   6529          space in a directory name, precede it with an extra backslash, and
   6530          escape the space: >vim
   6531        	set path=.,/dir/with\\\ space
   6532        <	- To include a comma in a directory name precede it with an extra
   6533          backslash: >vim
   6534        	set path=.,/dir/with\\,comma
   6535        <	- To search relative to the directory of the current file, use: >vim
   6536        	set path=.
   6537        <	- To search in the current directory use an empty string between two
   6538          commas: >vim
   6539        	set path=,,
   6540        <	- A directory name may end in a ':' or '/'.
   6541        - Environment variables are expanded |:set_env|.
   6542        - When using |netrw| URLs can be used.  For example, adding
   6543          "https://www.vim.org" will make ":find index.html" work.
   6544        - Search upwards and downwards in a directory tree using "*", "**" and
   6545          ";".  See |file-searching| for info and syntax.
   6546        - Careful with '\' characters, type two to get one in the option: >vim
   6547        	set path=.,c:\\include
   6548        <	  Or just use '/' instead: >vim
   6549        	set path=.,c:/include
   6550        <	Don't forget "." or files won't even be found in the same directory as
   6551        the file!
   6552        The maximum length is limited.  How much depends on the system, mostly
   6553        it is something like 256 or 1024 characters.
   6554        You can check if all the include files are found, using the value of
   6555        'path', see |:checkpath|.
   6556        The use of |:set+=| and |:set-=| is preferred when adding or removing
   6557        directories from the list.  This avoids problems when a future version
   6558        uses another default.  To remove the current directory use: >vim
   6559        	set path-=
   6560        <	To add the current directory use: >vim
   6561        	set path+=
   6562        <	To use an environment variable, you probably need to replace the
   6563        separator.  Here is an example to append $INCL, in which directory
   6564        names are separated with a semicolon: >vim
   6565        	let &path = &path .. "," .. substitute($INCL, ';', ',', 'g')
   6566        <	Replace the ';' with a ':' or whatever separator is used.  Note that
   6567        this doesn't work when $INCL contains a comma or white space.
   6568      ]=],
   6569      expand = true,
   6570      full_name = 'path',
   6571      list = 'comma',
   6572      scope = { 'global', 'buf' },
   6573      short_desc = N_('list of directories searched with "gf" et.al.'),
   6574      tags = { 'E343', 'E345', 'E347', 'E854' },
   6575      type = 'string',
   6576      varname = 'p_path',
   6577    },
   6578    {
   6579      abbreviation = 'pi',
   6580      defaults = false,
   6581      desc = [=[
   6582        When changing the indent of the current line, preserve as much of the
   6583        indent structure as possible.  Normally the indent is replaced by a
   6584        series of tabs followed by spaces as required (unless 'expandtab' is
   6585        enabled, in which case only spaces are used).  Enabling this option
   6586        means the indent will preserve as many existing characters as possible
   6587        for indenting, and only add additional tabs or spaces as required.
   6588        'expandtab' does not apply to the preserved white space, a Tab remains
   6589        a Tab.
   6590        NOTE: When using ">>" multiple times the resulting indent is a mix of
   6591        tabs and spaces.  You might not like this.
   6592        Also see 'copyindent'.
   6593        Use |:retab| to clean up white space.
   6594      ]=],
   6595      full_name = 'preserveindent',
   6596      scope = { 'buf' },
   6597      short_desc = N_('preserve the indent structure when reindenting'),
   6598      type = 'boolean',
   6599      varname = 'p_pi',
   6600    },
   6601    {
   6602      abbreviation = 'pvh',
   6603      defaults = 12,
   6604      desc = [=[
   6605        Default height for a preview window.  Used for |:ptag| and associated
   6606        commands.  Used for |CTRL-W_}| when no count is given.
   6607      ]=],
   6608      full_name = 'previewheight',
   6609      scope = { 'global' },
   6610      short_desc = N_('height of the preview window'),
   6611      type = 'number',
   6612      varname = 'p_pvh',
   6613    },
   6614    {
   6615      abbreviation = 'pvw',
   6616      cb = 'did_set_previewwindow',
   6617      defaults = false,
   6618      desc = [=[
   6619        Identifies the preview window.  Only one window can have this option
   6620        set.  It's normally not set directly, but by using one of the commands
   6621        |:ptag|, |:pedit|, etc.
   6622      ]=],
   6623      full_name = 'previewwindow',
   6624      noglob = true,
   6625      redraw = { 'statuslines' },
   6626      scope = { 'win' },
   6627      short_desc = N_('identifies the preview window'),
   6628      tags = { 'E590' },
   6629      type = 'boolean',
   6630    },
   6631    {
   6632      defaults = true,
   6633      full_name = 'prompt',
   6634      scope = { 'global' },
   6635      short_desc = N_('enable prompt in Ex mode'),
   6636      type = 'boolean',
   6637      immutable = true,
   6638    },
   6639    {
   6640      abbreviation = 'pb',
   6641      cb = 'did_set_pumblend',
   6642      defaults = 0,
   6643      desc = [=[
   6644        Enables pseudo-transparency for the |popup-menu|. Valid values are in
   6645        the range of 0 for fully opaque popupmenu (disabled) to 100 for fully
   6646        transparent background. Values between 0-30 are typically most useful.
   6647 
   6648        It is possible to override the level for individual highlights within
   6649        the popupmenu using |highlight-blend|. For instance, to enable
   6650        transparency but force the current selected element to be fully opaque: >vim
   6651 
   6652        	set pumblend=15
   6653        	hi PmenuSel blend=0
   6654        <
   6655        UI-dependent. Works best with RGB colors. 'termguicolors'
   6656      ]=],
   6657      full_name = 'pumblend',
   6658      redraw = { 'ui_option' },
   6659      scope = { 'global' },
   6660      short_desc = N_('Controls transparency level of popup menu'),
   6661      type = 'number',
   6662      varname = 'p_pb',
   6663    },
   6664    {
   6665      full_name = 'pumborder',
   6666      scope = { 'global' },
   6667      cb = 'did_set_pumborder',
   6668      defaults = { if_true = '' },
   6669      values = { '', 'double', 'single', 'shadow', 'rounded', 'solid', 'bold', 'none' },
   6670      desc = [=[
   6671        Defines the default border style of popupmenu windows. See 'winborder' for
   6672        valid values. |hl-PmenuBorder| is used for highlighting the border, and when
   6673        style is "shadow" the |hl-PmenuShadow| and |hl-PmenuShadowThrough| groups are used.
   6674      ]=],
   6675      short_desc = N_('border of popupmenu'),
   6676      type = 'string',
   6677      list = 'onecomma',
   6678      varname = 'p_pumborder',
   6679    },
   6680    {
   6681      abbreviation = 'ph',
   6682      defaults = 0,
   6683      desc = [=[
   6684        Maximum number of items to show in the popup menu
   6685        (|ins-completion-menu|). Zero means "use available screen space".
   6686      ]=],
   6687      full_name = 'pumheight',
   6688      scope = { 'global' },
   6689      short_desc = N_('maximum height of the popup menu'),
   6690      type = 'number',
   6691      varname = 'p_ph',
   6692    },
   6693    {
   6694      abbreviation = 'pmw',
   6695      defaults = 0,
   6696      desc = [=[
   6697        Maximum width for the popup menu (|ins-completion-menu|).  When zero,
   6698        there is no maximum width limit, otherwise the popup menu will never be
   6699        wider than this value.  Truncated text will be indicated by "trunc"
   6700        value of 'fillchars' option.
   6701 
   6702        This option takes precedence over 'pumwidth'.
   6703      ]=],
   6704      full_name = 'pummaxwidth',
   6705      scope = { 'global' },
   6706      short_desc = N_('maximum width of the popup menu'),
   6707      type = 'number',
   6708      varname = 'p_pmw',
   6709    },
   6710    {
   6711      abbreviation = 'pw',
   6712      defaults = 15,
   6713      desc = [=[
   6714        Minimum width for the popup menu (|ins-completion-menu|).  If the
   6715        cursor column + 'pumwidth' exceeds screen width, the popup menu is
   6716        nudged to fit on the screen.
   6717      ]=],
   6718      full_name = 'pumwidth',
   6719      scope = { 'global' },
   6720      short_desc = N_('minimum width of the popup menu'),
   6721      type = 'number',
   6722      varname = 'p_pw',
   6723    },
   6724    {
   6725      abbreviation = 'pyx',
   6726      defaults = 3,
   6727      desc = [=[
   6728        Specifies the python version used for pyx* functions and commands
   6729        |python_x|.  As only Python 3 is supported, this always has the value
   6730        `3`. Setting any other value is an error.
   6731 
   6732        This option cannot be set from a |modeline| or in the |sandbox|, for
   6733        security reasons.
   6734      ]=],
   6735      full_name = 'pyxversion',
   6736      scope = { 'global' },
   6737      secure = true,
   6738      short_desc = N_('selects default python version to use'),
   6739      type = 'number',
   6740      varname = 'p_pyx',
   6741    },
   6742    {
   6743      abbreviation = 'qftf',
   6744      cb = 'did_set_quickfixtextfunc',
   6745      defaults = '',
   6746      desc = [=[
   6747        This option specifies a function to be used to get the text to display
   6748        in the quickfix and location list windows.  This can be used to
   6749        customize the information displayed in the quickfix or location window
   6750        for each entry in the corresponding quickfix or location list.  See
   6751        |quickfix-window-function| for an explanation of how to write the
   6752        function and an example.  The value can be the name of a function, a
   6753        |lambda| or a |Funcref|.  See |option-value-function| for more
   6754        information.
   6755 
   6756        It is not allowed to change text or jump to another window while
   6757        evaluating 'qftf' |textlock|.
   6758 
   6759        This option cannot be set from a |modeline| or in the |sandbox|, for
   6760        security reasons.
   6761      ]=],
   6762      full_name = 'quickfixtextfunc',
   6763      func = true,
   6764      scope = { 'global' },
   6765      secure = true,
   6766      short_desc = N_('customize the quickfix window'),
   6767      type = 'string',
   6768      varname = 'p_qftf',
   6769    },
   6770    {
   6771      abbreviation = 'qe',
   6772      defaults = '\\',
   6773      desc = [=[
   6774        The characters that are used to escape quotes in a string.  Used for
   6775        objects like a', a" and a` |a'|.
   6776        When one of the characters in this option is found inside a string,
   6777        the following character will be skipped.  The default value makes the
   6778        text "foo\"bar\\" considered to be one string.
   6779      ]=],
   6780      full_name = 'quoteescape',
   6781      scope = { 'buf' },
   6782      short_desc = N_('escape characters used in a string'),
   6783      type = 'string',
   6784      varname = 'p_qe',
   6785    },
   6786    {
   6787      abbreviation = 'ro',
   6788      cb = 'did_set_readonly',
   6789      defaults = false,
   6790      desc = [=[
   6791        If on, writes fail unless you use a '!'.  Protects you from
   6792        accidentally overwriting a file.  Default on when Vim is started
   6793        in read-only mode ("vim -R") or when the executable is called "view".
   6794        When using ":w!" the 'readonly' option is reset for the current
   6795        buffer, unless the 'Z' flag is in 'cpoptions'.
   6796        When using the ":view" command the 'readonly' option is set for the
   6797        newly edited buffer.
   6798        See 'modifiable' for disallowing changes to the buffer.
   6799      ]=],
   6800      full_name = 'readonly',
   6801      noglob = true,
   6802      redraw = { 'statuslines' },
   6803      scope = { 'buf' },
   6804      short_desc = N_('disallow writing the buffer'),
   6805      type = 'boolean',
   6806      varname = 'p_ro',
   6807    },
   6808    {
   6809      abbreviation = 'rdb',
   6810      defaults = '',
   6811      values = {
   6812        'compositor',
   6813        'nothrottle',
   6814        'invalid',
   6815        'nodelta',
   6816        'line',
   6817        'flush',
   6818      },
   6819      flags = true,
   6820      desc = [=[
   6821        Flags to change the way redrawing works, for debugging purposes.
   6822        Most useful with 'writedelay' set to some reasonable value.
   6823        Supports the following flags:
   6824            compositor	Indicate each redraw event handled by the compositor
   6825        		by briefly flashing the redrawn regions in colors
   6826        		indicating the redraw type. These are the highlight
   6827        		groups used (and their default colors):
   6828        	RedrawDebugNormal   gui=reverse   normal redraw passed through
   6829        	RedrawDebugClear    guibg=Yellow  clear event passed through
   6830        	RedrawDebugComposed guibg=Green   redraw event modified by the
   6831        					  compositor (due to
   6832        					  overlapping grids, etc)
   6833        	RedrawDebugRecompose guibg=Red    redraw generated by the
   6834        					  compositor itself, due to a
   6835        					  grid being moved or deleted.
   6836            line	introduce a delay after each line drawn on the screen.
   6837        		When using the TUI or another single-grid UI, "compositor"
   6838        		gives more information and should be preferred (every
   6839        		line is processed as a separate event by the compositor)
   6840            flush	introduce a delay after each "flush" event.
   6841            nothrottle	Turn off throttling of the message grid. This is an
   6842        		optimization that joins many small scrolls to one
   6843        		larger scroll when drawing the message area (with
   6844        		'display' msgsep flag active).
   6845            invalid	Enable stricter checking (abort) of inconsistencies
   6846        		of the internal screen state. This is mostly
   6847        		useful when running nvim inside a debugger (and
   6848        		the test suite).
   6849            nodelta	Send all internally redrawn cells to the UI, even if
   6850        		they are unchanged from the already displayed state.
   6851      ]=],
   6852      full_name = 'redrawdebug',
   6853      list = 'onecomma',
   6854      scope = { 'global' },
   6855      short_desc = N_('Changes the way redrawing works (debug)'),
   6856      type = 'string',
   6857      varname = 'p_rdb',
   6858      flags_varname = 'rdb_flags',
   6859    },
   6860    {
   6861      abbreviation = 'rdt',
   6862      defaults = 2000,
   6863      desc = [=[
   6864        Time in milliseconds for redrawing the display.  Applies to
   6865        'hlsearch', 'inccommand', |:match| highlighting, syntax highlighting,
   6866        and async |LanguageTree:parse()|.
   6867        When redrawing takes more than this many milliseconds no further
   6868        matches will be highlighted.
   6869        For syntax highlighting the time applies per window.  When over the
   6870        limit syntax highlighting is disabled until |CTRL-L| is used.
   6871        This is used to avoid that Vim hangs when using a very complicated
   6872        pattern.
   6873      ]=],
   6874      full_name = 'redrawtime',
   6875      scope = { 'global' },
   6876      short_desc = N_("timeout for 'hlsearch' and |:match| highlighting"),
   6877      type = 'number',
   6878      varname = 'p_rdt',
   6879    },
   6880    {
   6881      abbreviation = 're',
   6882      defaults = 0,
   6883      desc = [=[
   6884        This selects the default regexp engine. |two-engines|
   6885        The possible values are:
   6886        	0	automatic selection
   6887        	1	old engine
   6888        	2	NFA engine
   6889        Note that when using the NFA engine and the pattern contains something
   6890        that is not supported the pattern will not match.  This is only useful
   6891        for debugging the regexp engine.
   6892        Using automatic selection enables Vim to switch the engine, if the
   6893        default engine becomes too costly.  E.g., when the NFA engine uses too
   6894        many states.  This should prevent Vim from hanging on a combination of
   6895        a complex pattern with long text.
   6896      ]=],
   6897      full_name = 'regexpengine',
   6898      scope = { 'global' },
   6899      short_desc = N_('default regexp engine to use'),
   6900      type = 'number',
   6901      varname = 'p_re',
   6902    },
   6903    {
   6904      abbreviation = 'rnu',
   6905      cb = 'did_set_number_relativenumber',
   6906      defaults = false,
   6907      desc = [=[
   6908        Show the line number relative to the line with the cursor in front of
   6909        each line.  Relative line numbers help you use the |count| you can
   6910        precede some vertical motion commands (e.g. j k + -) with, without
   6911        having to calculate it yourself.  Especially useful in combination
   6912        with other commands (e.g. y d c < > gq gw =).
   6913        When the 'n' option is excluded from 'cpoptions' a wrapped line will
   6914        not use the column of line numbers.
   6915        The 'numberwidth' option can be used to set the room used for the line
   6916        number.
   6917        When a long, wrapped line doesn't start with the first character, '-'
   6918        characters are put before the number.
   6919        See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
   6920        the number.
   6921 
   6922        The number in front of the cursor line also depends on the value of
   6923        'number', see |number_relativenumber| for all combinations of the two
   6924        options.
   6925      ]=],
   6926      full_name = 'relativenumber',
   6927      redraw = { 'current_window' },
   6928      scope = { 'win' },
   6929      short_desc = N_('show relative line number in front of each line'),
   6930      type = 'boolean',
   6931    },
   6932    {
   6933      defaults = true,
   6934      full_name = 'remap',
   6935      scope = { 'global' },
   6936      short_desc = N_('Deprecated'),
   6937      type = 'boolean',
   6938      immutable = true,
   6939    },
   6940    {
   6941      defaults = 2,
   6942      desc = [=[
   6943        Threshold for reporting number of lines changed.  When the number of
   6944        changed lines is more than 'report' a message will be given for most
   6945        ":" commands.  If you want it always, set 'report' to 0.
   6946        For the ":substitute" command the number of substitutions is used
   6947        instead of the number of lines.
   6948      ]=],
   6949      full_name = 'report',
   6950      scope = { 'global' },
   6951      short_desc = N_('for reporting nr. of lines changed'),
   6952      type = 'number',
   6953      varname = 'p_report',
   6954    },
   6955    {
   6956      abbreviation = 'ri',
   6957      defaults = false,
   6958      desc = [=[
   6959        Inserting characters in Insert mode will work backwards.  See "typing
   6960        backwards" |ins-reverse|.  This option can be toggled with the CTRL-_
   6961        command in Insert mode, when 'allowrevins' is set.
   6962      ]=],
   6963      full_name = 'revins',
   6964      scope = { 'global' },
   6965      short_desc = N_('inserting characters will work backwards'),
   6966      type = 'boolean',
   6967      varname = 'p_ri',
   6968    },
   6969    {
   6970      abbreviation = 'rl',
   6971      defaults = false,
   6972      desc = [=[
   6973        When on, display orientation becomes right-to-left, i.e., characters
   6974        that are stored in the file appear from the right to the left.
   6975        Using this option, it is possible to edit files for languages that
   6976        are written from the right to the left such as Hebrew and Arabic.
   6977        This option is per window, so it is possible to edit mixed files
   6978        simultaneously, or to view the same file in both ways (this is
   6979        useful whenever you have a mixed text file with both right-to-left
   6980        and left-to-right strings so that both sets are displayed properly
   6981        in different windows).  Also see |rileft.txt|.
   6982      ]=],
   6983      full_name = 'rightleft',
   6984      redraw = { 'current_window' },
   6985      scope = { 'win' },
   6986      short_desc = N_('window is right-to-left oriented'),
   6987      type = 'boolean',
   6988    },
   6989    {
   6990      abbreviation = 'rlc',
   6991      defaults = 'search',
   6992      values = { 'search' },
   6993      desc = [=[
   6994        Each word in this option enables the command line editing to work in
   6995        right-to-left mode for a group of commands:
   6996 
   6997        	search		"/" and "?" commands
   6998 
   6999        This is useful for languages such as Hebrew, Arabic and Farsi.
   7000        The 'rightleft' option must be set for 'rightleftcmd' to take effect.
   7001      ]=],
   7002      full_name = 'rightleftcmd',
   7003      list = 'comma',
   7004      redraw = { 'current_window' },
   7005      scope = { 'win' },
   7006      short_desc = N_('commands for which editing works right-to-left'),
   7007      type = 'string',
   7008    },
   7009    {
   7010      abbreviation = 'ru',
   7011      defaults = true,
   7012      desc = [=[
   7013        Show the line and column number of the cursor position, separated by a
   7014        comma.  When there is room, the relative position of the displayed
   7015        text in the file is shown on the far right:
   7016        	Top	first line is visible
   7017        	Bot	last line is visible
   7018        	All	first and last line are visible
   7019        	45%	relative position in the file
   7020        If 'rulerformat' is set, it will determine the contents of the ruler.
   7021        Each window has its own ruler.  If a window has a status line, the
   7022        ruler is shown there.  If a window doesn't have a status line and
   7023        'cmdheight' is zero, the ruler is not shown.  Otherwise it is shown in
   7024        the last line of the screen.  If the statusline is given by
   7025        'statusline' (i.e. not empty), this option takes precedence over
   7026        'ruler' and 'rulerformat'.
   7027        If the number of characters displayed is different from the number of
   7028        bytes in the text (e.g., for a TAB or a multibyte character), both
   7029        the text column (byte number) and the screen column are shown,
   7030        separated with a dash.
   7031        For an empty line "0-1" is shown.
   7032        For an empty buffer the line number will also be zero: "0,0-1".
   7033        If you don't want to see the ruler all the time but want to know where
   7034        you are, use "g CTRL-G" |g_CTRL-G|.
   7035      ]=],
   7036      full_name = 'ruler',
   7037      redraw = { 'statuslines' },
   7038      scope = { 'global' },
   7039      short_desc = N_('show cursor line and column in the status line'),
   7040      type = 'boolean',
   7041      varname = 'p_ru',
   7042    },
   7043    {
   7044      abbreviation = 'ruf',
   7045      cb = 'did_set_rulerformat',
   7046      defaults = '',
   7047      desc = [=[
   7048        When this option is not empty, it determines the content of the ruler
   7049        string, as displayed for the 'ruler' option.
   7050        The format of this option is like that of 'statusline'.
   7051        This option cannot be set in a modeline when 'modelineexpr' is off.
   7052 
   7053        The default ruler width is 17 characters.  To make the ruler 15
   7054        characters wide, put "%15(" at the start and "%)" at the end.
   7055        Example: >vim
   7056        	set rulerformat=%15(%c%V\ %p%%%)
   7057        <
   7058      ]=],
   7059      full_name = 'rulerformat',
   7060      modelineexpr = true,
   7061      redraw = { 'statuslines' },
   7062      scope = { 'global' },
   7063      short_desc = N_('custom format for the ruler'),
   7064      type = 'string',
   7065      varname = 'p_ruf',
   7066    },
   7067    {
   7068      abbreviation = 'rtp',
   7069      cb = 'did_set_runtimepackpath',
   7070      defaults = {
   7071        if_true = '',
   7072        doc = [["$XDG_CONFIG_HOME/nvim,
   7073                     $XDG_CONFIG_DIRS[1]/nvim,
   7074                     $XDG_CONFIG_DIRS[2]/nvim,
   7075 
   7076                     $XDG_DATA_HOME/nvim[-data]/site,
   7077                     $XDG_DATA_DIRS[1]/nvim/site,
   7078                     $XDG_DATA_DIRS[2]/nvim/site,
   7079 
   7080                     $VIMRUNTIME,
   7081 
   7082                     $XDG_DATA_DIRS[2]/nvim/site/after,
   7083                     $XDG_DATA_DIRS[1]/nvim/site/after,
   7084                     $XDG_DATA_HOME/nvim[-data]/site/after,
   7085 
   7086                     $XDG_CONFIG_DIRS[2]/nvim/after,
   7087                     $XDG_CONFIG_DIRS[1]/nvim/after,
   7088                     $XDG_CONFIG_HOME/nvim/after"]],
   7089        meta = '...',
   7090      },
   7091      deny_duplicates = true,
   7092      desc = [=[
   7093        List of directories to be searched for these runtime files:
   7094          filetype.lua	filetypes |new-filetype|
   7095          autoload/	automatically loaded scripts |autoload-functions|
   7096          colors/	color scheme files |:colorscheme|
   7097          compiler/	compiler files |:compiler|
   7098          doc/		documentation |write-local-help|
   7099          ftplugin/	filetype plugins |write-filetype-plugin|
   7100          indent/	indent scripts |indent-expression|
   7101          keymap/	key mapping files |mbyte-keymap|
   7102          lang/		menu translations |:menutrans|
   7103          lsp/		LSP client configurations |lsp-config|
   7104          lua/		|Lua| plugins
   7105          menu.vim	GUI menus |menu.vim|
   7106          pack/		packages |:packadd|
   7107          parser/	|treesitter| syntax parsers
   7108          plugin/	plugin scripts |write-plugin|
   7109          queries/	|treesitter| queries
   7110          rplugin/	|remote-plugin| scripts
   7111          spell/	spell checking files |spell|
   7112          syntax/	syntax files |mysyntaxfile|
   7113          tutor/	tutorial files |:Tutor|
   7114 
   7115        And any other file searched for with the |:runtime| command.
   7116 
   7117        Defaults are setup to search these locations:
   7118        1. Your home directory, for personal preferences.
   7119           Given by `stdpath("config")`.  |$XDG_CONFIG_HOME|
   7120        2. Directories which must contain configuration files according to
   7121           |xdg| ($XDG_CONFIG_DIRS, defaults to /etc/xdg).  This also contains
   7122           preferences from system administrator.
   7123        3. Data home directory, for plugins installed by user.
   7124           Given by `stdpath("data")/site`.  |$XDG_DATA_HOME|
   7125        4. nvim/site subdirectories for each directory in $XDG_DATA_DIRS.
   7126           This is for plugins which were installed by system administrator,
   7127           but are not part of the Nvim distribution. XDG_DATA_DIRS defaults
   7128           to /usr/local/share/:/usr/share/, so system administrators are
   7129           expected to install site plugins to /usr/share/nvim/site.
   7130        5. $VIMRUNTIME, for files distributed with Nvim.
   7131        						*after-directory*
   7132        6, 7, 8, 9. In after/ subdirectories of 1, 2, 3 and 4, with reverse
   7133           ordering.  This is for preferences to overrule or add to the
   7134           distributed defaults or system-wide settings (rarely needed).
   7135 
   7136        						*packages-runtimepath*
   7137        "start" packages will also be searched (|runtime-search-path|) for
   7138        runtime files after these, though such packages are not explicitly
   7139        reported in &runtimepath. But "opt" packages are explicitly added to
   7140        &runtimepath by |:packadd|.
   7141 
   7142        Note that, unlike 'path', no wildcards like "**" are allowed.  Normal
   7143        wildcards are allowed, but can significantly slow down searching for
   7144        runtime files.  For speed, use as few items as possible and avoid
   7145        wildcards.
   7146        See |:runtime|.
   7147        Example: >vim
   7148        	set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME
   7149        <	This will use the directory "~/vimruntime" first (containing your
   7150        personal Nvim runtime files), then "/mygroup/vim", and finally
   7151        "$VIMRUNTIME" (the default runtime files).
   7152        You can put a directory before $VIMRUNTIME to find files which replace
   7153        distributed runtime files.  You can put a directory after $VIMRUNTIME
   7154        to find files which add to distributed runtime files.
   7155 
   7156        With |--clean| the home directory entries are not included.
   7157        Environment variables are expanded |:set_env|.
   7158        This option cannot be set from a |modeline| or in the |sandbox|, for
   7159        security reasons.
   7160      ]=],
   7161      expand = 'nodefault',
   7162      full_name = 'runtimepath',
   7163      list = 'onecomma',
   7164      scope = { 'global' },
   7165      secure = true,
   7166      short_desc = N_('list of directories used for runtime files'),
   7167      tags = { 'vimfiles' },
   7168      type = 'string',
   7169      varname = 'p_rtp',
   7170    },
   7171    {
   7172      abbreviation = 'scr',
   7173      defaults = {
   7174        if_true = 0,
   7175        doc = 'half the window height',
   7176      },
   7177      desc = [=[
   7178        Number of lines to scroll with CTRL-U and CTRL-D commands.  Will be
   7179        set to half the number of lines in the window when the window size
   7180        changes.  This may happen when enabling the |status-line| or
   7181        'tabline' option after setting the 'scroll' option.
   7182        If you give a count to the CTRL-U or CTRL-D command it will
   7183        be used as the new value for 'scroll'.  Reset to half the window
   7184        height with ":set scroll=0".
   7185      ]=],
   7186      full_name = 'scroll',
   7187      no_mkrc = true,
   7188      scope = { 'win' },
   7189      short_desc = N_('lines to scroll with CTRL-U and CTRL-D'),
   7190      type = 'number',
   7191    },
   7192    {
   7193      abbreviation = 'scbk',
   7194      cb = 'did_set_scrollback',
   7195      defaults = {
   7196        if_true = -1,
   7197        doc = '10000',
   7198      },
   7199      desc = [=[
   7200        Maximum number of lines kept beyond the visible screen. Lines at the
   7201        top are deleted if new lines exceed this limit.
   7202        Minimum is 1, maximum is 1000000.
   7203        Only in |terminal| buffers.
   7204 
   7205        Note: Lines that are not visible and kept in scrollback are not
   7206        reflown when the terminal buffer is resized horizontally.
   7207      ]=],
   7208      full_name = 'scrollback',
   7209      redraw = { 'current_buffer' },
   7210      scope = { 'buf' },
   7211      short_desc = N_('lines to scroll with CTRL-U and CTRL-D'),
   7212      type = 'number',
   7213      varname = 'p_scbk',
   7214    },
   7215    {
   7216      abbreviation = 'scb',
   7217      cb = 'did_set_scrollbind',
   7218      defaults = false,
   7219      desc = [=[
   7220        See also |scroll-binding|.  When this option is set, scrolling the
   7221        current window also scrolls other scrollbind windows (windows that
   7222        also have this option set).  This option is useful for viewing the
   7223        differences between two versions of a file, see 'diff'.
   7224        See 'scrollopt' for options that determine how this option should be
   7225        interpreted.
   7226        This option is mostly reset when splitting a window to edit another
   7227        file.  This means that ":split | edit file" results in two windows
   7228        with scroll-binding, but ":split file" does not.
   7229      ]=],
   7230      full_name = 'scrollbind',
   7231      scope = { 'win' },
   7232      short_desc = N_('scroll in window as other windows scroll'),
   7233      type = 'boolean',
   7234    },
   7235    {
   7236      abbreviation = 'sj',
   7237      defaults = 1,
   7238      desc = [=[
   7239        Minimal number of lines to scroll when the cursor gets off the
   7240        screen (e.g., with "j").  Not used for scroll commands (e.g., CTRL-E,
   7241        CTRL-D).  Useful if your terminal scrolls very slowly.
   7242        When set to a negative number from -1 to -100 this is used as the
   7243        percentage of the window height.  Thus -50 scrolls half the window
   7244        height.
   7245      ]=],
   7246      full_name = 'scrolljump',
   7247      scope = { 'global' },
   7248      short_desc = N_('minimum number of lines to scroll'),
   7249      type = 'number',
   7250      varname = 'p_sj',
   7251    },
   7252    {
   7253      abbreviation = 'so',
   7254      defaults = 0,
   7255      desc = [=[
   7256        Minimal number of screen lines to keep above and below the cursor.
   7257        This will make some context visible around where you are working.  If
   7258        you set it to a very large value (999) the cursor line will always be
   7259        in the middle of the window (except at the start or end of the file or
   7260        when long lines wrap).
   7261        After using the local value, go back the global value with one of
   7262        these two: >vim
   7263        	setlocal scrolloff<
   7264        	setlocal scrolloff=-1
   7265        <	For scrolling horizontally see 'sidescrolloff'.
   7266      ]=],
   7267      full_name = 'scrolloff',
   7268      scope = { 'global', 'win' },
   7269      short_desc = N_('minimum nr. of lines above and below cursor'),
   7270      type = 'number',
   7271      varname = 'p_so',
   7272    },
   7273    {
   7274      abbreviation = 'sbo',
   7275      defaults = 'ver,jump',
   7276      values = { 'ver', 'hor', 'jump' },
   7277      deny_duplicates = true,
   7278      desc = [=[
   7279        This is a comma-separated list of words that specifies how
   7280        'scrollbind' windows should behave.  'sbo' stands for ScrollBind
   7281        Options.
   7282        The following words are available:
   7283            ver		Bind vertical scrolling for 'scrollbind' windows
   7284            hor		Bind horizontal scrolling for 'scrollbind' windows
   7285            jump	Applies to the offset between two windows for vertical
   7286        		scrolling.  This offset is the difference in the first
   7287        		displayed line of the bound windows.  When moving
   7288        		around in a window, another 'scrollbind' window may
   7289        		reach a position before the start or after the end of
   7290        		the buffer.  The offset is not changed though, when
   7291        		moving back the 'scrollbind' window will try to scroll
   7292        		to the desired position when possible.
   7293        		When now making that window the current one, two
   7294        		things can be done with the relative offset:
   7295        		1. When "jump" is not included, the relative offset is
   7296        		   adjusted for the scroll position in the new current
   7297        		   window.  When going back to the other window, the
   7298        		   new relative offset will be used.
   7299        		2. When "jump" is included, the other windows are
   7300        		   scrolled to keep the same relative offset.  When
   7301        		   going back to the other window, it still uses the
   7302        		   same relative offset.
   7303        Also see |scroll-binding|.
   7304        When 'diff' mode is active there always is vertical scroll binding,
   7305        even when "ver" isn't there.
   7306      ]=],
   7307      full_name = 'scrollopt',
   7308      list = 'onecomma',
   7309      scope = { 'global' },
   7310      short_desc = N_("how 'scrollbind' should behave"),
   7311      type = 'string',
   7312      varname = 'p_sbo',
   7313    },
   7314    {
   7315      abbreviation = 'sect',
   7316      defaults = 'SHNHH HUnhsh',
   7317      desc = [=[
   7318        Specifies the nroff macros that separate sections.  These are pairs of
   7319        two letters (See |object-motions|).  The default makes a section start
   7320        at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
   7321      ]=],
   7322      full_name = 'sections',
   7323      scope = { 'global' },
   7324      short_desc = N_('nroff macros that separate sections'),
   7325      type = 'string',
   7326      varname = 'p_sections',
   7327    },
   7328    {
   7329      defaults = false,
   7330      full_name = 'secure',
   7331      scope = { 'global' },
   7332      secure = true,
   7333      short_desc = N_('Deprecated'),
   7334      type = 'boolean',
   7335      varname = 'p_secure',
   7336    },
   7337    {
   7338      abbreviation = 'sel',
   7339      cb = 'did_set_selection',
   7340      defaults = 'inclusive',
   7341      values = { 'inclusive', 'exclusive', 'old' },
   7342      desc = [=[
   7343        This option defines the behavior of the selection.  It is only used
   7344        in Visual and Select mode.
   7345        Possible values:
   7346           value	past line     inclusive ~
   7347           old		   no		yes
   7348           inclusive	   yes		yes
   7349           exclusive	   yes		no
   7350        "past line" means that the cursor is allowed to be positioned one
   7351        character past the line.
   7352        "inclusive" means that the last character of the selection is included
   7353        in an operation.  For example, when "x" is used to delete the
   7354        selection.
   7355        When "old" is used and 'virtualedit' allows the cursor to move past
   7356        the end of line the line break still isn't included.
   7357        When "exclusive" is used, cursor position in visual mode will be
   7358        adjusted for inclusive motions |inclusive-motion-selection-exclusive|.
   7359 
   7360        Note:
   7361        - When "exclusive" is used and selecting from the end backwards, you
   7362          cannot include the last character of a line, when starting in Normal
   7363          mode and 'virtualedit' empty.
   7364        - when "exclusive" is used with a single character visual selection,
   7365          Vim will behave as if the 'selection' is inclusive (in other words,
   7366          you cannot visually select an empty region).
   7367      ]=],
   7368      full_name = 'selection',
   7369      scope = { 'global' },
   7370      short_desc = N_('what type of selection to use'),
   7371      type = 'string',
   7372      varname = 'p_sel',
   7373    },
   7374    {
   7375      abbreviation = 'slm',
   7376      defaults = '',
   7377      values = { 'mouse', 'key', 'cmd' },
   7378      deny_duplicates = true,
   7379      desc = [=[
   7380        This is a comma-separated list of words, which specifies when to start
   7381        Select mode instead of Visual mode, when a selection is started.
   7382        Possible values:
   7383           mouse	when using the mouse
   7384           key		when using shifted special keys
   7385           cmd		when using "v", "V" or CTRL-V
   7386        See |Select-mode|.
   7387      ]=],
   7388      full_name = 'selectmode',
   7389      list = 'onecomma',
   7390      scope = { 'global' },
   7391      short_desc = N_('when to use Select mode instead of Visual mode'),
   7392      type = 'string',
   7393      varname = 'p_slm',
   7394    },
   7395    {
   7396      abbreviation = 'ssop',
   7397      cb = 'did_set_sessionoptions',
   7398      defaults = 'blank,buffers,curdir,folds,help,tabpages,winsize,terminal',
   7399      -- Also used for 'viewoptions'.
   7400      values = {
   7401        'buffers',
   7402        'winpos',
   7403        'resize',
   7404        'winsize',
   7405        'localoptions',
   7406        'options',
   7407        'help',
   7408        'blank',
   7409        'globals',
   7410        'slash',
   7411        'unix',
   7412        'sesdir',
   7413        'curdir',
   7414        'folds',
   7415        'cursor',
   7416        'tabpages',
   7417        'terminal',
   7418        'skiprtp',
   7419      },
   7420      flags = true,
   7421      deny_duplicates = true,
   7422      desc = [=[
   7423        Changes the effect of the |:mksession| command.  It is a comma-
   7424        separated list of words.  Each word enables saving and restoring
   7425        something:
   7426           word		save and restore ~
   7427           blank	empty windows
   7428           buffers	hidden and unloaded buffers, not just those in windows
   7429           curdir	the current directory
   7430           folds	manually created folds, opened/closed folds and local
   7431        		fold options
   7432           globals	global variables that start with an uppercase letter
   7433        		and contain at least one lowercase letter.  Only
   7434        		String and Number types are stored.
   7435           help		the help window
   7436           localoptions	options and mappings local to a window or buffer (not
   7437        		global values for local options)
   7438           options	all options and mappings (also global values for local
   7439        		options)
   7440           skiprtp	exclude 'runtimepath' and 'packpath' from the options
   7441           resize	size of the Vim window: 'lines' and 'columns'
   7442           sesdir	the directory in which the session file is located
   7443        		will become the current directory (useful with
   7444        		projects accessed over a network from different
   7445        		systems)
   7446           tabpages	all tab pages; without this only the current tab page
   7447        		is restored, so that you can make a session for each
   7448        		tab page separately
   7449           terminal	include terminal windows where the command can be
   7450        		restored
   7451           winpos	position of the whole Vim window
   7452           winsize	window sizes
   7453           slash	|deprecated| Always enabled. Uses "/" in filenames.
   7454           unix		|deprecated| Always enabled. Uses "\n" line endings.
   7455 
   7456        Don't include both "curdir" and "sesdir". When neither is included
   7457        filenames are stored as absolute paths.
   7458        If you leave out "options" many things won't work well after restoring
   7459        the session.
   7460      ]=],
   7461      full_name = 'sessionoptions',
   7462      list = 'onecomma',
   7463      scope = { 'global' },
   7464      short_desc = N_('options for |:mksession|'),
   7465      type = 'string',
   7466      varname = 'p_ssop',
   7467      flags_varname = 'ssop_flags',
   7468    },
   7469    {
   7470      abbreviation = 'sd',
   7471      alias = { 'vi', 'viminfo' },
   7472      cb = 'did_set_shada',
   7473      defaults = "!,'100,<50,s10,h,r/tmp/,r/private/",
   7474      deny_duplicates = true,
   7475      desc = [=[
   7476        When non-empty, the shada file is read upon startup and written
   7477        when exiting Vim (see |shada-file|).  The string should be a comma-
   7478        separated list of parameters, each consisting of a single character
   7479        identifying the particular parameter, followed by a number or string
   7480        which specifies the value of that parameter.  If a particular
   7481        character is left out, then the default value is used for that
   7482        parameter.  The following is a list of the identifying characters and
   7483        the effect of their value.
   7484        CHAR	VALUE	~
   7485        						*shada-!*
   7486        !	When included, save and restore global variables that start
   7487        	with an uppercase letter, and don't contain a lowercase
   7488        	letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
   7489        	and "_K_L_M" are not.  Nested List and Dict items may not be
   7490        	read back correctly, you end up with an empty item.
   7491        						*shada-quote*
   7492        "	Maximum number of lines saved for each register.  Old name of
   7493        	the '<' item, with the disadvantage that you need to put a
   7494        	backslash before the ", otherwise it will be recognized as the
   7495        	start of a comment!
   7496        						*shada-%*
   7497        %	When included, save and restore the buffer list.  If Vim is
   7498        	started with a file name argument, the buffer list is not
   7499        	restored.  If Vim is started without a file name argument, the
   7500        	buffer list is restored from the shada file.  Quickfix
   7501        	('buftype'), unlisted ('buflisted'), unnamed and buffers on
   7502        	removable media (|shada-r|) are not saved.
   7503        	When followed by a number, the number specifies the maximum
   7504        	number of buffers that are stored.  Without a number all
   7505        	buffers are stored.
   7506        						*shada-'*
   7507        '	Maximum number of previously edited files for which the marks
   7508        	are remembered.  This parameter must always be included when
   7509        	'shada' is non-empty.
   7510        	If non-zero, then the |jumplist| and the |changelist| are also
   7511        	stored in the shada file.
   7512        						*shada-/*
   7513        /	Maximum number of items in the search pattern history to be
   7514        	saved.  If non-zero, then the previous search and substitute
   7515        	patterns are also saved.  When not included, the value of
   7516        	'history' is used.
   7517        						*shada-:*
   7518        :	Maximum number of items in the command-line history to be
   7519        	saved.  When not included, the value of 'history' is used.
   7520        						*shada-<*
   7521        \<	Maximum number of lines saved for each register.  If zero then
   7522        	registers are not saved.  When not included, all lines are
   7523        	saved.  '"' is the old name for this item.
   7524        	Also see the 's' item below: limit specified in KiB.
   7525        						*shada-@*
   7526        @	Maximum number of items in the input-line history to be
   7527        	saved.  When not included, the value of 'history' is used.
   7528        						*shada-c*
   7529        c	Dummy option, kept for compatibility reasons.  Has no actual
   7530        	effect: ShaDa always uses UTF-8 and 'encoding' value is fixed
   7531        	to UTF-8 as well.
   7532        						*shada-f*
   7533        f	Whether file marks need to be stored.  If zero, file marks ('0
   7534        	to '9, 'A to 'Z) are not stored.  When not present or when
   7535        	non-zero, they are all stored.  '0 is used for the current
   7536        	cursor position (when exiting or when doing |:wshada|).
   7537        						*shada-h*
   7538        h	Disable the effect of 'hlsearch' when loading the shada
   7539        	file.  When not included, it depends on whether ":nohlsearch"
   7540        	has been used since the last search command.
   7541        						*shada-n*
   7542        n	Name of the shada file.  The name must immediately follow
   7543        	the 'n'.  Must be at the end of the option!  If the
   7544        	'shadafile' option is set, that file name overrides the one
   7545        	given here with 'shada'.  Environment variables are
   7546        	expanded when opening the file, not when setting the option.
   7547        						*shada-r*
   7548        r	Removable media.  The argument is a string (up to the next
   7549        	',').  This parameter can be given several times.  Each
   7550        	specifies the start of a path for which no marks will be
   7551        	stored.  This is to avoid removable media.  For Windows you
   7552        	could use "ra:,rb:".  You can also use it for temp files,
   7553        	e.g., for Unix: "r/tmp".  Case is ignored.
   7554        						*shada-s*
   7555        s	Maximum size of an item contents in KiB.  If zero then nothing
   7556        	is saved.  Unlike Vim this applies to all items, except for
   7557        	the buffer list and header.  Full item size is off by three
   7558        	unsigned integers: with `s10` maximum item size may be 1 byte
   7559        	(type: 7-bit integer) + 9 bytes (timestamp: up to 64-bit
   7560        	integer) + 3 bytes (item size: up to 16-bit integer because
   7561        	2^8 < 10240 < 2^16) + 10240 bytes (requested maximum item
   7562        	contents size) = 10253 bytes.
   7563 
   7564        Example: >vim
   7565            set shada='50,<1000,s100,:0,n~/nvim/shada
   7566        <
   7567        '50		Marks will be remembered for the last 50 files you
   7568        		edited.
   7569        <1000		Contents of registers (up to 1000 lines each) will be
   7570        		remembered.
   7571        s100		Items with contents occupying more then 100 KiB are
   7572        		skipped.
   7573        :0		Command-line history will not be saved.
   7574        n~/nvim/shada	The name of the file to use is "~/nvim/shada".
   7575        no /		Since '/' is not specified, the default will be used,
   7576        		that is, save all of the search history, and also the
   7577        		previous search and substitute patterns.
   7578        no %		The buffer list will not be saved nor read back.
   7579        no h		'hlsearch' highlighting will be restored.
   7580 
   7581        When setting 'shada' from an empty value you can use |:rshada| to
   7582        load the contents of the file, this is not done automatically.
   7583 
   7584        This option cannot be set from a |modeline| or in the |sandbox|, for
   7585        security reasons.
   7586      ]=],
   7587      full_name = 'shada',
   7588      list = 'onecomma',
   7589      scope = { 'global' },
   7590      secure = true,
   7591      short_desc = N_('use .shada file upon startup and exiting'),
   7592      tags = { 'E526', 'E527', 'E528' },
   7593      type = 'string',
   7594      varname = 'p_shada',
   7595    },
   7596    {
   7597      abbreviation = 'sdf',
   7598      alias = { 'vif', 'viminfofile' },
   7599      defaults = '',
   7600      deny_duplicates = true,
   7601      desc = [=[
   7602        When non-empty, overrides the file name used for |shada| (viminfo).
   7603        When equal to "NONE" no shada file will be read or written.
   7604        This option can be set with the |-i| command line flag.  The |--clean|
   7605        command line flag sets it to "NONE".
   7606        Environment variables are expanded |:set_env|.
   7607        This option cannot be set from a |modeline| or in the |sandbox|, for
   7608        security reasons.
   7609      ]=],
   7610      expand = true,
   7611      full_name = 'shadafile',
   7612      list = 'onecomma',
   7613      scope = { 'global' },
   7614      secure = true,
   7615      short_desc = N_('overrides the filename used for shada'),
   7616      type = 'string',
   7617      varname = 'p_shadafile',
   7618    },
   7619    {
   7620      abbreviation = 'sh',
   7621      defaults = {
   7622        condition = 'MSWIN',
   7623        if_false = 'sh',
   7624        if_true = 'cmd.exe',
   7625        doc = '$SHELL or "sh", Win32: "cmd.exe"',
   7626        meta = 'sh',
   7627      },
   7628      desc = [=[
   7629        Name of the shell to use for ! and :! commands.  When changing the
   7630        value also check these options: 'shellpipe', 'shellslash'
   7631        'shellredir', 'shellquote', 'shellxquote' and 'shellcmdflag'.
   7632        It is allowed to give an argument to the command, e.g.  "csh -f".
   7633        See |option-backslash| about including spaces and backslashes.
   7634        Environment variables are expanded |:set_env|.
   7635 
   7636        If the name of the shell contains a space, you need to enclose it in
   7637        quotes.  Example with quotes: >vim
   7638        	set shell=\"c:\program\ files\unix\sh.exe\"\ -f
   7639        <	Note the backslash before each quote (to avoid starting a comment) and
   7640        each space (to avoid ending the option value), so better use |:let-&|
   7641        like this: >vim
   7642        	let &shell='"C:\Program Files\unix\sh.exe" -f'
   7643        <	Also note that the "-f" is not inside the quotes, because it is not
   7644        part of the command name.
   7645        						*shell-unquoting*
   7646        Rules regarding quotes:
   7647        1. Option is split on space and tab characters that are not inside
   7648           quotes: "abc def" runs shell named "abc" with additional argument
   7649           "def", '"abc def"' runs shell named "abc def" with no additional
   7650           arguments (here and below: additional means “additional to
   7651           'shellcmdflag'”).
   7652        2. Quotes in option may be present in any position and any number:
   7653           '"abc"', '"a"bc', 'a"b"c', 'ab"c"' and '"a"b"c"' are all equivalent
   7654           to just "abc".
   7655        3. Inside quotes backslash preceding backslash means one backslash.
   7656           Backslash preceding quote means one quote. Backslash preceding
   7657           anything else means backslash and next character literally:
   7658           '"a\\b"' is the same as "a\b", '"a\\"b"' runs shell named literally
   7659           'a"b', '"a\b"' is the same as "a\b" again.
   7660        4. Outside of quotes backslash always means itself, it cannot be used
   7661           to escape quote: 'a\"b"' is the same as "a\b".
   7662        Note that such processing is done after |:set| did its own round of
   7663        unescaping, so to keep yourself sane use |:let-&| like shown above.
   7664        						*shell-powershell*
   7665        To use PowerShell: >vim
   7666           set noshelltemp
   7667           let &shell = 'powershell'
   7668           let &shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command '
   7669           let &shellcmdflag .= '[Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();'
   7670           let &shellcmdflag .= '$PSDefaultParameterValues[''Out-File:Encoding'']=''utf8'';'
   7671           let &shellpipe  = '> %s 2>&1'
   7672           set shellquote= shellxquote=
   7673        <
   7674        						*shell-pwsh*
   7675        To use pwsh, use the above settings with `let &shell = 'pwsh'`, and
   7676        add: >vim
   7677           let &shellcmdflag .= '$PSStyle.OutputRendering = ''PlainText'';'
   7678           " Workaround (may not be needed in future version of pwsh):
   7679           let $__SuppressAnsiEscapeSequences = 1
   7680        <
   7681        This option cannot be set from a |modeline| or in the |sandbox|, for
   7682        security reasons.
   7683      ]=],
   7684      expand = true,
   7685      full_name = 'shell',
   7686      scope = { 'global' },
   7687      secure = true,
   7688      short_desc = N_('name of shell to use for external commands'),
   7689      tags = { 'E91' },
   7690      type = 'string',
   7691      varname = 'p_sh',
   7692    },
   7693    {
   7694      abbreviation = 'shcf',
   7695      defaults = {
   7696        condition = 'MSWIN',
   7697        if_false = '-c',
   7698        if_true = '/s /c',
   7699        doc = '"-c"; Windows: "/s /c"',
   7700      },
   7701      desc = [=[
   7702        Flag passed to the shell to execute "!" and ":!" commands; e.g.,
   7703        `bash.exe -c ls` or `cmd.exe /s /c "dir"`.  For MS-Windows, the
   7704        default is set according to the value of 'shell', to reduce the need
   7705        to set this option by the user.
   7706        On Unix it can have more than one flag.  Each white space separated
   7707        part is passed as an argument to the shell command.
   7708        See |option-backslash| about including spaces and backslashes.
   7709        See |shell-unquoting| which talks about separating this option into
   7710        multiple arguments.
   7711        This option cannot be set from a |modeline| or in the |sandbox|, for
   7712        security reasons.
   7713      ]=],
   7714      full_name = 'shellcmdflag',
   7715      scope = { 'global' },
   7716      secure = true,
   7717      short_desc = N_('flag to shell to execute one command'),
   7718      type = 'string',
   7719      varname = 'p_shcf',
   7720    },
   7721    {
   7722      abbreviation = 'sp',
   7723      defaults = {
   7724        condition = 'MSWIN',
   7725        if_false = '| tee',
   7726        if_true = '2>&1| tee',
   7727        doc = '">", "| tee", "|& tee" or "2>&1| tee"',
   7728      },
   7729      desc = [=[
   7730        String to be used to put the output of the ":make" command in the
   7731        error file.  See also |:make_makeprg|.  See |option-backslash| about
   7732        including spaces and backslashes.
   7733        The name of the temporary file can be represented by "%s" if necessary
   7734        (the file name is appended automatically if no %s appears in the value
   7735        of this option).
   7736        For MS-Windows the default is "2>&1| tee".  The stdout and stderr are
   7737        saved in a file and echoed to the screen.
   7738        For Unix the default is "| tee".  The stdout of the compiler is saved
   7739        in a file and echoed to the screen.  If the 'shell' option is "csh" or
   7740        "tcsh" after initializations, the default becomes "|& tee".  If the
   7741        'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
   7742        "bash", "fish", "ash" or "dash" the default becomes "2>&1| tee".  This
   7743        means that stderr is also included.  Before using the 'shell' option a
   7744        path is removed, thus "/bin/sh" uses "sh".
   7745        The initialization of this option is done after reading the vimrc
   7746        and the other initializations, so that when the 'shell' option is set
   7747        there, the 'shellpipe' option changes automatically, unless it was
   7748        explicitly set before.
   7749        When 'shellpipe' is set to an empty string, no redirection of the
   7750        ":make" output will be done.  This is useful if you use a 'makeprg'
   7751        that writes to 'makeef' by itself.  If you want no piping, but do
   7752        want to include the 'makeef', set 'shellpipe' to a single space.
   7753        Don't forget to precede the space with a backslash: ":set sp=\ ".
   7754        In the future pipes may be used for filtering and this option will
   7755        become obsolete (at least for Unix).
   7756        Note: When using a pipe like "| tee", you'll lose the exit code of the
   7757        shell command.  This might be configurable by your shell, look for
   7758        the pipefail option (for bash and zsh, use ":set -o pipefail").
   7759        This option cannot be set from a |modeline| or in the |sandbox|, for
   7760        security reasons.
   7761      ]=],
   7762      full_name = 'shellpipe',
   7763      scope = { 'global' },
   7764      secure = true,
   7765      short_desc = N_('string to put output of ":make" in error file'),
   7766      type = 'string',
   7767      varname = 'p_sp',
   7768    },
   7769    {
   7770      abbreviation = 'shq',
   7771      defaults = {
   7772        if_true = '',
   7773        doc = [[""; Windows, when 'shell'
   7774               contains "sh" somewhere: "\""]],
   7775      },
   7776      desc = [=[
   7777        Quoting character(s), put around the command passed to the shell, for
   7778        the "!" and ":!" commands.  The redirection is kept outside of the
   7779        quoting.  See 'shellxquote' to include the redirection.  It's
   7780        probably not useful to set both options.
   7781        This is an empty string by default.  Only known to be useful for
   7782        third-party shells on Windows systems, such as the MKS Korn Shell
   7783        or bash, where it should be "\"".  The default is adjusted according
   7784        the value of 'shell', to reduce the need to set this option by the
   7785        user.
   7786        This option cannot be set from a |modeline| or in the |sandbox|, for
   7787        security reasons.
   7788      ]=],
   7789      full_name = 'shellquote',
   7790      scope = { 'global' },
   7791      secure = true,
   7792      short_desc = N_('quote character(s) for around shell command'),
   7793      type = 'string',
   7794      varname = 'p_shq',
   7795    },
   7796    {
   7797      abbreviation = 'srr',
   7798      defaults = {
   7799        condition = 'MSWIN',
   7800        if_false = '>',
   7801        if_true = '>%s 2>&1',
   7802        doc = '">", ">&" or ">%s 2>&1"',
   7803      },
   7804      desc = [=[
   7805        String to be used to put the output of a filter command in a temporary
   7806        file.  See also |:!|.  See |option-backslash| about including spaces
   7807        and backslashes.
   7808        The name of the temporary file can be represented by "%s" if necessary
   7809        (the file name is appended automatically if no %s appears in the value
   7810        of this option).
   7811        The default is ">".  For Unix, if the 'shell' option is "csh" or
   7812        "tcsh" during initializations, the default becomes ">&".  If the
   7813        'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
   7814        "bash" or "fish", the default becomes ">%s 2>&1".  This means that
   7815        stderr is also included.  For Win32, the Unix checks are done and
   7816        additionally "cmd" is checked for, which makes the default ">%s 2>&1".
   7817        Also, the same names with ".exe" appended are checked for.
   7818        The initialization of this option is done after reading the vimrc
   7819        and the other initializations, so that when the 'shell' option is set
   7820        there, the 'shellredir' option changes automatically unless it was
   7821        explicitly set before.
   7822        In the future pipes may be used for filtering and this option will
   7823        become obsolete (at least for Unix).
   7824        This option cannot be set from a |modeline| or in the |sandbox|, for
   7825        security reasons.
   7826      ]=],
   7827      full_name = 'shellredir',
   7828      scope = { 'global' },
   7829      secure = true,
   7830      short_desc = N_('string to put output of filter in a temp file'),
   7831      type = 'string',
   7832      varname = 'p_srr',
   7833    },
   7834    {
   7835      abbreviation = 'ssl',
   7836      cb = 'did_set_shellslash',
   7837      defaults = {
   7838        condition = 'MSWIN',
   7839        if_true = false,
   7840        if_false = true,
   7841        doc = 'on, Windows: off',
   7842      },
   7843      desc = [=[
   7844        		only modifiable in MS-Windows
   7845        When set, a forward slash is used when expanding file names.  This is
   7846        useful when a Unix-like shell is used instead of cmd.exe.  Backward
   7847        slashes can still be typed, but they are changed to forward slashes by
   7848        Vim.
   7849        Note that setting or resetting this option has no effect for some
   7850        existing file names, thus this option needs to be set before opening
   7851        any file for best results.  This might change in the future.
   7852        'shellslash' only works when a backslash can be used as a path
   7853        separator.  To test if this is so use: >vim
   7854        	if exists('+shellslash')
   7855        <	Also see 'completeslash'.
   7856      ]=],
   7857      enable_if = 'BACKSLASH_IN_FILENAME',
   7858      full_name = 'shellslash',
   7859      scope = { 'global' },
   7860      short_desc = N_('use forward slash for shell file names'),
   7861      type = 'boolean',
   7862      varname = 'p_ssl',
   7863    },
   7864    {
   7865      abbreviation = 'stmp',
   7866      defaults = false,
   7867      desc = [=[
   7868        When on, use temp files for shell commands.  When off use a pipe.
   7869        When using a pipe is not possible temp files are used anyway.
   7870        The advantage of using a pipe is that nobody can read the temp file
   7871        and the 'shell' command does not need to support redirection.
   7872        The advantage of using a temp file is that the file type and encoding
   7873        can be detected.
   7874        The |FilterReadPre|, |FilterReadPost| and |FilterWritePre|,
   7875        |FilterWritePost| autocommands event are not triggered when
   7876        'shelltemp' is off.
   7877        |system()| does not respect this option, it always uses pipes.
   7878      ]=],
   7879      full_name = 'shelltemp',
   7880      scope = { 'global' },
   7881      short_desc = N_('whether to use a temp file for shell commands'),
   7882      type = 'boolean',
   7883      varname = 'p_stmp',
   7884    },
   7885    {
   7886      abbreviation = 'sxe',
   7887      defaults = '',
   7888      desc = [=[
   7889        When 'shellxquote' is set to "(" then the characters listed in this
   7890        option will be escaped with a '^' character.  This makes it possible
   7891        to execute most external commands with cmd.exe.
   7892        This option cannot be set from a |modeline| or in the |sandbox|, for
   7893        security reasons.
   7894      ]=],
   7895      full_name = 'shellxescape',
   7896      scope = { 'global' },
   7897      secure = true,
   7898      short_desc = N_("characters to escape when 'shellxquote' is ("),
   7899      type = 'string',
   7900      varname = 'p_sxe',
   7901    },
   7902    {
   7903      abbreviation = 'sxq',
   7904      defaults = {
   7905        condition = 'MSWIN',
   7906        if_false = '',
   7907        if_true = '"',
   7908        doc = '"", Windows: "\\""',
   7909      },
   7910      desc = [=[
   7911        Quoting character(s), put around the command passed to the shell, for
   7912        the "!" and ":!" commands.  Includes the redirection.  See
   7913        'shellquote' to exclude the redirection.  It's probably not useful
   7914        to set both options.
   7915        When the value is '(' then ')' is appended.  When the value is '"('
   7916        then ')"' is appended.
   7917        When the value is '(' then also see 'shellxescape'.
   7918        This option cannot be set from a |modeline| or in the |sandbox|, for
   7919        security reasons.
   7920      ]=],
   7921      full_name = 'shellxquote',
   7922      scope = { 'global' },
   7923      secure = true,
   7924      short_desc = N_("like 'shellquote', but include redirection"),
   7925      type = 'string',
   7926      varname = 'p_sxq',
   7927    },
   7928    {
   7929      abbreviation = 'sr',
   7930      defaults = false,
   7931      desc = [=[
   7932        Round indent to multiple of 'shiftwidth'.  Applies to > and <
   7933        commands.  CTRL-T and CTRL-D in Insert mode always round the indent to
   7934        a multiple of 'shiftwidth' (this is Vi compatible).
   7935      ]=],
   7936      full_name = 'shiftround',
   7937      scope = { 'global' },
   7938      short_desc = N_('round indent to multiple of shiftwidth'),
   7939      type = 'boolean',
   7940      varname = 'p_sr',
   7941    },
   7942    {
   7943      abbreviation = 'sw',
   7944      cb = 'did_set_shiftwidth_tabstop',
   7945      defaults = 8,
   7946      desc = [=[
   7947        Number of columns that make up one level of (auto)indentation.  Used
   7948        by 'cindent', |<<|, |>>|, etc.
   7949        If set to 0, Vim uses the current 'tabstop' value.  Use |shiftwidth()|
   7950        to obtain the effective value in scripts.
   7951      ]=],
   7952      full_name = 'shiftwidth',
   7953      scope = { 'buf' },
   7954      short_desc = N_('number of spaces to use for (auto)indent step'),
   7955      type = 'number',
   7956      varname = 'p_sw',
   7957    },
   7958    {
   7959      abbreviation = 'shm',
   7960      cb = 'did_set_shortmess',
   7961      defaults = 'ltToOCF',
   7962      desc = [=[
   7963        This option helps to avoid all the |hit-enter| prompts caused by file
   7964        messages, for example with CTRL-G, and to avoid some other messages.
   7965        It is a list of flags:
   7966         flag	meaning when present	~
   7967          l	use "999L, 888B" instead of "999 lines, 888 bytes"	*shm-l*
   7968          m	use "[+]" instead of "[Modified]"			*shm-m*
   7969          r	use "[RO]" instead of "[readonly]"			*shm-r*
   7970          w	use "[w]" instead of "written" for file write message	*shm-w*
   7971        	and "[a]" instead of "appended" for ':w >> file' command
   7972          a	all of the above abbreviations				*shm-a*
   7973 
   7974          o	overwrite message for writing a file with subsequent	*shm-o*
   7975        	message for reading a file (useful for ":wn" or when
   7976        	'autowrite' on)
   7977          O	message for reading a file overwrites any previous	*shm-O*
   7978        	message;  also for quickfix message (e.g., ":cn")
   7979          s	don't give "search hit BOTTOM, continuing at TOP" or	*shm-s*
   7980        	"search hit TOP, continuing at BOTTOM" messages; when using
   7981        	the search count do not show "W" before the count message
   7982        	(see |shm-S| below)
   7983          t	truncate file message at the start if it is too long	*shm-t*
   7984        	to fit on the command-line, "<" will appear in the left most
   7985        	column; ignored in Ex mode
   7986          T	truncate other messages in the middle if they are too	*shm-T*
   7987        	long to fit on the command line; "..." will appear in the
   7988        	middle; ignored in Ex mode
   7989          W	don't give "written" or "[w]" when writing a file	*shm-W*
   7990          A	don't give the "ATTENTION" message when an existing	*shm-A*
   7991        	swap file is found
   7992          I	don't give the intro message when starting Vim,		*shm-I*
   7993        	see |:intro|
   7994          c	don't give |ins-completion-menu| messages; for		*shm-c*
   7995        	example, "-- XXX completion (YYY)", "match 1 of 2", "The only
   7996        	match", "Pattern not found", "Back at original", etc.
   7997          C	don't give messages while scanning for ins-completion	*shm-C*
   7998        	items, for instance "scanning tags"
   7999          q	do not show "recording @a" when recording a macro	*shm-q*
   8000          F	don't give the file info when editing a file, like	*shm-F*
   8001        	`:silent` was used for the command; note that this also
   8002        	affects messages from 'autoread' reloading
   8003          S	do not show search count message when searching, e.g.	*shm-S*
   8004        	"[1/5]".  When the "S" flag is not present (e.g. search count
   8005        	is shown), the "search hit BOTTOM, continuing at TOP" and
   8006        	"search hit TOP, continuing at BOTTOM" messages are only
   8007        	indicated by a "W" (Mnemonic: Wrapped) letter before the
   8008        	search count statistics.  The maximum limit can be set with
   8009        	the 'maxsearchcount' option, see also |searchcount()|
   8010        	function.
   8011 
   8012        This gives you the opportunity to avoid that a change between buffers
   8013        requires you to hit <Enter>, but still gives as useful a message as
   8014        possible for the space available.  To get the whole message that you
   8015        would have got with 'shm' empty, use ":file!"
   8016        Useful values:
   8017            shm=	No abbreviation of message.
   8018            shm=a	Abbreviation, but no loss of information.
   8019            shm=at	Abbreviation, and truncate message when necessary.
   8020      ]=],
   8021      expand_cb = 'expand_set_shortmess',
   8022      full_name = 'shortmess',
   8023      list = 'flags',
   8024      scope = { 'global' },
   8025      short_desc = N_('list of flags, reduce length of messages'),
   8026      tags = { 'E1336' },
   8027      type = 'string',
   8028      varname = 'p_shm',
   8029    },
   8030    {
   8031      abbreviation = 'sbr',
   8032      cb = 'did_set_showbreak',
   8033      defaults = '',
   8034      desc = [=[
   8035        String to put at the start of lines that have been wrapped.  Useful
   8036        values are "> " or "+++ ": >vim
   8037        	let &showbreak = "> "
   8038        	let &showbreak = '+++ '
   8039        <	Only printable single-cell characters are allowed, excluding <Tab> and
   8040        comma (in a future version the comma might be used to separate the
   8041        part that is shown at the end and at the start of a line).
   8042        The |hl-NonText| highlight group determines the highlighting.
   8043        Note that tabs after the showbreak will be displayed differently.
   8044        If you want the 'showbreak' to appear in between line numbers, add the
   8045        "n" flag to 'cpoptions'.
   8046        A window-local value overrules a global value.  If the global value is
   8047        set and you want no value in the current window use NONE: >vim
   8048        	setlocal showbreak=NONE
   8049        <
   8050      ]=],
   8051      full_name = 'showbreak',
   8052      redraw = { 'all_windows' },
   8053      scope = { 'global', 'win' },
   8054      short_desc = N_('string to use at the start of wrapped lines'),
   8055      tags = { 'E595' },
   8056      type = 'string',
   8057      varname = 'p_sbr',
   8058    },
   8059    {
   8060      abbreviation = 'sc',
   8061      defaults = true,
   8062      desc = [=[
   8063        Show (partial) command in the last line of the screen.  Set this
   8064        option off if your terminal is slow.
   8065        In Visual mode the size of the selected area is shown:
   8066        - When selecting characters within a line, the number of characters.
   8067          If the number of bytes is different it is also displayed: "2-6"
   8068          means two characters and six bytes.
   8069        - When selecting more than one line, the number of lines.
   8070        - When selecting a block, the size in screen characters:
   8071          {lines}x{columns}.
   8072        This information can be displayed in an alternative location using the
   8073        'showcmdloc' option, useful when 'cmdheight' is 0.
   8074      ]=],
   8075      full_name = 'showcmd',
   8076      scope = { 'global' },
   8077      short_desc = N_('show (partial) command in status line'),
   8078      type = 'boolean',
   8079      varname = 'p_sc',
   8080    },
   8081    {
   8082      abbreviation = 'sloc',
   8083      cb = 'did_set_showcmdloc',
   8084      defaults = 'last',
   8085      values = { 'last', 'statusline', 'tabline' },
   8086      desc = [=[
   8087        This option can be used to display the (partially) entered command in
   8088        another location.  Possible values are:
   8089          last		Last line of the screen (default).
   8090          statusline	Status line of the current window.
   8091          tabline	First line of the screen if 'showtabline' is enabled.
   8092        Setting this option to "statusline" or "tabline" means that these will
   8093        be redrawn whenever the command changes, which can be on every key
   8094        pressed.
   8095        The %S 'statusline' item can be used in 'statusline' or 'tabline' to
   8096        place the text.  Without a custom 'statusline' or 'tabline' it will be
   8097        displayed in a convenient location.
   8098      ]=],
   8099      full_name = 'showcmdloc',
   8100      scope = { 'global' },
   8101      short_desc = N_('change location of partial command'),
   8102      type = 'string',
   8103      varname = 'p_sloc',
   8104    },
   8105    {
   8106      abbreviation = 'sft',
   8107      defaults = false,
   8108      desc = [=[
   8109        When completing a word in insert mode (see |ins-completion|) from the
   8110        tags file, show both the tag name and a tidied-up form of the search
   8111        pattern (if there is one) as possible matches.  Thus, if you have
   8112        matched a C function, you can see a template for what arguments are
   8113        required (coding style permitting).
   8114        Note that this doesn't work well together with having "longest" in
   8115        'completeopt', because the completion from the search pattern may not
   8116        match the typed text.
   8117      ]=],
   8118      full_name = 'showfulltag',
   8119      scope = { 'global' },
   8120      short_desc = N_('show full tag pattern when completing tag'),
   8121      type = 'boolean',
   8122      varname = 'p_sft',
   8123    },
   8124    {
   8125      abbreviation = 'sm',
   8126      defaults = false,
   8127      desc = [=[
   8128        When a bracket is inserted, briefly jump to the matching one.  The
   8129        jump is only done if the match can be seen on the screen.  The time to
   8130        show the match can be set with 'matchtime'.
   8131        A Beep is given if there is no match (no matter if the match can be
   8132        seen or not).
   8133        When the 'm' flag is not included in 'cpoptions', typing a character
   8134        will immediately move the cursor back to where it belongs.
   8135        See the "sm" field in 'guicursor' for setting the cursor shape and
   8136        blinking when showing the match.
   8137        The 'matchpairs' option can be used to specify the characters to show
   8138        matches for.  'rightleft' and 'revins' are used to look for opposite
   8139        matches.
   8140        Also see the matchparen plugin for highlighting the match when moving
   8141        around |pi_paren.txt|.
   8142        Note: Use of the short form is rated PG.
   8143      ]=],
   8144      full_name = 'showmatch',
   8145      scope = { 'global' },
   8146      short_desc = N_('briefly jump to matching bracket if insert one'),
   8147      type = 'boolean',
   8148      varname = 'p_sm',
   8149    },
   8150    {
   8151      abbreviation = 'smd',
   8152      defaults = true,
   8153      desc = [=[
   8154        If in Insert, Replace or Visual mode put a message on the last line.
   8155        The |hl-ModeMsg| highlight group determines the highlighting.
   8156        The option has no effect when 'cmdheight' is zero.
   8157      ]=],
   8158      full_name = 'showmode',
   8159      scope = { 'global' },
   8160      short_desc = N_('message on status line to show current mode'),
   8161      type = 'boolean',
   8162      varname = 'p_smd',
   8163    },
   8164    {
   8165      abbreviation = 'stal',
   8166      cb = 'did_set_showtabline',
   8167      defaults = 1,
   8168      desc = [=[
   8169        The value of this option specifies when the line with tab page labels
   8170        will be displayed:
   8171        	0: never
   8172        	1: only if there are at least two tab pages
   8173        	2: always
   8174        This is both for the GUI and non-GUI implementation of the tab pages
   8175        line.
   8176        See |tab-page| for more information about tab pages.
   8177      ]=],
   8178      full_name = 'showtabline',
   8179      redraw = { 'all_windows', 'ui_option' },
   8180      scope = { 'global' },
   8181      short_desc = N_('tells when the tab pages line is displayed'),
   8182      type = 'number',
   8183      varname = 'p_stal',
   8184    },
   8185    {
   8186      abbreviation = 'ss',
   8187      defaults = 1,
   8188      desc = [=[
   8189        The minimal number of columns to scroll horizontally.  Used only when
   8190        the 'wrap' option is off and the cursor is moved off of the screen.
   8191        When it is zero the cursor will be put in the middle of the screen.
   8192        When using a slow terminal set it to a large number or 0.  Not used
   8193        for "zh" and "zl" commands.
   8194      ]=],
   8195      full_name = 'sidescroll',
   8196      scope = { 'global' },
   8197      short_desc = N_('minimum number of columns to scroll horizontal'),
   8198      type = 'number',
   8199      varname = 'p_ss',
   8200    },
   8201    {
   8202      abbreviation = 'siso',
   8203      defaults = 0,
   8204      desc = [=[
   8205        The minimal number of screen columns to keep to the left and to the
   8206        right of the cursor if 'nowrap' is set.  Setting this option to a
   8207        value greater than 0 while having 'sidescroll' also at a non-zero
   8208        value makes some context visible in the line you are scrolling in
   8209        horizontally (except at beginning of the line).  Setting this option
   8210        to a large value (like 999) has the effect of keeping the cursor
   8211        horizontally centered in the window, as long as one does not come too
   8212        close to the beginning of the line.
   8213        After using the local value, go back the global value with one of
   8214        these two: >vim
   8215        	setlocal sidescrolloff<
   8216        	setlocal sidescrolloff=-1
   8217        <
   8218        Example: Try this together with 'sidescroll' and 'listchars' as in the
   8219        	 following example to never allow the cursor to move onto the
   8220        	 "extends" character: >vim
   8221 
   8222        	 set nowrap sidescroll=1 listchars=extends:>,precedes:<
   8223        	 set sidescrolloff=1
   8224        <
   8225      ]=],
   8226      full_name = 'sidescrolloff',
   8227      scope = { 'global', 'win' },
   8228      short_desc = N_('min. nr. of columns to left and right of cursor'),
   8229      type = 'number',
   8230      varname = 'p_siso',
   8231    },
   8232    {
   8233      abbreviation = 'scl',
   8234      cb = 'did_set_signcolumn',
   8235      defaults = 'auto',
   8236      values = {
   8237        'yes',
   8238        'no',
   8239        'auto',
   8240        'auto:1',
   8241        'auto:2',
   8242        'auto:3',
   8243        'auto:4',
   8244        'auto:5',
   8245        'auto:6',
   8246        'auto:7',
   8247        'auto:8',
   8248        'auto:9',
   8249        'yes:1',
   8250        'yes:2',
   8251        'yes:3',
   8252        'yes:4',
   8253        'yes:5',
   8254        'yes:6',
   8255        'yes:7',
   8256        'yes:8',
   8257        'yes:9',
   8258        'number',
   8259      },
   8260      desc = [=[
   8261        When and how to draw the signcolumn.  Valid values are:
   8262           "auto"	only when there is a sign to display
   8263           "auto:[1-9]" resize to accommodate multiple signs up to the
   8264        		given number (maximum 9), e.g. "auto:4"
   8265           "auto:[1-8]-[2-9]"
   8266        		resize to accommodate multiple signs up to the
   8267        		given maximum number (maximum 9) while keeping
   8268        		at least the given minimum (maximum 8) fixed
   8269        		space. The minimum number should always be less
   8270        		than the maximum number, e.g. "auto:2-5"
   8271           "no"		never
   8272           "yes"	always
   8273           "yes:[1-9]"  always, with fixed space for signs up to the given
   8274        		number (maximum 9), e.g. "yes:3"
   8275           "number"	display signs in the 'number' column.  If the number
   8276        		column is not present, then behaves like "auto".
   8277      ]=],
   8278      full_name = 'signcolumn',
   8279      redraw = { 'current_window' },
   8280      scope = { 'win' },
   8281      short_desc = N_('when to display the sign column'),
   8282      type = 'string',
   8283    },
   8284    {
   8285      abbreviation = 'scs',
   8286      defaults = false,
   8287      desc = [=[
   8288        Override the 'ignorecase' option if the search pattern contains upper
   8289        case characters.  Only used when the search pattern is typed and
   8290        'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
   8291        ":g" and ":s" and when filtering matches for the completion menu
   8292        |compl-states|.
   8293        Not used for "*", "#", "gd", tag search, etc.  After "*" and "#" you
   8294        can make 'smartcase' used by doing a "/" command, recalling the search
   8295        pattern from history and hitting <Enter>.
   8296      ]=],
   8297      full_name = 'smartcase',
   8298      scope = { 'global' },
   8299      short_desc = N_('no ignore case when pattern has uppercase'),
   8300      type = 'boolean',
   8301      varname = 'p_scs',
   8302    },
   8303    {
   8304      abbreviation = 'si',
   8305      defaults = false,
   8306      desc = [=[
   8307        Do smart autoindenting when starting a new line.  Works for C-like
   8308        programs, but can also be used for other languages.  'cindent' does
   8309        something like this, works better in most cases, but is more strict,
   8310        see |C-indenting|.  When 'cindent' is on or 'indentexpr' is set,
   8311        setting 'si' has no effect.  'indentexpr' is a more advanced
   8312        alternative.
   8313        Normally 'autoindent' should also be on when using 'smartindent'.
   8314        An indent is automatically inserted:
   8315        - After a line ending in "{".
   8316        - After a line starting with a keyword from 'cinwords'.
   8317        - Before a line starting with "}" (only with the "O" command).
   8318        When typing '}' as the first character in a new line, that line is
   8319        given the same indent as the matching "{".
   8320        When typing '#' as the first character in a new line, the indent for
   8321        that line is removed, the '#' is put in the first column.  The indent
   8322        is restored for the next line.  If you don't want this, use this
   8323        mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
   8324        When using the ">>" command, lines starting with '#' are not shifted
   8325        right.
   8326      ]=],
   8327      full_name = 'smartindent',
   8328      scope = { 'buf' },
   8329      short_desc = N_('smart autoindenting for C programs'),
   8330      type = 'boolean',
   8331      varname = 'p_si',
   8332    },
   8333    {
   8334      abbreviation = 'sta',
   8335      defaults = true,
   8336      desc = [=[
   8337        When enabled, the <Tab> key will indent by 'shiftwidth' if the cursor
   8338        is in leading whitespace.  The <BS> key has the opposite effect.
   8339        In leading whitespace, this has the same effect as setting
   8340        'softtabstop' to the value of 'shiftwidth'.
   8341        NOTE: in most cases, using 'softtabstop' is a better option.  Have a
   8342        look at section |30.5| of the user guide for detailed
   8343        explanations on how Vim works with tabs and spaces.
   8344      ]=],
   8345      full_name = 'smarttab',
   8346      scope = { 'global' },
   8347      short_desc = N_("use 'shiftwidth' when inserting <Tab>"),
   8348      type = 'boolean',
   8349      varname = 'p_sta',
   8350    },
   8351    {
   8352      abbreviation = 'sms',
   8353      cb = 'did_set_smoothscroll',
   8354      defaults = false,
   8355      desc = [=[
   8356        Scrolling works with screen lines.  When 'wrap' is set and the first
   8357        line in the window wraps part of it may not be visible, as if it is
   8358        above the window.  "<<<" is displayed at the start of the first line,
   8359        highlighted with |hl-NonText|.
   8360        You may also want to add "lastline" to the 'display' option to show as
   8361        much of the last line as possible.
   8362        NOTE: partly implemented, doesn't work yet for |gj| and |gk|.
   8363      ]=],
   8364      full_name = 'smoothscroll',
   8365      redraw = { 'current_window' },
   8366      scope = { 'win' },
   8367      short_desc = N_("scroll by screen lines when 'wrap' is set"),
   8368      type = 'boolean',
   8369    },
   8370    {
   8371      abbreviation = 'sts',
   8372      defaults = 0,
   8373      desc = [=[
   8374        Create soft tab stops, separated by 'softtabstop' number of columns.
   8375        In Insert mode, pressing the <Tab> key will move the cursor to the
   8376        next soft tab stop, instead of inserting a literal tab.  <BS> behaves
   8377        similarly in reverse.  Vim inserts a minimal mix of tab and space
   8378        characters to produce the visual effect.
   8379 
   8380        This setting does not affect the display of existing tab characters.
   8381 
   8382        A value of 0 disables this behaviour.  A negative value makes Vim use
   8383        'shiftwidth'.  If you plan to use 'sts' and 'shiftwidth' with
   8384        different values, you might consider setting 'smarttab'.
   8385 
   8386        The 'L' flag in 'cpoptions' alters tab behavior when 'list' is
   8387        enabled.  See also |ins-expandtab| and user manual section |30.5| for
   8388        in-depth explanations.
   8389 
   8390        The value of 'softtabstop' will be ignored if 'varsofttabstop' is set
   8391        to anything other than an empty string.
   8392      ]=],
   8393      full_name = 'softtabstop',
   8394      scope = { 'buf' },
   8395      short_desc = N_('number of spaces that <Tab> uses while editing'),
   8396      type = 'number',
   8397      varname = 'p_sts',
   8398    },
   8399    {
   8400      cb = 'did_set_spell',
   8401      defaults = false,
   8402      desc = [=[
   8403        When on spell checking will be done.  See |spell|.
   8404        The languages are specified with 'spelllang'.
   8405      ]=],
   8406      full_name = 'spell',
   8407      redraw = { 'current_window', 'highlight_only' },
   8408      scope = { 'win' },
   8409      short_desc = N_('spell checking'),
   8410      type = 'boolean',
   8411    },
   8412    {
   8413      abbreviation = 'spc',
   8414      cb = 'did_set_spellcapcheck',
   8415      defaults = '[.?!]\\_[\\])\'"\\t ]\\+',
   8416      desc = [=[
   8417        Pattern to locate the end of a sentence.  The following word will be
   8418        checked to start with a capital letter.  If not then it is highlighted
   8419        with SpellCap |hl-SpellCap| (unless the word is also badly spelled).
   8420        When this check is not wanted make this option empty.
   8421        Only used when 'spell' is set.
   8422        Be careful with special characters, see |option-backslash| about
   8423        including spaces and backslashes.
   8424        To set this option automatically depending on the language, see
   8425        |set-spc-auto|.
   8426      ]=],
   8427      full_name = 'spellcapcheck',
   8428      redraw = { 'current_buffer', 'highlight_only' },
   8429      scope = { 'buf' },
   8430      short_desc = N_('pattern to locate end of a sentence'),
   8431      type = 'string',
   8432      varname = 'p_spc',
   8433    },
   8434    {
   8435      abbreviation = 'spf',
   8436      cb = 'did_set_spellfile',
   8437      defaults = '',
   8438      deny_duplicates = true,
   8439      desc = [=[
   8440        Name of the word list file where words are added for the |zg| and |zw|
   8441        commands.  It must end in ".{encoding}.add".  You need to include the
   8442        path, otherwise the file is placed in the current directory.
   8443        The path may include characters from 'isfname', ' ', ',', '@' and ':'.
   8444        							*E765*
   8445        It may also be a comma-separated list of names.  A count before the
   8446        |zg| and |zw| commands can be used to access each.  This allows using
   8447        a personal word list file and a project word list file.
   8448        When a word is added while this option is empty Nvim will use
   8449        (and auto-create) `stdpath('data')/site/spell/`. For the file name the
   8450        first language name that appears in 'spelllang' is used, ignoring the
   8451        region.
   8452        The resulting ".spl" file will be used for spell checking, it does not
   8453        have to appear in 'spelllang'.
   8454        Normally one file is used for all regions, but you can add the region
   8455        name if you want to.  However, it will then only be used when
   8456        'spellfile' is set to it, for entries in 'spelllang' only files
   8457        without region name will be found.
   8458        Environment variables are expanded |:set_env|.
   8459        This option cannot be set from a |modeline| or in the |sandbox|, for
   8460        security reasons.
   8461      ]=],
   8462      expand = true,
   8463      full_name = 'spellfile',
   8464      list = 'onecomma',
   8465      scope = { 'buf' },
   8466      secure = true,
   8467      short_desc = N_('files where |zg| and |zw| store words'),
   8468      type = 'string',
   8469      varname = 'p_spf',
   8470    },
   8471    {
   8472      abbreviation = 'spl',
   8473      cb = 'did_set_spelllang',
   8474      defaults = 'en',
   8475      deny_duplicates = true,
   8476      desc = [=[
   8477        A comma-separated list of word list names.  When the 'spell' option is
   8478        on spellchecking will be done for these languages.  Example: >vim
   8479        	set spelllang=en_us,nl,medical
   8480        <	This means US English, Dutch and medical words are recognized.  Words
   8481        that are not recognized will be highlighted.
   8482        The word list name must consist of alphanumeric characters, a dash or
   8483        an underscore.  It should not include a comma or dot.  Using a dash is
   8484        recommended to separate the two letter language name from a
   8485        specification.  Thus "en-rare" is used for rare English words.
   8486        A region name must come last and have the form "_xx", where "xx" is
   8487        the two-letter, lower case region name.  You can use more than one
   8488        region by listing them: "en_us,en_ca" supports both US and Canadian
   8489        English, but not words specific for Australia, New Zealand or Great
   8490        Britain.  (Note: currently en_au and en_nz dictionaries are older than
   8491        en_ca, en_gb and en_us).
   8492        If the name "cjk" is included East Asian characters are excluded from
   8493        spell checking.  This is useful when editing text that also has Asian
   8494        words.
   8495        Note that the "medical" dictionary does not exist, it is just an
   8496        example of a longer name.
   8497        						*E757*
   8498        As a special case the name of a .spl file can be given as-is.  The
   8499        first "_xx" in the name is removed and used as the region name
   8500        (_xx is an underscore, two letters and followed by a non-letter).
   8501        This is mainly for testing purposes.  You must make sure the correct
   8502        encoding is used, Vim doesn't check it.
   8503        How the related spell files are found is explained here: |spell-load|.
   8504 
   8505        If the |spellfile.lua| plugin is active and you use a language name
   8506        for which Vim cannot find the .spl file in 'runtimepath' the plugin
   8507        will ask you if you want to download the file.
   8508 
   8509        After this option has been set successfully, Vim will source the files
   8510        "spell/LANG.vim" in 'runtimepath'.  "LANG" is the value of 'spelllang'
   8511        up to the first character that is not an ASCII letter or number and
   8512        not a dash.  Also see |set-spc-auto|.
   8513      ]=],
   8514      expand = true,
   8515      full_name = 'spelllang',
   8516      list = 'onecomma',
   8517      redraw = { 'current_buffer', 'highlight_only' },
   8518      scope = { 'buf' },
   8519      short_desc = N_('language(s) to do spell checking for'),
   8520      type = 'string',
   8521      varname = 'p_spl',
   8522    },
   8523    {
   8524      abbreviation = 'spo',
   8525      cb = 'did_set_spelloptions',
   8526      defaults = '',
   8527      values = { 'camel', 'noplainbuffer' },
   8528      flags = true,
   8529      deny_duplicates = true,
   8530      desc = [=[
   8531        A comma-separated list of options for spell checking:
   8532        camel		When a word is CamelCased, assume "Cased" is a
   8533        		separate word: every upper-case character in a word
   8534        		that comes after a lower case character indicates the
   8535        		start of a new word.
   8536        noplainbuffer	Only spellcheck a buffer when 'syntax' is enabled,
   8537        		or when extmarks are set within the buffer. Only
   8538        		designated regions of the buffer are spellchecked in
   8539        		this case.
   8540      ]=],
   8541      full_name = 'spelloptions',
   8542      list = 'onecomma',
   8543      redraw = { 'current_buffer', 'highlight_only' },
   8544      scope = { 'buf' },
   8545      secure = true,
   8546      type = 'string',
   8547      varname = 'p_spo',
   8548    },
   8549    {
   8550      abbreviation = 'sps',
   8551      cb = 'did_set_spellsuggest',
   8552      defaults = 'best',
   8553      -- Keep this in sync with spell_check_sps().
   8554      values = { 'best', 'fast', 'double', 'expr:', 'file:', 'timeout:' },
   8555      deny_duplicates = true,
   8556      desc = [=[
   8557        Methods used for spelling suggestions.  Both for the |z=| command and
   8558        the |spellsuggest()| function.  This is a comma-separated list of
   8559        items:
   8560 
   8561        best		Internal method that works best for English.  Finds
   8562        		changes like "fast" and uses a bit of sound-a-like
   8563        		scoring to improve the ordering.
   8564 
   8565        double		Internal method that uses two methods and mixes the
   8566        		results.  The first method is "fast", the other method
   8567        		computes how much the suggestion sounds like the bad
   8568        		word.  That only works when the language specifies
   8569        		sound folding.  Can be slow and doesn't always give
   8570        		better results.
   8571 
   8572        fast		Internal method that only checks for simple changes:
   8573        		character inserts/deletes/swaps.  Works well for
   8574        		simple typing mistakes.
   8575 
   8576        {number}	The maximum number of suggestions listed for |z=|.
   8577        		Not used for |spellsuggest()|.  The number of
   8578        		suggestions is never more than the value of 'lines'
   8579        		minus two.
   8580 
   8581        timeout:{millisec}   Limit the time searching for suggestions to
   8582        		{millisec} milliseconds.  Applies to the following
   8583        		methods.  When omitted the limit is 5000.  When
   8584        		negative there is no limit.
   8585 
   8586        file:{filename} Read file {filename}, which must have two columns,
   8587        		separated by a slash.  The first column contains the
   8588        		bad word, the second column the suggested good word.
   8589        		Example:
   8590        			theribal/terrible ~
   8591        		Use this for common mistakes that do not appear at the
   8592        		top of the suggestion list with the internal methods.
   8593        		Lines without a slash are ignored, use this for
   8594        		comments.
   8595        		The word in the second column must be correct,
   8596        		otherwise it will not be used.  Add the word to an
   8597        		".add" file if it is currently flagged as a spelling
   8598        		mistake.
   8599        		The file is used for all languages.
   8600 
   8601        expr:{expr}	Evaluate expression {expr}.  Use a function to avoid
   8602        		trouble with spaces.  Best is to call a function
   8603        		without arguments, see |expr-option-function|.
   8604        		|v:val| holds the badly spelled word.  The expression
   8605        		must evaluate to a List of Lists, each with a
   8606        		suggestion and a score.
   8607        		Example:
   8608        			[['the', 33], ['that', 44]] ~
   8609        		Set 'verbose' and use |z=| to see the scores that the
   8610        		internal methods use.  A lower score is better.
   8611        		This may invoke |spellsuggest()| if you temporarily
   8612        		set 'spellsuggest' to exclude the "expr:" part.
   8613        		Errors are silently ignored, unless you set the
   8614        		'verbose' option to a non-zero value.
   8615 
   8616        Only one of "best", "double" or "fast" may be used.  The others may
   8617        appear several times in any order.  Example: >vim
   8618        	set sps=file:~/.config/nvim/sugg,best,expr:MySuggest()
   8619        <	Environment variables are expanded |:set_env|.
   8620        This option cannot be set from a |modeline| or in the |sandbox|, for
   8621        security reasons.
   8622      ]=],
   8623      expand = true,
   8624      full_name = 'spellsuggest',
   8625      list = 'onecomma',
   8626      scope = { 'global' },
   8627      secure = true,
   8628      short_desc = N_('method(s) used to suggest spelling corrections'),
   8629      type = 'string',
   8630      varname = 'p_sps',
   8631    },
   8632    {
   8633      abbreviation = 'sb',
   8634      defaults = false,
   8635      desc = [=[
   8636        When on, splitting a window will put the new window below the current
   8637        one. |:split|
   8638      ]=],
   8639      full_name = 'splitbelow',
   8640      scope = { 'global' },
   8641      short_desc = N_('new window from split is below the current one'),
   8642      type = 'boolean',
   8643      varname = 'p_sb',
   8644    },
   8645    {
   8646      abbreviation = 'spk',
   8647      defaults = 'cursor',
   8648      values = { 'cursor', 'screen', 'topline' },
   8649      desc = [=[
   8650        The value of this option determines the scroll behavior when opening,
   8651        closing or resizing horizontal splits.
   8652 
   8653        Possible values are:
   8654          cursor	Keep the same relative cursor position.
   8655          screen	Keep the text on the same screen line.
   8656          topline	Keep the topline the same.
   8657 
   8658        For the "screen" and "topline" values, the cursor position will be
   8659        changed when necessary.  In this case, the jumplist will be populated
   8660        with the previous cursor position.  For "screen", the text cannot
   8661        always be kept on the same screen line when 'wrap' is enabled.
   8662      ]=],
   8663      full_name = 'splitkeep',
   8664      scope = { 'global' },
   8665      short_desc = N_('determines scroll behavior for split windows'),
   8666      type = 'string',
   8667      varname = 'p_spk',
   8668    },
   8669    {
   8670      abbreviation = 'spr',
   8671      defaults = false,
   8672      desc = [=[
   8673        When on, splitting a window will put the new window right of the
   8674        current one. |:vsplit|
   8675      ]=],
   8676      full_name = 'splitright',
   8677      scope = { 'global' },
   8678      short_desc = N_('new window is put right of the current one'),
   8679      type = 'boolean',
   8680      varname = 'p_spr',
   8681    },
   8682    {
   8683      abbreviation = 'sol',
   8684      defaults = false,
   8685      desc = [=[
   8686        When "on" the commands listed below move the cursor to the first
   8687        non-blank of the line.  When off the cursor is kept in the same column
   8688        (if possible).  This applies to the commands:
   8689        - CTRL-D, CTRL-U, CTRL-B, CTRL-F, "G", "H", "M", "L", "gg"
   8690        - "d", "<<", "==" and ">>" with a linewise operator
   8691          (|operator-resulting-pos|)
   8692        - "%" with a count
   8693        - buffer changing commands (CTRL-^, :bnext, :bNext, etc.)
   8694        - Ex commands that only have a line number, e.g., ":25" or ":+".
   8695        In case of buffer changing commands the cursor is placed at the column
   8696        where it was the last time the buffer was edited.
   8697      ]=],
   8698      full_name = 'startofline',
   8699      scope = { 'global' },
   8700      short_desc = N_('commands move cursor to first non-blank in line'),
   8701      type = 'boolean',
   8702      varname = 'p_sol',
   8703      vim = false,
   8704    },
   8705    {
   8706      abbreviation = 'stc',
   8707      cb = 'did_set_statuscolumn',
   8708      defaults = '',
   8709      desc = [=[
   8710        When non-empty, this option determines the content of the area to the
   8711        side of a window, normally containing the fold, sign and number columns.
   8712        The format of this option is like that of 'statusline'.
   8713 
   8714        Some of the items from the 'statusline' format are different for
   8715        'statuscolumn':
   8716 
   8717        %l	line number column for currently drawn line
   8718        %s	sign column for currently drawn line
   8719        %C	fold column for currently drawn line
   8720 
   8721        The 'statuscolumn' width follows that of the default columns and
   8722        adapts to the 'numberwidth', 'signcolumn' and 'foldcolumn' option values
   8723        (regardless of whether the sign and fold items are present).
   8724        Additionally, the 'statuscolumn' grows with the size of the evaluated
   8725        format string, up to a point (following the maximum size of the default
   8726        fold, sign and number columns). Shrinking only happens when the number
   8727        of lines in a buffer changes, or the 'statuscolumn' option is set.
   8728 
   8729        The |v:lnum|    variable holds the line number to be drawn.
   8730        The |v:relnum|  variable holds the relative line number to be drawn.
   8731        The |v:virtnum| variable is negative when drawing virtual lines, zero
   8732        	      when drawing the actual buffer line, and positive when
   8733        	      drawing the wrapped part of a buffer line.
   8734 
   8735        When using |v:relnum|, keep in mind that cursor movement by itself will
   8736        not cause the 'statuscolumn' to update unless 'relativenumber' is set.
   8737 
   8738        NOTE: The %@ click execute function item is supported as well but the
   8739        specified function will be the same for each row in the same column.
   8740        It cannot be switched out through a dynamic 'statuscolumn' format, the
   8741        handler should be written with this in mind.
   8742 
   8743        Examples: >vim
   8744        	" Line number with bar separator and click handlers:
   8745        	set statuscolumn=%@SignCb@%s%=%T%@NumCb@%l│%T
   8746 
   8747        	" Line numbers in hexadecimal for non wrapped part of lines:
   8748        	let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} '
   8749 
   8750        	" Human readable line numbers with thousands separator:
   8751        	let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\'
   8752        		   . '%(\\d\\d\\d\\)\\+$",",","g")}'
   8753 
   8754        	" Both relative and absolute line numbers with different
   8755        	" highlighting for odd and even relative numbers:
   8756        	let &stc='%#NonText#%{&nu?v:lnum:""}' .
   8757        	 '%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}' .
   8758        	 '%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
   8759 
   8760        <	WARNING: this expression is evaluated for each screen line so defining
   8761        an expensive expression can negatively affect render performance.
   8762      ]=],
   8763      full_name = 'statuscolumn',
   8764      redraw = { 'current_window' },
   8765      scope = { 'win' },
   8766      secure = true,
   8767      short_desc = N_('custom format for the status column'),
   8768      type = 'string',
   8769    },
   8770    {
   8771      abbreviation = 'stl',
   8772      cb = 'did_set_statusline',
   8773      defaults = {
   8774        if_true = table.concat({
   8775          '%<',
   8776          '%f %h%w%m%r ',
   8777          '%=',
   8778          "%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}",
   8779          "%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}",
   8780          "%{% &busy > 0 ? '◐ ' : '' %}",
   8781          "%{% luaeval('(package.loaded[''vim.diagnostic''] and #vim.diagnostic.count() ~= 0 and vim.diagnostic.status() .. '' '') or '''' ') %}",
   8782          "%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}",
   8783        }),
   8784        doc = 'is very long',
   8785      },
   8786      desc = [=[
   8787        Sets the |status-line|.
   8788 
   8789        The option consists of printf style '%' items interspersed with
   8790        normal text.  Each status line item is of the form:
   8791          %-0{minwid}.{maxwid}{item}
   8792        All fields except the {item} are optional.  A single percent sign can
   8793        be given as "%%".
   8794 
   8795        						*stl-%!*
   8796        When the option starts with "%!" then it is used as an expression,
   8797        evaluated and the result is used as the option value.  Example: >vim
   8798        	set statusline=%!MyStatusLine()
   8799        <	The *g:statusline_winid* variable will be set to the |window-ID| of the
   8800        window that the status line belongs to.
   8801        The result can contain %{} items that will be evaluated too.
   8802        Note that the "%!" expression is evaluated in the context of the
   8803        current window and buffer, while %{} items are evaluated in the
   8804        context of the window that the statusline belongs to.
   8805 
   8806        When there is an error while evaluating the option it will be reset to
   8807        its default value to avoid further errors.  Otherwise screen updating
   8808        would loop.  When the result contains unprintable characters the
   8809        result is unpredictable.
   8810 
   8811        Note that the only effect of 'ruler' when this option is set (and
   8812        'laststatus' is 2 or 3) is controlling the output of |CTRL-G|.
   8813 
   8814        field	    meaning ~
   8815        -	    Left justify the item.  The default is right justified
   8816        	    when minwid is larger than the length of the item.
   8817        0	    Leading zeroes in numeric items.  Overridden by "-".
   8818        minwid	    Minimum width of the item, padding as set by "-" & "0".
   8819        	    Value must be 50 or less.
   8820        maxwid	    Maximum width of the item.  Truncation occurs with a "<"
   8821        	    on the left for text items.  Numeric items will be
   8822        	    shifted down to maxwid-2 digits followed by ">"number
   8823        	    where number is the amount of missing digits, much like
   8824        	    an exponential notation.
   8825        item	    A one letter code as described below.
   8826 
   8827        Following is a description of the possible statusline items.  The
   8828        second character in "item" is the type:
   8829        	N for number
   8830        	S for string
   8831        	F for flags as described below
   8832        	- not applicable
   8833 
   8834        item  meaning ~
   8835        f S   Path to the file in the buffer, as typed or relative to current
   8836              directory.
   8837        F S   Full path to the file in the buffer.
   8838        t S   File name (tail) of file in the buffer.
   8839        m F   Modified flag, text is "[+]"; "[-]" if 'modifiable' is off.
   8840        M F   Modified flag, text is ",+" or ",-".
   8841        r F   Readonly flag, text is "[RO]".
   8842        R F   Readonly flag, text is ",RO".
   8843        h F   Help buffer flag, text is "[help]".
   8844        H F   Help buffer flag, text is ",HLP".
   8845        w F   Preview window flag, text is "[Preview]".
   8846        W F   Preview window flag, text is ",PRV".
   8847        y F   Type of file in the buffer, e.g., "[vim]".  See 'filetype'.
   8848        Y F   Type of file in the buffer, e.g., ",VIM".  See 'filetype'.
   8849        q S   "[Quickfix List]", "[Location List]" or empty.
   8850        k S   Value of "b:keymap_name" or 'keymap' when |:lmap| mappings are
   8851              being used: "<keymap>"
   8852        n N   Buffer number.
   8853        b N   Value of character under cursor.
   8854        B N   As above, in hexadecimal.
   8855        o N   Byte number in file of byte under cursor, first byte is 1.
   8856              Mnemonic: Offset from start of file (with one added)
   8857        O N   As above, in hexadecimal.
   8858        l N   Line number.
   8859        L N   Number of lines in buffer.
   8860        c N   Column number (byte index).
   8861        v N   Virtual column number (screen column).
   8862        V N   Virtual column number as -{num}.  Not displayed if equal to 'c'.
   8863        p N   Percentage through file in lines as in |CTRL-G|.
   8864        P S   Percentage through file of displayed window.  This is like the
   8865              percentage described for 'ruler'.  Always 3 in length, unless
   8866              translated.
   8867        S S   'showcmd' content, see 'showcmdloc'.
   8868        a S   Argument list status as in default title.  ({current} of {max})
   8869              Empty if the argument file count is zero or one.
   8870        { NF  Evaluate expression between "%{" and "}" and substitute result.
   8871              Note that there is no "%" before the closing "}".  The
   8872              expression cannot contain a "}" character, call a function to
   8873              work around that.  See |stl-%{| below.
   8874        `{%` -  This is almost same as "{" except the result of the expression is
   8875              re-evaluated as a statusline format string.  Thus if the
   8876              return value of expr contains "%" items they will get expanded.
   8877              The expression can contain the "}" character, the end of
   8878              expression is denoted by "%}".
   8879              For example: >vim
   8880        	func! Stl_filename() abort
   8881        	    return "%t"
   8882        	endfunc
   8883        <	        `stl=%{Stl_filename()}`   results in `"%t"`
   8884                `stl=%{%Stl_filename()%}` results in `"Name of current file"`
   8885        %} -  End of "{%" expression
   8886        ( -   Start of item group.  Can be used for setting the width and
   8887              alignment of a section.  Must be followed by %) somewhere.
   8888        ) -   End of item group.  No width fields allowed.
   8889        T N   For 'tabline': start of tab page N label.  Use %T or %X to end
   8890              the label.  Clicking this label with left mouse button switches
   8891              to the specified tab page, while clicking it with middle mouse
   8892              button closes the specified tab page.
   8893        X N   For 'tabline': start of close tab N label.  Use %X or %T to end
   8894              the label, e.g.: %3Xclose%X.  Use %999X for a "close current
   8895              tab" label.  Clicking this label with left mouse button closes
   8896              the specified tab page.
   8897        @ N   Start of execute function label. Use %X or %T to end the label,
   8898              e.g.: %10@SwitchBuffer@foo.c%X.  Clicking this label runs the
   8899              specified function: in the example when clicking once using left
   8900              mouse button on "foo.c", a `SwitchBuffer(10, 1, 'l', '    ')`
   8901              expression will be run.  The specified function receives the
   8902              following arguments in order:
   8903              1. minwid field value or zero if no N was specified
   8904              2. number of mouse clicks to detect multiple clicks
   8905              3. mouse button used: "l", "r" or "m" for left, right or middle
   8906                 button respectively; one should not rely on third argument
   8907                 being only "l", "r" or "m": any other non-empty string value
   8908                 that contains only ASCII lower case letters may be expected
   8909                 for other mouse buttons
   8910              4. modifiers pressed: string which contains "s" if shift
   8911                 modifier was pressed, "c" for control, "a" for alt and "m"
   8912                 for meta; currently if modifier is not pressed string
   8913                 contains space instead, but one should not rely on presence
   8914                 of spaces or specific order of modifiers: use |stridx()| to
   8915                 test whether some modifier is present; string is guaranteed
   8916                 to contain only ASCII letters and spaces, one letter per
   8917                 modifier; "?" modifier may also be present, but its presence
   8918                 is a bug that denotes that new mouse button recognition was
   8919                 added without modifying code that reacts on mouse clicks on
   8920                 this label.
   8921              Use |getmousepos()|.winid in the specified function to get the
   8922              corresponding window id of the clicked item.
   8923        \< -   Where to truncate line if too long.  Default is at the start.
   8924              No width fields allowed.
   8925        = -   Separation point between alignment sections.  Each section will
   8926              be separated by an equal number of spaces.  With one %= what
   8927              comes after it will be right-aligned.  With two %= there is a
   8928              middle part, with white space left and right of it.
   8929              No width fields allowed.
   8930        # -   Set highlight group.  The name must follow and then a # again.
   8931              Thus use %#HLname# for highlight group HLname.  The same
   8932              highlighting is used, also for the statusline of non-current
   8933              windows.
   8934        $ -   Same as `#`, except the `%$HLname$` group will inherit from
   8935              preceding highlight attributes.
   8936        * -   Set highlight group to User{N}, where {N} is taken from the
   8937              minwid field, e.g. %1*.  Restore normal highlight with %* or
   8938              %0*.  The difference between User{N} and StatusLine will be
   8939              applied to StatusLineNC for the statusline of non-current
   8940              windows.
   8941              The number N must be between 1 and 9.  See |hl-User1..9|
   8942 
   8943        When displaying a flag, Vim removes the leading comma, if any, when
   8944        that flag comes right after plaintext.  This will make a nice display
   8945        when flags are used like in the examples below.
   8946 
   8947        When all items in a group becomes an empty string (i.e. flags that are
   8948        not set) and a minwid is not set for the group, the whole group will
   8949        become empty.  This will make a group like the following disappear
   8950        completely from the statusline when none of the flags are set. >vim
   8951        	set statusline=...%(\ [%M%R%H]%)...
   8952        <	Beware that an expression is evaluated each and every time the status
   8953        line is displayed.
   8954        			*stl-%{* *g:actual_curbuf* *g:actual_curwin*
   8955        While evaluating %{} the current buffer and current window will be set
   8956        temporarily to that of the window (and buffer) whose statusline is
   8957        currently being drawn.  The expression will evaluate in this context.
   8958        The variable "g:actual_curbuf" is set to the `bufnr()` number of the
   8959        real current buffer and "g:actual_curwin" to the |window-ID| of the
   8960        real current window.  These values are strings.
   8961 
   8962        The 'statusline' option will be evaluated in the |sandbox| if set from
   8963        a modeline, see |sandbox-option|.
   8964        This option cannot be set in a modeline when 'modelineexpr' is off.
   8965 
   8966        It is not allowed to change text or jump to another window while
   8967        evaluating 'statusline' |textlock|.
   8968 
   8969        If the statusline is not updated when you want it (e.g., after setting
   8970        a variable that's used in an expression), you can force an update by
   8971        using `:redrawstatus`.
   8972 
   8973        A result of all digits is regarded a number for display purposes.
   8974        Otherwise the result is taken as flag text and applied to the rules
   8975        described above.
   8976 
   8977        Watch out for errors in expressions.  They may render Vim unusable!
   8978        If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
   8979        edit your vimrc or whatever with "vim --clean" to get it right.
   8980 
   8981        Examples:
   8982        Emulate standard status line with 'ruler' set >vim
   8983          set statusline=%<%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
   8984        <	Similar, but add ASCII value of char under the cursor (like "ga") >vim
   8985          set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
   8986        <	Display byte count and byte value, modified flag in red. >vim
   8987          set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
   8988          hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red
   8989        <	Display a ,GZ flag if a compressed file is loaded >vim
   8990          set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
   8991        <	In the |:autocmd|'s: >vim
   8992          let b:gzflag = 1
   8993        <	And: >vim
   8994          unlet b:gzflag
   8995        <	And define this function: >vim
   8996          function VarExists(var, val)
   8997              if exists(a:var) | return a:val | else | return '' | endif
   8998          endfunction
   8999        <
   9000      ]=],
   9001      full_name = 'statusline',
   9002      modelineexpr = true,
   9003      redraw = { 'statuslines' },
   9004      scope = { 'global', 'win' },
   9005      short_desc = N_('custom format for the status line'),
   9006      tags = { 'E540', 'E542' },
   9007      type = 'string',
   9008      varname = 'p_stl',
   9009    },
   9010    {
   9011      abbreviation = 'su',
   9012      defaults = '.bak,~,.o,.h,.info,.swp,.obj',
   9013      deny_duplicates = true,
   9014      desc = [=[
   9015        Files with these suffixes get a lower priority when multiple files
   9016        match a wildcard.  See |suffixes|.  Commas can be used to separate the
   9017        suffixes.  Spaces after the comma are ignored.  A dot is also seen as
   9018        the start of a suffix.  To avoid a dot or comma being recognized as a
   9019        separator, precede it with a backslash (see |option-backslash| about
   9020        including spaces and backslashes).
   9021        See 'wildignore' for completely ignoring files.
   9022        The use of |:set+=| and |:set-=| is preferred when adding or removing
   9023        suffixes from the list.  This avoids problems when a future version
   9024        uses another default.
   9025      ]=],
   9026      full_name = 'suffixes',
   9027      list = 'onecomma',
   9028      scope = { 'global' },
   9029      short_desc = N_('suffixes that are ignored with multiple match'),
   9030      type = 'string',
   9031      varname = 'p_su',
   9032    },
   9033    {
   9034      abbreviation = 'sua',
   9035      defaults = '',
   9036      deny_duplicates = true,
   9037      desc = [=[
   9038        Comma-separated list of suffixes, which are used when searching for a
   9039        file for the "gf", "[I", etc. commands.  Example: >vim
   9040        	set suffixesadd=.java
   9041        <
   9042      ]=],
   9043      full_name = 'suffixesadd',
   9044      list = 'onecomma',
   9045      scope = { 'buf' },
   9046      short_desc = N_('suffixes added when searching for a file'),
   9047      type = 'string',
   9048      varname = 'p_sua',
   9049    },
   9050    {
   9051      abbreviation = 'swf',
   9052      cb = 'did_set_swapfile',
   9053      defaults = true,
   9054      desc = [=[
   9055        Use a swapfile for the buffer.  This option can be reset when a
   9056        swapfile is not wanted for a specific buffer.  For example, with
   9057        confidential information that even root must not be able to access.
   9058        Careful: All text will be in memory:
   9059        	- Don't use this for big files.
   9060        	- Recovery will be impossible!
   9061        A swapfile will only be present when 'updatecount' is non-zero and
   9062        'swapfile' is set.
   9063        When 'swapfile' is reset, the swap file for the current buffer is
   9064        immediately deleted.  When 'swapfile' is set, and 'updatecount' is
   9065        non-zero, a swap file is immediately created.
   9066        Also see |swap-file|.
   9067        If you want to open a new buffer without creating a swap file for it,
   9068        use the |:noswapfile| modifier.
   9069        See 'directory' for where the swap file is created.
   9070 
   9071        This option is used together with 'bufhidden' and 'buftype' to
   9072        specify special kinds of buffers.   See |special-buffers|.
   9073      ]=],
   9074      full_name = 'swapfile',
   9075      redraw = { 'statuslines' },
   9076      scope = { 'buf' },
   9077      short_desc = N_('whether to use a swapfile for a buffer'),
   9078      type = 'boolean',
   9079      varname = 'p_swf',
   9080    },
   9081    {
   9082      abbreviation = 'swb',
   9083      defaults = 'uselast',
   9084      values = { 'useopen', 'usetab', 'split', 'newtab', 'vsplit', 'uselast' },
   9085      flags = true,
   9086      deny_duplicates = true,
   9087      desc = [=[
   9088        This option controls the behavior when switching between buffers.
   9089        This option is checked, when
   9090        - jumping to errors with the |quickfix| commands (|:cc|, |:cn|, |:cp|,
   9091          etc.).
   9092        - jumping to a tag using the |:stag| command.
   9093        - opening a file using the |CTRL-W_f| or |CTRL-W_F| command.
   9094        - jumping to a buffer using a buffer split command (e.g.  |:sbuffer|,
   9095          |:sbnext|, or |:sbrewind|).
   9096        Possible values (comma-separated list):
   9097           useopen	If included, jump to the first open window in the
   9098        		current tab page that contains the specified buffer
   9099        		(if there is one).  Otherwise: Do not examine other
   9100        		windows.
   9101           usetab	Like "useopen", but also consider windows in other tab
   9102        		pages.
   9103           split	If included, split the current window before loading
   9104        		a buffer for a |quickfix| command that display errors.
   9105        		Otherwise: do not split, use current window (when used
   9106        		in the quickfix window: the previously used window or
   9107        		split if there is no other window).
   9108           vsplit	Just like "split" but split vertically.
   9109           newtab	Like "split", but open a new tab page.  Overrules
   9110        		"split" when both are present.
   9111           uselast	If included, jump to the previously used window when
   9112        		jumping to errors with |quickfix| commands.
   9113        If a window has 'winfixbuf' enabled, 'switchbuf' is currently not
   9114        applied to the split window.
   9115      ]=],
   9116      full_name = 'switchbuf',
   9117      list = 'onecomma',
   9118      scope = { 'global' },
   9119      short_desc = N_('sets behavior when switching to another buffer'),
   9120      type = 'string',
   9121      varname = 'p_swb',
   9122      flags_varname = 'swb_flags',
   9123    },
   9124    {
   9125      abbreviation = 'smc',
   9126      defaults = 3000,
   9127      desc = [=[
   9128        Maximum column in which to search for syntax items.  In long lines the
   9129        text after this column is not highlighted and following lines may not
   9130        be highlighted correctly, because the syntax state is cleared.
   9131        This helps to avoid very slow redrawing for an XML file that is one
   9132        long line.
   9133        Set to zero to remove the limit.
   9134      ]=],
   9135      full_name = 'synmaxcol',
   9136      redraw = { 'current_buffer' },
   9137      scope = { 'buf' },
   9138      short_desc = N_('maximum column to find syntax items'),
   9139      type = 'number',
   9140      varname = 'p_smc',
   9141    },
   9142    {
   9143      abbreviation = 'syn',
   9144      cb = 'did_set_filetype_or_syntax',
   9145      defaults = '',
   9146      desc = [=[
   9147        When this option is set, the syntax with this name is loaded, unless
   9148        syntax highlighting has been switched off with ":syntax off".
   9149        Otherwise this option does not always reflect the current syntax (the
   9150        b:current_syntax variable does).
   9151        This option is most useful in a modeline, for a file which syntax is
   9152        not automatically recognized.  Example, in an IDL file: >c
   9153        	/* vim: set syntax=idl : */
   9154        <	When a dot appears in the value then this separates two filetype
   9155        names.  Example: >c
   9156        	/* vim: set syntax=c.doxygen : */
   9157        <	This will use the "c" syntax first, then the "doxygen" syntax.
   9158        Note that the second one must be prepared to be loaded as an addition,
   9159        otherwise it will be skipped.  More than one dot may appear.
   9160        To switch off syntax highlighting for the current file, use: >vim
   9161        	set syntax=OFF
   9162        <	To switch syntax highlighting on according to the current value of the
   9163        'filetype' option: >vim
   9164        	set syntax=ON
   9165        <	What actually happens when setting the 'syntax' option is that the
   9166        Syntax autocommand event is triggered with the value as argument.
   9167        This option is not copied to another buffer, independent of the 's' or
   9168        'S' flag in 'cpoptions'.
   9169        Only alphanumeric characters, '.', '-' and '_' can be used.
   9170      ]=],
   9171      full_name = 'syntax',
   9172      noglob = true,
   9173      normal_fname_chars = true,
   9174      scope = { 'buf' },
   9175      short_desc = N_('syntax to be loaded for current buffer'),
   9176      type = 'string',
   9177      varname = 'p_syn',
   9178    },
   9179    {
   9180      abbreviation = 'tcl',
   9181      defaults = '',
   9182      values = { 'left', 'uselast' },
   9183      flags = true,
   9184      deny_duplicates = true,
   9185      desc = [=[
   9186        This option controls the behavior when closing tab pages (e.g., using
   9187        |:tabclose|).  When empty Vim goes to the next (right) tab page.
   9188 
   9189        Possible values (comma-separated list):
   9190           left		If included, go to the previous tab page instead of
   9191        		the next one.
   9192           uselast	If included, go to the previously used tab page if
   9193        		possible.  This option takes precedence over the
   9194        		others.
   9195      ]=],
   9196      full_name = 'tabclose',
   9197      list = 'onecomma',
   9198      scope = { 'global' },
   9199      short_desc = N_('which tab page to focus when closing a tab'),
   9200      type = 'string',
   9201      varname = 'p_tcl',
   9202      flags_varname = 'tcl_flags',
   9203    },
   9204    {
   9205      abbreviation = 'tal',
   9206      cb = 'did_set_tabline',
   9207      defaults = '',
   9208      desc = [=[
   9209        When non-empty, this option determines the content of the tab pages
   9210        line at the top of the Vim window.  When empty Vim will use a default
   9211        tab pages line.  See |setting-tabline| for more info.
   9212 
   9213        The tab pages line only appears as specified with the 'showtabline'
   9214        option and only when there is no GUI tab line.  When 'e' is in
   9215        'guioptions' and the GUI supports a tab line 'guitablabel' is used
   9216        instead.  Note that the two tab pages lines are very different.
   9217 
   9218        The value is evaluated like with 'statusline'.  You can use
   9219        |tabpagenr()|, |tabpagewinnr()| and |tabpagebuflist()| to figure out
   9220        the text to be displayed.  Use "%1T" for the first label, "%2T" for
   9221        the second one, etc.  Use "%X" items for closing labels.
   9222 
   9223        When changing something that is used in 'tabline' that does not
   9224        trigger it to be updated, use |:redrawtabline|.
   9225        This option cannot be set in a modeline when 'modelineexpr' is off.
   9226 
   9227        Keep in mind that only one of the tab pages is the current one, others
   9228        are invisible and you can't jump to their windows.
   9229      ]=],
   9230      full_name = 'tabline',
   9231      modelineexpr = true,
   9232      redraw = { 'tabline' },
   9233      scope = { 'global' },
   9234      short_desc = N_('custom format for the console tab pages line'),
   9235      type = 'string',
   9236      varname = 'p_tal',
   9237    },
   9238    {
   9239      abbreviation = 'tpm',
   9240      defaults = 50,
   9241      desc = [=[
   9242        Maximum number of tab pages to be opened by the |-p| command line
   9243        argument or the ":tab all" command. |tabpage|
   9244      ]=],
   9245      full_name = 'tabpagemax',
   9246      scope = { 'global' },
   9247      short_desc = N_('maximum number of tab pages for |-p| and "tab all"'),
   9248      type = 'number',
   9249      varname = 'p_tpm',
   9250    },
   9251    {
   9252      abbreviation = 'ts',
   9253      cb = 'did_set_shiftwidth_tabstop',
   9254      defaults = 8,
   9255      desc = [=[
   9256        Defines the column multiple used to display the Horizontal Tab
   9257        character (ASCII 9); a Horizontal Tab always advances to the next tab
   9258        stop.
   9259        The value must be at least 1 and at most 9999.
   9260        If 'vartabstop' is set, this option is ignored.
   9261        Leave it at 8 unless you have a strong reason (see usr |30.5|).
   9262      ]=],
   9263      full_name = 'tabstop',
   9264      redraw = { 'current_buffer' },
   9265      scope = { 'buf' },
   9266      short_desc = N_('number of spaces that <Tab> in file uses'),
   9267      type = 'number',
   9268      varname = 'p_ts',
   9269    },
   9270    {
   9271      abbreviation = 'tbs',
   9272      defaults = true,
   9273      desc = [=[
   9274        When searching for a tag (e.g., for the |:ta| command), Vim can either
   9275        use a binary search or a linear search in a tags file.  Binary
   9276        searching makes searching for a tag a LOT faster, but a linear search
   9277        will find more tags if the tags file wasn't properly sorted.
   9278        Vim normally assumes that your tags files are sorted, or indicate that
   9279        they are not sorted.  Only when this is not the case does the
   9280        'tagbsearch' option need to be switched off.
   9281 
   9282        When 'tagbsearch' is on, binary searching is first used in the tags
   9283        files.  In certain situations, Vim will do a linear search instead for
   9284        certain files, or retry all files with a linear search.  When
   9285        'tagbsearch' is off, only a linear search is done.
   9286 
   9287        Linear searching is done anyway, for one file, when Vim finds a line
   9288        at the start of the file indicating that it's not sorted: >
   9289           !_TAG_FILE_SORTED	0	/some comment/
   9290        <	[The whitespace before and after the '0' must be a single <Tab>]
   9291 
   9292        When a binary search was done and no match was found in any of the
   9293        files listed in 'tags', and case is ignored or a pattern is used
   9294        instead of a normal tag name, a retry is done with a linear search.
   9295        Tags in unsorted tags files, and matches with different case will only
   9296        be found in the retry.
   9297 
   9298        If a tag file indicates that it is case-fold sorted, the second,
   9299        linear search can be avoided when case is ignored.  Use a value of '2'
   9300        in the "!_TAG_FILE_SORTED" line for this.  A tag file can be case-fold
   9301        sorted with the -f switch to "sort" in most unices, as in the command:
   9302        "sort -f -o tags tags".  For Universal ctags and Exuberant ctags
   9303        version 5.x or higher (at least 5.5) the --sort=foldcase switch can be
   9304        used for this as well.  Note that case must be folded to uppercase for
   9305        this to work.
   9306 
   9307        By default, tag searches are case-sensitive.  Case is ignored when
   9308        'ignorecase' is set and 'tagcase' is "followic", or when 'tagcase' is
   9309        "ignore".
   9310        Also when 'tagcase' is "followscs" and 'smartcase' is set, or
   9311        'tagcase' is "smart", and the pattern contains only lowercase
   9312        characters.
   9313 
   9314        When 'tagbsearch' is off, tags searching is slower when a full match
   9315        exists, but faster when no full match exists.  Tags in unsorted tags
   9316        files may only be found with 'tagbsearch' off.
   9317        When the tags file is not sorted, or sorted in a wrong way (not on
   9318        ASCII byte value), 'tagbsearch' should be off, or the line given above
   9319        must be included in the tags file.
   9320        This option doesn't affect commands that find all matching tags (e.g.,
   9321        command-line completion and ":help").
   9322      ]=],
   9323      full_name = 'tagbsearch',
   9324      scope = { 'global' },
   9325      short_desc = N_('use binary searching in tags files'),
   9326      type = 'boolean',
   9327      varname = 'p_tbs',
   9328    },
   9329    {
   9330      abbreviation = 'tc',
   9331      cb = 'did_set_tagcase',
   9332      defaults = 'followic',
   9333      values = { 'followic', 'ignore', 'match', 'followscs', 'smart' },
   9334      flags = true,
   9335      desc = [=[
   9336        This option specifies how case is handled when searching the tags
   9337        file:
   9338           followic	Follow the 'ignorecase' option
   9339           followscs    Follow the 'smartcase' and 'ignorecase' options
   9340           ignore	Ignore case
   9341           match	Match case
   9342           smart	Ignore case unless an upper case letter is used
   9343      ]=],
   9344      full_name = 'tagcase',
   9345      scope = { 'global', 'buf' },
   9346      short_desc = N_('how to handle case when searching in tags files'),
   9347      type = 'string',
   9348      varname = 'p_tc',
   9349      flags_varname = 'tc_flags',
   9350    },
   9351    {
   9352      abbreviation = 'tfu',
   9353      cb = 'did_set_tagfunc',
   9354      defaults = '',
   9355      desc = [=[
   9356        This option specifies a function to be used to perform tag searches
   9357        (including |taglist()|).
   9358        The function gets the tag pattern and should return a List of matching
   9359        tags.  See |tag-function| for an explanation of how to write the
   9360        function and an example.  The value can be the name of a function, a
   9361        |lambda| or a |Funcref|.  See |option-value-function| for more
   9362        information.
   9363        This option cannot be set from a |modeline| or in the |sandbox|, for
   9364        security reasons.
   9365      ]=],
   9366      full_name = 'tagfunc',
   9367      func = true,
   9368      scope = { 'buf' },
   9369      secure = true,
   9370      short_desc = N_('function used to perform tag searches'),
   9371      type = 'string',
   9372      varname = 'p_tfu',
   9373    },
   9374    {
   9375      abbreviation = 'tl',
   9376      defaults = 0,
   9377      desc = [=[
   9378        If non-zero, tags are significant up to this number of characters.
   9379      ]=],
   9380      full_name = 'taglength',
   9381      scope = { 'global' },
   9382      short_desc = N_('number of significant characters for a tag'),
   9383      type = 'number',
   9384      varname = 'p_tl',
   9385    },
   9386    {
   9387      abbreviation = 'tr',
   9388      defaults = true,
   9389      desc = [=[
   9390        If on and using a tags file in another directory, file names in that
   9391        tags file are relative to the directory where the tags file is.
   9392      ]=],
   9393      full_name = 'tagrelative',
   9394      scope = { 'global' },
   9395      short_desc = N_('file names in tag file are relative'),
   9396      type = 'boolean',
   9397      varname = 'p_tr',
   9398    },
   9399    {
   9400      abbreviation = 'tag',
   9401      defaults = './tags;,tags',
   9402      deny_duplicates = true,
   9403      desc = [=[
   9404        Filenames for the tag command, separated by spaces or commas.  To
   9405        include a space or comma in a file name, precede it with backslashes
   9406        (see |option-backslash| about including spaces/commas and backslashes).
   9407        When a file name starts with "./", the '.' is replaced with the path
   9408        of the current file.  But only when the 'd' flag is not included in
   9409        'cpoptions'.  Environment variables are expanded |:set_env|.  Also see
   9410        |tags-option|.
   9411        "*", "**" and other wildcards can be used to search for tags files in
   9412        a directory tree.  See |file-searching|.  E.g., "/lib/**/tags" will
   9413        find all files named "tags" below "/lib".  The filename itself cannot
   9414        contain wildcards, it is used as-is.  E.g., "/lib/**/tags?" will find
   9415        files called "tags?".
   9416        The |tagfiles()| function can be used to get a list of the file names
   9417        actually used.
   9418        The use of |:set+=| and |:set-=| is preferred when adding or removing
   9419        file names from the list.  This avoids problems when a future version
   9420        uses another default.
   9421      ]=],
   9422      expand = true,
   9423      full_name = 'tags',
   9424      list = 'onecomma',
   9425      scope = { 'global', 'buf' },
   9426      short_desc = N_('list of file names used by the tag command'),
   9427      tags = { 'E433' },
   9428      type = 'string',
   9429      varname = 'p_tags',
   9430    },
   9431    {
   9432      abbreviation = 'tgst',
   9433      defaults = true,
   9434      desc = [=[
   9435        When on, the |tagstack| is used normally.  When off, a ":tag" or
   9436        ":tselect" command with an argument will not push the tag onto the
   9437        tagstack.  A following ":tag" without an argument, a ":pop" command or
   9438        any other command that uses the tagstack will use the unmodified
   9439        tagstack, but does change the pointer to the active entry.
   9440        Resetting this option is useful when using a ":tag" command in a
   9441        mapping which should not change the tagstack.
   9442      ]=],
   9443      full_name = 'tagstack',
   9444      scope = { 'global' },
   9445      short_desc = N_('push tags onto the tag stack'),
   9446      type = 'boolean',
   9447      varname = 'p_tgst',
   9448    },
   9449    {
   9450      abbreviation = 'tbidi',
   9451      defaults = false,
   9452      desc = [=[
   9453        The terminal is in charge of Bi-directionality of text (as specified
   9454        by Unicode).  The terminal is also expected to do the required shaping
   9455        that some languages (such as Arabic) require.
   9456        Setting this option implies that 'rightleft' will not be set when
   9457        'arabic' is set and the value of 'arabicshape' will be ignored.
   9458        Note that setting 'termbidi' has the immediate effect that
   9459        'arabicshape' is ignored, but 'rightleft' isn't changed automatically.
   9460        For further details see |l10n-arabic.txt|.
   9461      ]=],
   9462      full_name = 'termbidi',
   9463      scope = { 'global' },
   9464      short_desc = N_('terminal takes care of bi-directionality'),
   9465      type = 'boolean',
   9466      varname = 'p_tbidi',
   9467    },
   9468    {
   9469      abbreviation = 'tenc',
   9470      defaults = '',
   9471      full_name = 'termencoding',
   9472      scope = { 'global' },
   9473      short_desc = N_('Terminal encoding'),
   9474      type = 'string',
   9475      immutable = true,
   9476    },
   9477    {
   9478      abbreviation = 'tgc',
   9479      defaults = false,
   9480      desc = [=[
   9481        Enables 24-bit RGB color in the |TUI|.  Uses "gui" |:highlight|
   9482        attributes instead of "cterm" attributes. |guifg|
   9483        Requires an ISO-8613-3 compatible terminal.
   9484 
   9485        Nvim will automatically attempt to determine if the host terminal
   9486        supports 24-bit color and will enable this option if it does
   9487        (unless explicitly disabled by the user).
   9488      ]=],
   9489      full_name = 'termguicolors',
   9490      redraw = { 'ui_option' },
   9491      scope = { 'global' },
   9492      short_desc = N_('Terminal true color support'),
   9493      type = 'boolean',
   9494      varname = 'p_tgc',
   9495    },
   9496    {
   9497      abbreviation = 'tpf',
   9498      defaults = 'BS,HT,ESC,DEL',
   9499      values = { 'BS', 'HT', 'FF', 'ESC', 'DEL', 'C0', 'C1' },
   9500      flags = true,
   9501      deny_duplicates = true,
   9502      desc = [=[
   9503        A comma-separated list of options for specifying control characters
   9504        to be removed from the text pasted into the terminal window. The
   9505        supported values are:
   9506 
   9507           BS	    Backspace
   9508 
   9509           HT	    TAB
   9510 
   9511           FF	    Form feed
   9512 
   9513           ESC	    Escape
   9514 
   9515           DEL	    DEL
   9516 
   9517           C0	    Other control characters, excluding Line feed and
   9518        	    Carriage return < ' '
   9519 
   9520           C1	    Control characters 0x80...0x9F
   9521      ]=],
   9522      full_name = 'termpastefilter',
   9523      list = 'onecomma',
   9524      scope = { 'global' },
   9525      type = 'string',
   9526      varname = 'p_tpf',
   9527      flags_varname = 'tpf_flags',
   9528    },
   9529    {
   9530      defaults = true,
   9531      desc = [=[
   9532        If the host terminal supports it, buffer all screen updates
   9533        made during a redraw cycle so that each screen is displayed in
   9534        the terminal all at once. This can prevent tearing or flickering
   9535        when the terminal updates faster than Nvim can redraw.
   9536      ]=],
   9537      full_name = 'termsync',
   9538      redraw = { 'ui_option' },
   9539      scope = { 'global' },
   9540      short_desc = N_('synchronize redraw output with the host terminal'),
   9541      type = 'boolean',
   9542      varname = 'p_termsync',
   9543    },
   9544    {
   9545      defaults = false,
   9546      full_name = 'terse',
   9547      scope = { 'global' },
   9548      short_desc = N_('Deprecated'),
   9549      type = 'boolean',
   9550      immutable = true,
   9551    },
   9552    {
   9553      abbreviation = 'tw',
   9554      cb = 'did_set_textwidth',
   9555      defaults = 0,
   9556      desc = [=[
   9557        Maximum width of text that is being inserted.  A longer line will be
   9558        broken after white space to get this width.  A zero value disables
   9559        this.
   9560        When 'textwidth' is zero, 'wrapmargin' may be used.  See also
   9561        'formatoptions' and |ins-textwidth|.
   9562        When 'formatexpr' is set it will be used to break the line.
   9563      ]=],
   9564      full_name = 'textwidth',
   9565      redraw = { 'current_buffer', 'highlight_only' },
   9566      scope = { 'buf' },
   9567      short_desc = N_('maximum width of text that is being inserted'),
   9568      type = 'number',
   9569      varname = 'p_tw',
   9570    },
   9571    {
   9572      abbreviation = 'tsr',
   9573      defaults = '',
   9574      deny_duplicates = true,
   9575      desc = [=[
   9576        List of file names, separated by commas, that are used to lookup words
   9577        for thesaurus completion commands |i_CTRL-X_CTRL-T|.  See
   9578        |compl-thesaurus|.
   9579 
   9580        This option is not used if 'thesaurusfunc' is set, either for the
   9581        buffer or globally.
   9582 
   9583        To include a comma in a file name precede it with a backslash.  Spaces
   9584        after a comma are ignored, otherwise spaces are included in the file
   9585        name.  See |option-backslash| about using backslashes.  The use of
   9586        |:set+=| and |:set-=| is preferred when adding or removing directories
   9587        from the list.  This avoids problems when a future version uses
   9588        another default.
   9589        Environment variables are expanded |:set_env|.
   9590        Backticks cannot be used in this option for security reasons.
   9591      ]=],
   9592      expand = true,
   9593      full_name = 'thesaurus',
   9594      list = 'onecomma',
   9595      normal_dname_chars = true,
   9596      scope = { 'global', 'buf' },
   9597      short_desc = N_('list of thesaurus files for keyword completion'),
   9598      type = 'string',
   9599      varname = 'p_tsr',
   9600    },
   9601    {
   9602      abbreviation = 'tsrfu',
   9603      cb = 'did_set_thesaurusfunc',
   9604      defaults = '',
   9605      desc = [=[
   9606        This option specifies a function to be used for thesaurus completion
   9607        with CTRL-X CTRL-T.  |i_CTRL-X_CTRL-T| See |compl-thesaurusfunc|.
   9608        The value can be the name of a function, a |lambda| or a |Funcref|.
   9609        See |option-value-function| for more information.
   9610 
   9611        This option cannot be set from a |modeline| or in the |sandbox|, for
   9612        security reasons.
   9613      ]=],
   9614      full_name = 'thesaurusfunc',
   9615      func = true,
   9616      scope = { 'global', 'buf' },
   9617      secure = true,
   9618      short_desc = N_('function used for thesaurus completion'),
   9619      type = 'string',
   9620      varname = 'p_tsrfu',
   9621    },
   9622    {
   9623      abbreviation = 'top',
   9624      defaults = false,
   9625      desc = [=[
   9626        When on: The tilde command "~" behaves like an operator.
   9627      ]=],
   9628      full_name = 'tildeop',
   9629      scope = { 'global' },
   9630      short_desc = N_('tilde command "~" behaves like an operator'),
   9631      type = 'boolean',
   9632      varname = 'p_to',
   9633    },
   9634    {
   9635      abbreviation = 'to',
   9636      defaults = true,
   9637      desc = [=[
   9638        This option and 'timeoutlen' determine the behavior when part of a
   9639        mapped key sequence has been received. For example, if <c-f> is
   9640        pressed and 'timeout' is set, Nvim will wait 'timeoutlen' milliseconds
   9641        for any key that can follow <c-f> in a mapping.
   9642      ]=],
   9643      full_name = 'timeout',
   9644      scope = { 'global' },
   9645      short_desc = N_('time out on mappings and key codes'),
   9646      type = 'boolean',
   9647      varname = 'p_timeout',
   9648    },
   9649    {
   9650      abbreviation = 'tm',
   9651      defaults = 1000,
   9652      desc = [=[
   9653        Time in milliseconds to wait for a mapped sequence to complete.
   9654      ]=],
   9655      full_name = 'timeoutlen',
   9656      scope = { 'global' },
   9657      short_desc = N_('time out time in milliseconds'),
   9658      type = 'number',
   9659      varname = 'p_tm',
   9660    },
   9661    {
   9662      cb = 'did_set_title_icon',
   9663      defaults = false,
   9664      desc = [=[
   9665        When on, the title of the window will be set to the value of
   9666        'titlestring' (if it is not empty), or to:
   9667        	filename [+=-] (path) - Nvim
   9668        Where:
   9669        	filename	the name of the file being edited
   9670        	-		indicates the file cannot be modified, 'ma' off
   9671        	+		indicates the file was modified
   9672        	=		indicates the file is read-only
   9673        	=+		indicates the file is read-only and modified
   9674        	(path)		is the path of the file being edited
   9675        	- Nvim		the server name |v:servername| or "Nvim"
   9676      ]=],
   9677      full_name = 'title',
   9678      scope = { 'global' },
   9679      short_desc = N_('set the title of the window'),
   9680      type = 'boolean',
   9681      varname = 'p_title',
   9682    },
   9683    {
   9684      cb = 'did_set_titlelen',
   9685      defaults = 85,
   9686      desc = [=[
   9687        Gives the percentage of 'columns' to use for the length of the window
   9688        title.  When the title is longer, only the end of the path name is
   9689        shown.  A '<' character before the path name is used to indicate this.
   9690        Using a percentage makes this adapt to the width of the window.  But
   9691        it won't work perfectly, because the actual number of characters
   9692        available also depends on the font used and other things in the title
   9693        bar.  When 'titlelen' is zero the full path is used.  Otherwise,
   9694        values from 1 to 30000 percent can be used.
   9695        'titlelen' is also used for the 'titlestring' option.
   9696      ]=],
   9697      full_name = 'titlelen',
   9698      scope = { 'global' },
   9699      short_desc = N_("of 'columns' used for window title"),
   9700      type = 'number',
   9701      varname = 'p_titlelen',
   9702    },
   9703    {
   9704      defaults = '',
   9705      desc = [=[
   9706        If not empty, this option will be used to set the window title when
   9707        exiting.  Only if 'title' is enabled.
   9708        This option cannot be set from a |modeline| or in the |sandbox|, for
   9709        security reasons.
   9710      ]=],
   9711      full_name = 'titleold',
   9712      no_mkrc = true,
   9713      scope = { 'global' },
   9714      secure = true,
   9715      short_desc = N_('title, restored when exiting'),
   9716      type = 'string',
   9717      varname = 'p_titleold',
   9718    },
   9719    {
   9720      cb = 'did_set_titlestring',
   9721      defaults = '',
   9722      desc = [=[
   9723        When this option is not empty, it will be used for the title of the
   9724        window.  This happens only when the 'title' option is on.
   9725 
   9726        When this option contains printf-style '%' items, they will be
   9727        expanded according to the rules used for 'statusline'.  If it contains
   9728        an invalid '%' format, the value is used as-is and no error or warning
   9729        will be given when the value is set.
   9730 
   9731        The default behaviour is equivalent to: >vim
   9732            set titlestring=%t%(\ %M%)%(\ \(%{expand(\"%:~:h\")}\)%)%a\ -\ Nvim
   9733        <
   9734        This option cannot be set in a modeline when 'modelineexpr' is off.
   9735 
   9736        Example: >vim
   9737            auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p")
   9738            set title titlestring=%<%F%=%l/%L-%P titlelen=70
   9739        <	The value of 'titlelen' is used to align items in the middle or right
   9740        of the available space.
   9741        Some people prefer to have the file name first: >vim
   9742            set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
   9743        <	Note the use of "%{ }" and an expression to get the path of the file,
   9744        without the file name.  The "%( %)" constructs are used to add a
   9745        separating space only when needed.
   9746        NOTE: Use of special characters in 'titlestring' may cause the display
   9747        to be garbled (e.g., when it contains a CR or NL character).
   9748      ]=],
   9749      full_name = 'titlestring',
   9750      modelineexpr = true,
   9751      scope = { 'global' },
   9752      short_desc = N_('to use for the Vim window title'),
   9753      type = 'string',
   9754      varname = 'p_titlestring',
   9755    },
   9756    {
   9757      defaults = true,
   9758      desc = [=[
   9759        This option and 'ttimeoutlen' determine the behavior when part of a
   9760        key code sequence has been received by the |TUI|.
   9761 
   9762        For example if <Esc> (the \x1b byte) is received and 'ttimeout' is
   9763        set, Nvim waits 'ttimeoutlen' milliseconds for the terminal to
   9764        complete a key code sequence. If no input arrives before the timeout,
   9765        a single <Esc> is assumed. Many TUI cursor key codes start with <Esc>.
   9766 
   9767        On very slow systems this may fail, causing cursor keys not to work
   9768        sometimes.  If you discover this problem you can ":set ttimeoutlen=9999".
   9769        Nvim will wait for the next character to arrive after an <Esc>.
   9770      ]=],
   9771      full_name = 'ttimeout',
   9772      redraw = { 'ui_option' },
   9773      scope = { 'global' },
   9774      short_desc = N_('out on mappings'),
   9775      type = 'boolean',
   9776      varname = 'p_ttimeout',
   9777    },
   9778    {
   9779      abbreviation = 'ttm',
   9780      defaults = 50,
   9781      desc = [=[
   9782        Time in milliseconds to wait for a key code sequence to complete. Also
   9783        used for CTRL-\ CTRL-N and CTRL-\ CTRL-G when part of a command has
   9784        been typed.
   9785      ]=],
   9786      full_name = 'ttimeoutlen',
   9787      redraw = { 'ui_option' },
   9788      scope = { 'global' },
   9789      short_desc = N_('time out time for key codes in milliseconds'),
   9790      type = 'number',
   9791      varname = 'p_ttm',
   9792    },
   9793    {
   9794      abbreviation = 'tf',
   9795      defaults = true,
   9796      full_name = 'ttyfast',
   9797      no_mkrc = true,
   9798      scope = { 'global' },
   9799      short_desc = N_('Deprecated'),
   9800      type = 'boolean',
   9801      immutable = true,
   9802    },
   9803    {
   9804      abbreviation = 'udir',
   9805      defaults = '',
   9806      deny_duplicates = true,
   9807      desc = [=[
   9808        List of directory names for undo files, separated with commas.
   9809        See 'backupdir' for details of the format.
   9810        "." means using the directory of the file.  The undo file name for
   9811        "file.txt" is ".file.txt.un~".
   9812        For other directories the file name is the full path of the edited
   9813        file, with path separators replaced with "%".
   9814        When writing: The first directory that exists is used.  "." always
   9815        works, no directories after "." will be used for writing.  If none of
   9816        the directories exist Nvim will attempt to create the last directory in
   9817        the list.
   9818        When reading all entries are tried to find an undo file.  The first
   9819        undo file that exists is used.  When it cannot be read an error is
   9820        given, no further entry is used.
   9821        See |undo-persistence|.
   9822        Environment variables are expanded |:set_env|.
   9823        This option cannot be set from a |modeline| or in the |sandbox|, for
   9824        security reasons.
   9825 
   9826        Note that unlike 'directory' and 'backupdir', 'undodir' always acts as
   9827        though the trailing slashes are present (see 'backupdir' for what this
   9828        means).
   9829      ]=],
   9830      expand = 'nodefault',
   9831      full_name = 'undodir',
   9832      list = 'onecomma',
   9833      scope = { 'global' },
   9834      secure = true,
   9835      short_desc = N_('where to store undo files'),
   9836      tags = { 'E5003' },
   9837      type = 'string',
   9838      varname = 'p_udir',
   9839    },
   9840    {
   9841      abbreviation = 'udf',
   9842      cb = 'did_set_undofile',
   9843      defaults = false,
   9844      desc = [=[
   9845        When on, Vim automatically saves undo history to an undo file when
   9846        writing a buffer to a file, and restores undo history from the same
   9847        file on buffer read.
   9848        The directory where the undo file is stored is specified by 'undodir'.
   9849        For more information about this feature see |undo-persistence|.
   9850        The undo file is not read when 'undoreload' causes the buffer from
   9851        before a reload to be saved for undo.
   9852        When 'undofile' is turned off the undo file is NOT deleted.
   9853      ]=],
   9854      full_name = 'undofile',
   9855      scope = { 'buf' },
   9856      short_desc = N_('save undo information in a file'),
   9857      type = 'boolean',
   9858      varname = 'p_udf',
   9859    },
   9860    {
   9861      abbreviation = 'ul',
   9862      cb = 'did_set_undolevels',
   9863      defaults = 1000,
   9864      desc = [=[
   9865        Maximum number of changes that can be undone.  Since undo information
   9866        is kept in memory, higher numbers will cause more memory to be used.
   9867        Nevertheless, a single change can already use a large amount of
   9868        memory.  Set to 0 for Vi compatibility: One level of undo and "u"
   9869        undoes itself: >vim
   9870        	set ul=0
   9871        <	But you can also get Vi compatibility by including the 'u' flag in
   9872        'cpoptions', and still be able to use CTRL-R to repeat undo.
   9873        Also see |undo-two-ways|.
   9874        Set to -1 for no undo at all.  You might want to do this only for the
   9875        current buffer: >vim
   9876        	setlocal ul=-1
   9877        <	This helps when you run out of memory for a single change.
   9878 
   9879        The local value is set to -123456 when the global value is to be used.
   9880 
   9881        Also see |clear-undo|.
   9882      ]=],
   9883      full_name = 'undolevels',
   9884      scope = { 'global', 'buf' },
   9885      short_desc = N_('maximum number of changes that can be undone'),
   9886      type = 'number',
   9887      varname = 'p_ul',
   9888    },
   9889    {
   9890      abbreviation = 'ur',
   9891      defaults = 10000,
   9892      desc = [=[
   9893        Save the whole buffer for undo when reloading it.  This applies to the
   9894        ":e!" command and reloading for when the buffer changed outside of
   9895        Vim. |FileChangedShell|
   9896        The save only happens when this option is negative or when the number
   9897        of lines is smaller than the value of this option.
   9898        Set this option to zero to disable undo for a reload.
   9899 
   9900        When saving undo for a reload, any undo file is not read.
   9901 
   9902        Note that this causes the whole buffer to be stored in memory.  Set
   9903        this option to a lower value if you run out of memory.
   9904      ]=],
   9905      full_name = 'undoreload',
   9906      scope = { 'global' },
   9907      short_desc = N_('max nr of lines to save for undo on a buffer reload'),
   9908      type = 'number',
   9909      varname = 'p_ur',
   9910    },
   9911    {
   9912      abbreviation = 'uc',
   9913      cb = 'did_set_updatecount',
   9914      defaults = 200,
   9915      desc = [=[
   9916        After typing this many characters the swap file will be written to
   9917        disk.  When zero, no swap file will be created at all (see chapter on
   9918        recovery |crash-recovery|).  'updatecount' is set to zero by starting
   9919        Vim with the "-n" option, see |startup|.  When editing in readonly
   9920        mode this option will be initialized to 10000.
   9921        The swapfile can be disabled per buffer with 'swapfile'.
   9922        When 'updatecount' is set from zero to non-zero, swap files are
   9923        created for all buffers that have 'swapfile' set.  When 'updatecount'
   9924        is set to zero, existing swap files are not deleted.
   9925        This option has no meaning in buffers where 'buftype' is "nofile" or
   9926        "nowrite".
   9927      ]=],
   9928      full_name = 'updatecount',
   9929      scope = { 'global' },
   9930      short_desc = N_('after this many characters flush swap file'),
   9931      type = 'number',
   9932      varname = 'p_uc',
   9933    },
   9934    {
   9935      abbreviation = 'ut',
   9936      defaults = 4000,
   9937      desc = [=[
   9938        If this many milliseconds nothing is typed the swap file will be
   9939        written to disk (see |crash-recovery|).  Also used for the
   9940        |CursorHold| autocommand event.
   9941      ]=],
   9942      full_name = 'updatetime',
   9943      scope = { 'global' },
   9944      short_desc = N_('after this many milliseconds flush swap file'),
   9945      type = 'number',
   9946      varname = 'p_ut',
   9947    },
   9948    {
   9949      abbreviation = 'vsts',
   9950      cb = 'did_set_varsofttabstop',
   9951      defaults = '',
   9952      desc = [=[
   9953        Defines variable-width soft tab stops.  The value is a comma-separated
   9954        list of widths in columns.  Each width defines the number of columns
   9955        before the next soft tab stop.  The last value repeats indefinitely.
   9956 
   9957        For example, when editing assembly language files where statements
   9958        start in the 9th column and comments in the 41st, it may be useful
   9959        to use the following: >vim
   9960        	set varsofttabstop=8,32,8
   9961        <	This sets soft tab stops at column 8, then at column 40 (8 + 32), and
   9962        every 8 columns thereafter.
   9963 
   9964        Note: this setting overrides 'softtabstop'.
   9965        See section |30.5| of the user manual for detailed explanations on how
   9966        Vim works with tabs and spaces.
   9967      ]=],
   9968      full_name = 'varsofttabstop',
   9969      list = 'comma',
   9970      scope = { 'buf' },
   9971      short_desc = N_('list of numbers of spaces that <Tab> uses while editing'),
   9972      type = 'string',
   9973      varname = 'p_vsts',
   9974    },
   9975    {
   9976      abbreviation = 'vts',
   9977      cb = 'did_set_vartabstop',
   9978      defaults = '',
   9979      desc = [=[
   9980        Defines variable-width tab stops.  The value is a comma-separated list
   9981        of widths in columns.  Each width defines the number of columns before
   9982        the next tab stop; the last value repeats indefinitely.
   9983 
   9984        For example: >
   9985        	:set vartabstop=4,8
   9986        <	This places the first tab stop 4 columns from the start of the line
   9987        and each subsequent tab stop 8 columns apart.
   9988 
   9989        Note: this setting overrides 'tabstop'.
   9990        On UNIX, it is recommended to keep the default tabstop value of 8.
   9991        Consider setting 'varsofttabstop' instead.
   9992        See section |30.5| of the user manual for detailed explanations on how
   9993        Vim works with tabs and spaces.
   9994      ]=],
   9995      full_name = 'vartabstop',
   9996      list = 'comma',
   9997      redraw = { 'current_buffer' },
   9998      scope = { 'buf' },
   9999      short_desc = N_('list of numbers of spaces that <Tab> in file uses'),
  10000      type = 'string',
  10001      varname = 'p_vts',
  10002    },
  10003    {
  10004      abbreviation = 'vbs',
  10005      defaults = 0,
  10006      desc = [=[
  10007        Sets the verbosity level.  Also set by |-V| and |:verbose|.
  10008 
  10009        Tracing of assignments to options, mappings, etc. in Lua scripts is
  10010        enabled at level 1; Lua scripts are not traced when 'verbose' is 0,
  10011        for performance.
  10012 
  10013        If greater than or equal to a given level, Nvim produces the following
  10014        messages:
  10015 
  10016        Level   Messages ~
  10017        ----------------------------------------------------------------------
  10018        1	Enables Lua tracing (see above). Does not produce messages.
  10019        2	When a file is ":source"'ed, or |shada| file is read or written.
  10020        3	UI info, terminal capabilities.
  10021        4	Shell commands.
  10022        5	Every searched tags file and include file.
  10023        8	Files for which a group of autocommands is executed.
  10024        9	Executed autocommands.
  10025        11	Finding items in a path.
  10026        12	Vimscript function calls.
  10027        13	When an exception is thrown, caught, finished, or discarded.
  10028        14	Anything pending in a ":finally" clause.
  10029        15	Ex commands from a script (truncated at 200 characters).
  10030        16	Ex commands.
  10031 
  10032        If 'verbosefile' is set then the verbose messages are not displayed.
  10033      ]=],
  10034      full_name = 'verbose',
  10035      redraw = { 'ui_option' },
  10036      scope = { 'global' },
  10037      short_desc = N_('give informative messages'),
  10038      type = 'number',
  10039      varname = 'p_verbose',
  10040    },
  10041    {
  10042      abbreviation = 'vfile',
  10043      cb = 'did_set_verbosefile',
  10044      defaults = '',
  10045      desc = [=[
  10046        When not empty all messages are written in a file with this name.
  10047        When the file exists messages are appended.
  10048        Writing to the file ends when Vim exits or when 'verbosefile' is made
  10049        empty.  Writes are buffered, thus may not show up for some time.
  10050        Setting 'verbosefile' to a new value is like making it empty first.
  10051        The difference with |:redir| is that verbose messages are not
  10052        displayed when 'verbosefile' is set.
  10053        Environment variables are expanded |:set_env|.
  10054        This option cannot be set from a |modeline| or in the |sandbox|, for
  10055        security reasons.
  10056      ]=],
  10057      expand = true,
  10058      full_name = 'verbosefile',
  10059      scope = { 'global' },
  10060      secure = true,
  10061      short_desc = N_('file to write messages in'),
  10062      type = 'string',
  10063      varname = 'p_vfile',
  10064    },
  10065    {
  10066      abbreviation = 'vdir',
  10067      defaults = '',
  10068      desc = [=[
  10069        Name of the directory where to store files for |:mkview|.
  10070        Environment variables are expanded |:set_env|.
  10071        This option cannot be set from a |modeline| or in the |sandbox|, for
  10072        security reasons.
  10073      ]=],
  10074      expand = 'nodefault',
  10075      full_name = 'viewdir',
  10076      scope = { 'global' },
  10077      secure = true,
  10078      short_desc = N_('directory where to store files with :mkview'),
  10079      type = 'string',
  10080      varname = 'p_vdir',
  10081    },
  10082    {
  10083      abbreviation = 'vop',
  10084      cb = 'did_set_str_generic',
  10085      defaults = 'folds,cursor,curdir',
  10086      flags = true,
  10087      deny_duplicates = true,
  10088      desc = [=[
  10089        Changes the effect of the |:mkview| command.  It is a comma-separated
  10090        list of words.  Each word enables saving and restoring something:
  10091           word		save and restore ~
  10092           cursor	cursor position in file and in window
  10093           curdir	local current directory, if set with |:lcd|
  10094           folds	manually created folds, opened/closed folds and local
  10095        		fold options
  10096           options	options and mappings local to a window or buffer (not
  10097        		global values for local options)
  10098           localoptions same as "options"
  10099           slash	|deprecated| Always enabled. Uses "/" in filenames.
  10100           unix		|deprecated| Always enabled. Uses "\n" line endings.
  10101      ]=],
  10102      expand_cb = 'expand_set_str_generic',
  10103      full_name = 'viewoptions',
  10104      list = 'onecomma',
  10105      scope = { 'global' },
  10106      short_desc = N_('specifies what to save for :mkview'),
  10107      type = 'string',
  10108      varname = 'p_vop',
  10109      flags_varname = 'vop_flags',
  10110    },
  10111    {
  10112      abbreviation = 've',
  10113      cb = 'did_set_virtualedit',
  10114      defaults = '',
  10115      values = { 'block', 'insert', 'all', 'onemore', 'none', 'NONE' },
  10116      flags = {
  10117        Block = 5,
  10118        Insert = 6,
  10119        All = 4,
  10120        Onemore = 8,
  10121        None = 16,
  10122        NoneU = 32,
  10123      },
  10124      deny_duplicates = true,
  10125      desc = [=[
  10126        A comma-separated list of these words:
  10127            block	Allow virtual editing in Visual block mode.
  10128            insert	Allow virtual editing in Insert mode.
  10129            all		Allow virtual editing in all modes.
  10130            onemore	Allow the cursor to move just past the end of the line
  10131            none	When used as the local value, do not allow virtual
  10132        		editing even when the global value is set.  When used
  10133        		as the global value, "none" is the same as "".
  10134            NONE	Alternative spelling of "none".
  10135 
  10136        Virtual editing means that the cursor can be positioned where there is
  10137        no actual character.  This can be halfway into a tab or beyond the end
  10138        of the line.  Useful for selecting a rectangle in Visual mode and
  10139        editing a table.
  10140        "onemore" is not the same, it will only allow moving the cursor just
  10141        after the last character of the line.  This makes some commands more
  10142        consistent.  Previously the cursor was always past the end of the line
  10143        if the line was empty.  But it is far from Vi compatible.  It may also
  10144        break some plugins or Vim scripts.  For example because |l| can move
  10145        the cursor after the last character.  Use with care!
  10146        Using the `$` command will move to the last character in the line, not
  10147        past it.  This may actually move the cursor to the left!
  10148        The `g$` command will move to the end of the screen line.
  10149        It doesn't make sense to combine "all" with "onemore", but you will
  10150        not get a warning for it.
  10151        When combined with other words, "none" is ignored.
  10152      ]=],
  10153      full_name = 'virtualedit',
  10154      list = 'onecomma',
  10155      redraw = { 'curswant' },
  10156      scope = { 'global', 'win' },
  10157      short_desc = N_('when to use virtual editing'),
  10158      type = 'string',
  10159      varname = 'p_ve',
  10160      flags_varname = 've_flags',
  10161    },
  10162    {
  10163      abbreviation = 'vb',
  10164      defaults = false,
  10165      desc = [=[
  10166        Use visual bell instead of beeping.  Also see 'errorbells'.
  10167      ]=],
  10168      full_name = 'visualbell',
  10169      scope = { 'global' },
  10170      short_desc = N_('use visual bell instead of beeping'),
  10171      type = 'boolean',
  10172      varname = 'p_vb',
  10173    },
  10174    {
  10175      defaults = true,
  10176      desc = [=[
  10177        Give a warning message when a shell command is used while the buffer
  10178        has been changed.
  10179      ]=],
  10180      full_name = 'warn',
  10181      scope = { 'global' },
  10182      short_desc = N_('for shell command when buffer was changed'),
  10183      type = 'boolean',
  10184      varname = 'p_warn',
  10185    },
  10186    {
  10187      abbreviation = 'ww',
  10188      cb = 'did_set_whichwrap',
  10189      defaults = 'b,s',
  10190      desc = [=[
  10191        Allow specified keys that move the cursor left/right to move to the
  10192        previous/next line when the cursor is on the first/last character in
  10193        the line.  Concatenate characters to allow this for these keys:
  10194        	char   key	  mode	~
  10195        	 b    <BS>	 Normal and Visual
  10196        	 s    <Space>	 Normal and Visual
  10197        	 h    "h"	 Normal and Visual (not recommended)
  10198        	 l    "l"	 Normal and Visual (not recommended)
  10199        	 <    <Left>	 Normal and Visual
  10200        	 >    <Right>	 Normal and Visual
  10201        	 ~    "~"	 Normal
  10202        	 [    <Left>	 Insert and Replace
  10203        	 ]    <Right>	 Insert and Replace
  10204        For example: >vim
  10205        	set ww=<,>,[,]
  10206        <	allows wrap only when cursor keys are used.
  10207        When the movement keys are used in combination with a delete or change
  10208        operator, the <EOL> also counts for a character.  This makes "3h"
  10209        different from "3dh" when the cursor crosses the end of a line.  This
  10210        is also true for "x" and "X", because they do the same as "dl" and
  10211        "dh".  If you use this, you may also want to use the mapping
  10212        ":map <BS> X" to make backspace delete the character in front of the
  10213        cursor.
  10214        When 'l' is included and it is used after an operator at the end of a
  10215        line (not an empty line) then it will not move to the next line.  This
  10216        makes "dl", "cl", "yl" etc. work normally.
  10217      ]=],
  10218      expand_cb = 'expand_set_whichwrap',
  10219      full_name = 'whichwrap',
  10220      list = 'flagscomma',
  10221      scope = { 'global' },
  10222      short_desc = N_('allow specified keys to cross line boundaries'),
  10223      type = 'string',
  10224      varname = 'p_ww',
  10225    },
  10226    {
  10227      abbreviation = 'wc',
  10228      cb = 'did_set_wildchar',
  10229      defaults = {
  10230        if_true = macros('TAB', 'number'),
  10231        doc = '<Tab>',
  10232      },
  10233      desc = [=[
  10234        Character you have to type to start wildcard expansion in the
  10235        command-line, as specified with 'wildmode'.
  10236        More info here: |cmdline-completion|.
  10237        The character is not recognized when used inside a macro.  See
  10238        'wildcharm' for that.
  10239        Some keys will not work, such as CTRL-C, <CR> and Enter.
  10240        <Esc> can be used, but hitting it twice in a row will still exit
  10241        command-line as a failsafe measure.
  10242        Although 'wc' is a number option, it can be specified as a number, a
  10243        single character, a |key-notation| (e.g. <Up>, <C-F>) or a letter
  10244        preceded with a caret (e.g. `^F` is CTRL-F): >vim
  10245        	:set wc=27
  10246        	:set wc=X
  10247        	:set wc=^I
  10248        	set wc=<Tab>
  10249        <	'wildchar' also enables completion in search pattern contexts such as
  10250        |/|, |?|, |:s|, |:g|, |:v|, and |:vim|.  To insert a literal <Tab>
  10251        instead of triggering completion, type <C-V><Tab> or "\t".
  10252        See also 'wildoptions' and |wildtrigger()|.
  10253      ]=],
  10254      full_name = 'wildchar',
  10255      scope = { 'global' },
  10256      short_desc = N_('command-line character for wildcard expansion'),
  10257      type = 'number',
  10258      varname = 'p_wc',
  10259    },
  10260    {
  10261      abbreviation = 'wcm',
  10262      cb = 'did_set_wildchar',
  10263      defaults = 0,
  10264      desc = [=[
  10265        'wildcharm' works exactly like 'wildchar', except that it is
  10266        recognized when used inside a macro.  You can find "spare"
  10267        command-line keys suitable for this option by looking at
  10268        |ex-edit-index|.  Normally you'll never actually type 'wildcharm',
  10269        just use it in mappings that automatically invoke completion mode,
  10270        e.g.: >vim
  10271        	set wcm=<C-Z>
  10272        	cnoremap ss so $vim/sessions/*.vim<C-Z>
  10273        <	Then after typing :ss you can use CTRL-P & CTRL-N.
  10274      ]=],
  10275      full_name = 'wildcharm',
  10276      scope = { 'global' },
  10277      short_desc = N_("like 'wildchar' but also works when mapped"),
  10278      type = 'number',
  10279      varname = 'p_wcm',
  10280    },
  10281    {
  10282      abbreviation = 'wig',
  10283      defaults = '',
  10284      deny_duplicates = true,
  10285      desc = [=[
  10286        A list of file patterns.  A file that matches with one of these
  10287        patterns is ignored when expanding |wildcards|, completing file or
  10288        directory names, and influences the result of |expand()|, |glob()| and
  10289        |globpath()| unless a flag is passed to disable this.
  10290        The pattern is used like with |:autocmd|, see |autocmd-pattern|.
  10291        Also see 'suffixes'.
  10292        Example: >vim
  10293        	set wildignore=*.o,*.obj
  10294        <	The use of |:set+=| and |:set-=| is preferred when adding or removing
  10295        a pattern from the list.  This avoids problems when a future version
  10296        uses another default.
  10297      ]=],
  10298      full_name = 'wildignore',
  10299      list = 'onecomma',
  10300      scope = { 'global' },
  10301      short_desc = N_('files matching these patterns are not completed'),
  10302      type = 'string',
  10303      varname = 'p_wig',
  10304    },
  10305    {
  10306      abbreviation = 'wic',
  10307      defaults = false,
  10308      desc = [=[
  10309        When set case is ignored when completing file names and directories.
  10310        Has no effect when 'fileignorecase' is set.
  10311        Does not apply when the shell is used to expand wildcards, which
  10312        happens when there are special characters.
  10313      ]=],
  10314      full_name = 'wildignorecase',
  10315      scope = { 'global' },
  10316      short_desc = N_('ignore case when completing file names'),
  10317      type = 'boolean',
  10318      varname = 'p_wic',
  10319    },
  10320    {
  10321      abbreviation = 'wmnu',
  10322      defaults = true,
  10323      desc = [=[
  10324        When 'wildmenu' is on, command-line completion operates in an enhanced
  10325        mode.  On pressing 'wildchar' (usually <Tab>) to invoke completion,
  10326        the possible matches are shown.
  10327        When 'wildoptions' contains "pum", then the completion matches are
  10328        shown in a popup menu.  Otherwise they are displayed just above the
  10329        command line, with the first match highlighted (overwriting the status
  10330        line, if there is one).
  10331        Keys that show the previous/next match, such as <Tab> or
  10332        CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
  10333        'wildmode' must specify "full": "longest" and "list" do not start
  10334        'wildmenu' mode. You can check the current mode with |wildmenumode()|.
  10335        The menu is cancelled when a key is hit that is not used for selecting
  10336        a completion.
  10337 
  10338        While the menu is active these keys have special meanings:
  10339        CTRL-P		- go to the previous entry
  10340        CTRL-N		- go to the next entry
  10341        <Left> <Right>	- select previous/next match (like CTRL-P/CTRL-N)
  10342        <PageUp>	- select a match several entries back
  10343        <PageDown>	- select a match several entries further
  10344        <Up>		- in filename/menu name completion: move up into
  10345        		  parent directory or parent menu.
  10346        <Down>		- in filename/menu name completion: move into a
  10347        		  subdirectory or submenu.
  10348        <CR>		- in menu completion, when the cursor is just after a
  10349        		  dot: move into a submenu.
  10350        CTRL-E		- end completion, go back to what was there before
  10351        		  selecting a match.
  10352        CTRL-Y		- accept the currently selected match and stop
  10353        		  completion.
  10354 
  10355        If you want <Left> and <Right> to move the cursor instead of selecting
  10356        a different match, use this: >vim
  10357        	cnoremap <Left> <Space><BS><Left>
  10358        	cnoremap <Right> <Space><BS><Right>
  10359        <
  10360        |hl-WildMenu| highlights the current match.
  10361      ]=],
  10362      full_name = 'wildmenu',
  10363      scope = { 'global' },
  10364      short_desc = N_('use menu for command line completion'),
  10365      type = 'boolean',
  10366      varname = 'p_wmnu',
  10367    },
  10368    {
  10369      abbreviation = 'wim',
  10370      cb = 'did_set_wildmode',
  10371      defaults = 'full',
  10372      -- Keep this in sync with check_opt_wim().
  10373      values = { 'full', 'longest', 'list', 'lastused', 'noselect' },
  10374      flags = true,
  10375      deny_duplicates = false,
  10376      desc = [=[
  10377        Completion mode used for the character specified with 'wildchar'.
  10378        This option is a comma-separated list of up to four parts,
  10379        corresponding to the first, second, third, and fourth presses of
  10380        'wildchar'.  Each part is a colon-separated list of completion
  10381        behaviors, which are applied simultaneously during that phase.
  10382 
  10383        The possible behavior values are:
  10384        ""		Only complete (insert) the first match.  No further
  10385        		matches are cycled or listed.
  10386        "full"		Complete the next full match.  Cycles through all
  10387        		matches, returning to the original input after the
  10388        		last match.  If 'wildmenu' is enabled, it will be
  10389        		shown.
  10390        "longest"	Complete to the longest common substring.  If this
  10391        		doesn't extend the input, the next 'wildmode' part is
  10392        		used.
  10393        "list"		If multiple matches are found, list all of them.
  10394        "lastused"	When completing buffer names, sort them by most
  10395        		recently used (excluding the current buffer).  Only
  10396        		applies to buffer name completion.
  10397        "noselect"	If 'wildmenu' is enabled, show the menu but do not
  10398        		preselect the first item.
  10399        If only one match exists, it is completed fully, unless "noselect" is
  10400        specified.
  10401 
  10402        Some useful combinations of colon-separated values:
  10403        "longest:full"		Start with the longest common string and show
  10404        			'wildmenu' (if enabled).  Does not cycle
  10405        			through full matches.
  10406        "list:full"		List all matches and complete first match.
  10407        "list:longest"		List all matches and complete till the longest
  10408        			common prefix.
  10409        "list:lastused"		List all matches.  When completing buffers,
  10410        			sort them by most recently used (excluding the
  10411        			current buffer).
  10412        "noselect:lastused"	Do not preselect the first item in 'wildmenu'
  10413        			if it is active.  When completing buffers,
  10414        			sort them by most recently used (excluding the
  10415        			current buffer).
  10416 
  10417        Examples: >vim
  10418        	set wildmode=full
  10419        <	Complete full match on every press (default behavior) >vim
  10420        	set wildmode=longest,full
  10421        <	First press: longest common substring
  10422        Second press: cycle through full matches >vim
  10423        	set wildmode=list:full
  10424        <	First press: list all matches and complete the first one >vim
  10425        	set wildmode=list,full
  10426        <	First press: list matches only
  10427        Second press: complete full matches >vim
  10428        	set wildmode=longest,list
  10429        <	First press: longest common substring
  10430        Second press: list all matches >vim
  10431        	set wildmode=noselect:full
  10432        <	First press: show 'wildmenu' without completing or selecting
  10433        Second press: cycle full matches >vim
  10434        	set wildmode=noselect:lastused,full
  10435        <	Same as above, but buffer matches are sorted by time last used
  10436        More info here: |cmdline-completion|.
  10437      ]=],
  10438      full_name = 'wildmode',
  10439      list = 'onecommacolon',
  10440      scope = { 'global' },
  10441      short_desc = N_("mode for 'wildchar' command-line expansion"),
  10442      type = 'string',
  10443      varname = 'p_wim',
  10444    },
  10445    {
  10446      abbreviation = 'wop',
  10447      defaults = 'pum,tagfile',
  10448      values = { 'fuzzy', 'tagfile', 'pum', 'exacttext' },
  10449      flags = true,
  10450      deny_duplicates = true,
  10451      desc = [=[
  10452        A list of words that change how |cmdline-completion| is done.
  10453        The following values are supported:
  10454          exacttext	When this flag is present, search pattern completion
  10455        		(e.g., in |/|, |?|, |:s|, |:g|, |:v|, and |:vim|)
  10456        		shows exact buffer text as menu items, without
  10457        		preserving regex artifacts like position
  10458        		anchors (e.g., |/\\<|).  This provides more intuitive
  10459        		menu items that match the actual buffer text.
  10460        		However, searches may be less accurate since the
  10461        		pattern is not preserved exactly.
  10462        		By default, Vim preserves the typed pattern (with
  10463        		anchors) and appends the matched word.  This preserves
  10464        		search correctness, especially when using regular
  10465        		expressions or with 'smartcase' enabled.  However, the
  10466        		case of the appended matched word may not exactly
  10467        		match the case of the word in the buffer.
  10468          fuzzy		Use |fuzzy-matching| to find completion matches.  When
  10469        		this value is specified, wildcard expansion will not
  10470        		be used for completion.  The matches will be sorted by
  10471        		the "best match" rather than alphabetically sorted.
  10472        		This will find more matches than the wildcard
  10473        		expansion.  Currently fuzzy matching based completion
  10474        		is not supported for file and directory names and
  10475        		instead wildcard expansion is used.
  10476          pum		Display the completion matches using the popup menu in
  10477        		the same style as the |ins-completion-menu|.
  10478          tagfile	When using CTRL-D to list matching tags, the kind of
  10479        		tag and the file of the tag is listed.	Only one match
  10480        		is displayed per line.  Often used tag kinds are:
  10481        			d	#define
  10482        			f	function
  10483 
  10484        This option does not apply to |ins-completion|.  See 'completeopt' for
  10485        that.
  10486      ]=],
  10487      full_name = 'wildoptions',
  10488      list = 'onecomma',
  10489      scope = { 'global' },
  10490      short_desc = N_('specifies how command line completion is done'),
  10491      type = 'string',
  10492      varname = 'p_wop',
  10493      flags_varname = 'wop_flags',
  10494    },
  10495    {
  10496      abbreviation = 'wak',
  10497      defaults = 'menu',
  10498      values = { 'yes', 'menu', 'no' },
  10499      desc = [=[
  10500        		only used in Win32
  10501        Some GUI versions allow the access to menu entries by using the ALT
  10502        key in combination with a character that appears underlined in the
  10503        menu.  This conflicts with the use of the ALT key for mappings and
  10504        entering special characters.  This option tells what to do:
  10505          no	Don't use ALT keys for menus.  ALT key combinations can be
  10506        	mapped, but there is no automatic handling.
  10507          yes	ALT key handling is done by the windowing system.  ALT key
  10508        	combinations cannot be mapped.
  10509          menu	Using ALT in combination with a character that is a menu
  10510        	shortcut key, will be handled by the windowing system.  Other
  10511        	keys can be mapped.
  10512        If the menu is disabled by excluding 'm' from 'guioptions', the ALT
  10513        key is never used for the menu.
  10514        This option is not used for <F10>; on Win32.
  10515      ]=],
  10516      full_name = 'winaltkeys',
  10517      scope = { 'global' },
  10518      short_desc = N_('when the windows system handles ALT keys'),
  10519      type = 'string',
  10520      varname = 'p_wak',
  10521    },
  10522    {
  10523      abbreviation = 'wbr',
  10524      cb = 'did_set_winbar',
  10525      defaults = '',
  10526      desc = [=[
  10527        When non-empty, this option enables the window bar and determines its
  10528        contents. The window bar is a bar that's shown at the top of every
  10529        window with it enabled. The value of 'winbar' is evaluated like with
  10530        'statusline'.
  10531 
  10532        When changing something that is used in 'winbar' that does not trigger
  10533        it to be updated, use |:redrawstatus|.
  10534 
  10535        Floating windows do not use the global value of 'winbar'. The
  10536        window-local value of 'winbar' must be set for a floating window to
  10537        have a window bar.
  10538 
  10539        This option cannot be set in a modeline when 'modelineexpr' is off.
  10540      ]=],
  10541      full_name = 'winbar',
  10542      modelineexpr = true,
  10543      redraw = { 'statuslines' },
  10544      scope = { 'global', 'win' },
  10545      short_desc = N_('custom format for the window bar'),
  10546      type = 'string',
  10547      varname = 'p_wbr',
  10548    },
  10549    {
  10550      abbreviation = 'winbl',
  10551      cb = 'did_set_winblend',
  10552      defaults = 0,
  10553      desc = [=[
  10554        Enables pseudo-transparency for a floating window. Valid values are in
  10555        the range of 0 for fully opaque window (disabled) to 100 for fully
  10556        transparent background. Values between 0-30 are typically most useful.
  10557 
  10558        UI-dependent. Works best with RGB colors. 'termguicolors'
  10559      ]=],
  10560      full_name = 'winblend',
  10561      redraw = { 'current_window', 'highlight_only' },
  10562      scope = { 'win' },
  10563      short_desc = N_('Controls transparency level for floating windows'),
  10564      type = 'number',
  10565    },
  10566    {
  10567      full_name = 'winborder',
  10568      scope = { 'global' },
  10569      cb = 'did_set_winborder',
  10570      defaults = { if_true = '' },
  10571      values = { '', 'double', 'single', 'shadow', 'rounded', 'solid', 'bold', 'none' },
  10572      desc = [=[
  10573        Defines the default border style of floating windows. The default value
  10574        is empty, which is equivalent to "none". Valid values include:
  10575        - "bold": Bold line box.
  10576        - "double": Double-line box.
  10577        - "none": No border.
  10578        - "rounded": Like "single", but with rounded corners ("╭" etc.).
  10579        - "shadow": Drop shadow effect, by blending with the background.
  10580        - "single": Single-line box.
  10581        - "solid": Adds padding by a single whitespace cell.
  10582        - custom: comma-separated list of exactly 8 characters in clockwise
  10583          order starting from topleft. Example: >lua
  10584             vim.o.winborder='+,-,+,|,+,-,+,|'
  10585        <
  10586      ]=],
  10587      short_desc = N_('border of floating window'),
  10588      type = 'string',
  10589      list = 'onecomma',
  10590      varname = 'p_winborder',
  10591    },
  10592    {
  10593      abbreviation = 'wi',
  10594      cb = 'did_set_window',
  10595      defaults = {
  10596        if_true = 0,
  10597        doc = 'screen height - 1',
  10598      },
  10599      desc = [=[
  10600        Window height used for |CTRL-F| and |CTRL-B| when there is only one
  10601        window and the value is smaller than 'lines' minus one.  The screen
  10602        will scroll 'window' minus two lines, with a minimum of one.
  10603        When 'window' is equal to 'lines' minus one CTRL-F and CTRL-B scroll
  10604        in a much smarter way, taking care of wrapping lines.
  10605        When resizing the Vim window, and the value is smaller than 1 or more
  10606        than or equal to 'lines' it will be set to 'lines' minus 1.
  10607        Note: Do not confuse this with the height of the Vim window, use
  10608        'lines' for that.
  10609      ]=],
  10610      full_name = 'window',
  10611      scope = { 'global' },
  10612      short_desc = N_('nr of lines to scroll for CTRL-F and CTRL-B'),
  10613      type = 'number',
  10614      varname = 'p_window',
  10615    },
  10616    {
  10617      abbreviation = 'wfb',
  10618      defaults = false,
  10619      desc = [=[
  10620        If enabled, the window and the buffer it is displaying are paired.
  10621        For example, attempting to change the buffer with |:edit| will fail.
  10622        Other commands which change a window's buffer such as |:cnext| will
  10623        also skip any window with 'winfixbuf' enabled.  However if an Ex
  10624        command has a "!" modifier, it can force switching buffers.
  10625      ]=],
  10626      full_name = 'winfixbuf',
  10627      scope = { 'win' },
  10628      short_desc = N_('pin a window to a specific buffer'),
  10629      type = 'boolean',
  10630    },
  10631    {
  10632      abbreviation = 'wfh',
  10633      defaults = false,
  10634      desc = [=[
  10635        Keep the window height when windows are opened or closed and
  10636        'equalalways' is set.  Also for |CTRL-W_=|.  Set by default for the
  10637        |preview-window| and |quickfix-window|.
  10638        The height may be changed anyway when running out of room.
  10639      ]=],
  10640      full_name = 'winfixheight',
  10641      redraw = { 'statuslines' },
  10642      scope = { 'win' },
  10643      short_desc = N_('keep window height when opening/closing windows'),
  10644      type = 'boolean',
  10645    },
  10646    {
  10647      abbreviation = 'wfw',
  10648      defaults = false,
  10649      desc = [=[
  10650        Keep the window width when windows are opened or closed and
  10651        'equalalways' is set.  Also for |CTRL-W_=|.
  10652        The width may be changed anyway when running out of room.
  10653      ]=],
  10654      full_name = 'winfixwidth',
  10655      redraw = { 'statuslines' },
  10656      scope = { 'win' },
  10657      short_desc = N_('keep window width when opening/closing windows'),
  10658      type = 'boolean',
  10659    },
  10660    {
  10661      abbreviation = 'wh',
  10662      cb = 'did_set_winheight',
  10663      defaults = 1,
  10664      desc = [=[
  10665        Minimal number of lines for the current window.  This is not a hard
  10666        minimum, Vim will use fewer lines if there is not enough room.  If the
  10667        focus goes to a window that is smaller, its size is increased, at the
  10668        cost of the height of other windows.
  10669        Set 'winheight' to a small number for normal editing.
  10670        Set it to 999 to make the current window fill most of the screen.
  10671        Other windows will be only 'winminheight' high.  This has the drawback
  10672        that ":all" will create only two windows.  To avoid "vim -o 1 2 3 4"
  10673        to create only two windows, set the option after startup is done,
  10674        using the |VimEnter| event: >vim
  10675        	au VimEnter * set winheight=999
  10676        <	Minimum value is 1.
  10677        The height is not adjusted after one of the commands that change the
  10678        height of the current window.
  10679        'winheight' applies to the current window.  Use 'winminheight' to set
  10680        the minimal height for other windows.
  10681      ]=],
  10682      full_name = 'winheight',
  10683      scope = { 'global' },
  10684      short_desc = N_('minimum number of lines for the current window'),
  10685      tags = { 'E591' },
  10686      type = 'number',
  10687      varname = 'p_wh',
  10688    },
  10689    {
  10690      abbreviation = 'winhl',
  10691      cb = 'did_set_winhighlight',
  10692      defaults = '',
  10693      deny_duplicates = true,
  10694      desc = [=[
  10695        Window-local highlights.  Comma-delimited list of highlight
  10696        |group-name| pairs "{hl-from}:{hl-to},..." where each {hl-from} is
  10697        a |highlight-groups| item to be overridden by {hl-to} group in
  10698        the window.
  10699 
  10700        Note: highlight namespaces take precedence over 'winhighlight'.
  10701        See |nvim_win_set_hl_ns()| and |nvim_set_hl()|.
  10702 
  10703        Highlights of vertical separators are determined by the window to the
  10704        left of the separator.  The 'tabline' highlight of a tabpage is
  10705        decided by the last-focused window of the tabpage.  Highlights of
  10706        the popupmenu are determined by the current window.  Highlights in the
  10707        message area cannot be overridden.
  10708 
  10709        Example: show a different color for non-current windows: >vim
  10710        	set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC
  10711        <
  10712      ]=],
  10713      expand_cb = 'expand_set_winhighlight',
  10714      full_name = 'winhighlight',
  10715      list = 'onecommacolon',
  10716      redraw = { 'current_window', 'highlight_only' },
  10717      scope = { 'win' },
  10718      short_desc = N_('Setup window-local highlights'),
  10719      type = 'string',
  10720    },
  10721    {
  10722      abbreviation = 'wmh',
  10723      cb = 'did_set_winminheight',
  10724      defaults = 1,
  10725      desc = [=[
  10726        The minimal height of a window, when it's not the current window.
  10727        This is a hard minimum, windows will never become smaller.
  10728        When set to zero, windows may be "squashed" to zero lines (i.e. just a
  10729        status bar) if necessary.  They will return to at least one line when
  10730        they become active (since the cursor has to have somewhere to go.)
  10731        Use 'winheight' to set the minimal height of the current window.
  10732        This option is only checked when making a window smaller.  Don't use a
  10733        large number, it will cause errors when opening more than a few
  10734        windows.  A value of 0 to 3 is reasonable.
  10735      ]=],
  10736      full_name = 'winminheight',
  10737      scope = { 'global' },
  10738      short_desc = N_('minimum number of lines for any window'),
  10739      type = 'number',
  10740      varname = 'p_wmh',
  10741    },
  10742    {
  10743      abbreviation = 'wmw',
  10744      cb = 'did_set_winminwidth',
  10745      defaults = 1,
  10746      desc = [=[
  10747        The minimal width of a window, when it's not the current window.
  10748        This is a hard minimum, windows will never become smaller.
  10749        When set to zero, windows may be "squashed" to zero columns (i.e. just
  10750        a vertical separator) if necessary.  They will return to at least one
  10751        line when they become active (since the cursor has to have somewhere
  10752        to go.)
  10753        Use 'winwidth' to set the minimal width of the current window.
  10754        This option is only checked when making a window smaller.  Don't use a
  10755        large number, it will cause errors when opening more than a few
  10756        windows.  A value of 0 to 12 is reasonable.
  10757      ]=],
  10758      full_name = 'winminwidth',
  10759      scope = { 'global' },
  10760      short_desc = N_('minimal number of columns for any window'),
  10761      type = 'number',
  10762      varname = 'p_wmw',
  10763    },
  10764    {
  10765      abbreviation = 'wiw',
  10766      cb = 'did_set_winwidth',
  10767      defaults = 20,
  10768      desc = [=[
  10769        Minimal number of columns for the current window.  This is not a hard
  10770        minimum, Vim will use fewer columns if there is not enough room.  If
  10771        the current window is smaller, its size is increased, at the cost of
  10772        the width of other windows.  Set it to 999 to make the current window
  10773        always fill the screen.  Set it to a small number for normal editing.
  10774        The width is not adjusted after one of the commands to change the
  10775        width of the current window.
  10776        'winwidth' applies to the current window.  Use 'winminwidth' to set
  10777        the minimal width for other windows.
  10778      ]=],
  10779      full_name = 'winwidth',
  10780      scope = { 'global' },
  10781      short_desc = N_('minimal number of columns for current window'),
  10782      tags = { 'E592' },
  10783      type = 'number',
  10784      varname = 'p_wiw',
  10785    },
  10786    {
  10787      cb = 'did_set_wrap',
  10788      defaults = true,
  10789      desc = [=[
  10790        This option changes how text is displayed.  It doesn't change the text
  10791        in the buffer, see 'textwidth' for that.
  10792        When on, lines longer than the width of the window will wrap and
  10793        displaying continues on the next line.  When off lines will not wrap
  10794        and only part of long lines will be displayed.  When the cursor is
  10795        moved to a part that is not shown, the screen will scroll
  10796        horizontally.
  10797        The line will be broken in the middle of a word if necessary.  See
  10798        'linebreak' to get the break at a word boundary.
  10799        To make scrolling horizontally a bit more useful, try this: >vim
  10800        	set sidescroll=5
  10801        	set listchars+=precedes:<,extends:>
  10802        <	See 'sidescroll', 'listchars' and |wrap-off|.
  10803        This option can't be set from a |modeline| when the 'diff' option is
  10804        on.
  10805        If 'nowrap' was set from a |modeline| or in the |sandbox|, '>' is used
  10806        as the |lcs-extends| character regardless of the value of the 'list'
  10807        and 'listchars' options.  This is to prevent malicious code outside
  10808        the viewport from going unnoticed.  Use `:setlocal nowrap` manually
  10809        afterwards to disable this behavior.
  10810      ]=],
  10811      full_name = 'wrap',
  10812      redraw = { 'current_window' },
  10813      scope = { 'win' },
  10814      short_desc = N_('lines wrap and continue on the next line'),
  10815      type = 'boolean',
  10816    },
  10817    {
  10818      abbreviation = 'wm',
  10819      defaults = 0,
  10820      desc = [=[
  10821        Number of characters from the right window border where wrapping
  10822        starts.  When typing text beyond this limit, an <EOL> will be inserted
  10823        and inserting continues on the next line.
  10824        Options that add a margin, such as 'number' and 'foldcolumn', cause
  10825        the text width to be further reduced.
  10826        When 'textwidth' is non-zero, this option is not used.
  10827        See also 'formatoptions' and |ins-textwidth|.
  10828      ]=],
  10829      full_name = 'wrapmargin',
  10830      scope = { 'buf' },
  10831      short_desc = N_('chars from the right where wrapping starts'),
  10832      type = 'number',
  10833      varname = 'p_wm',
  10834    },
  10835    {
  10836      abbreviation = 'ws',
  10837      defaults = true,
  10838      desc = [=[
  10839        Searches wrap around the end of the file.  Also applies to |]s| and
  10840        |[s|, searching for spelling mistakes.
  10841      ]=],
  10842      full_name = 'wrapscan',
  10843      scope = { 'global' },
  10844      short_desc = N_('searches wrap around the end of the file'),
  10845      tags = { 'E384', 'E385' },
  10846      type = 'boolean',
  10847      varname = 'p_ws',
  10848    },
  10849    {
  10850      defaults = true,
  10851      desc = [=[
  10852        Allows writing files.  When not set, writing a file is not allowed.
  10853        Can be used for a view-only mode, where modifications to the text are
  10854        still allowed.  Can be reset with the |-m| or |-M| command line
  10855        argument.  Filtering text is still possible, even though this requires
  10856        writing a temporary file.
  10857      ]=],
  10858      full_name = 'write',
  10859      scope = { 'global' },
  10860      short_desc = N_('to a file is allowed'),
  10861      type = 'boolean',
  10862      varname = 'p_write',
  10863    },
  10864    {
  10865      abbreviation = 'wa',
  10866      defaults = false,
  10867      desc = [=[
  10868        Allows writing to any file with no need for "!" override.
  10869      ]=],
  10870      full_name = 'writeany',
  10871      scope = { 'global' },
  10872      short_desc = N_('write to file with no need for "!" override'),
  10873      type = 'boolean',
  10874      varname = 'p_wa',
  10875    },
  10876    {
  10877      abbreviation = 'wb',
  10878      defaults = true,
  10879      desc = [=[
  10880        Make a backup before overwriting a file.  The backup is removed after
  10881        the file was successfully written, unless the 'backup' option is
  10882        also on.
  10883        WARNING: Switching this option off means that when Vim fails to write
  10884        your buffer correctly and then, for whatever reason, Vim exits, you
  10885        lose both the original file and what you were writing.  Only reset
  10886        this option if your file system is almost full and it makes the write
  10887        fail (and make sure not to exit Vim until the write was successful).
  10888        See |backup-table| for another explanation.
  10889        When the 'backupskip' pattern matches, a backup is not made anyway.
  10890        Depending on 'backupcopy' the backup is a new file or the original
  10891        file renamed (and a new file is written).
  10892      ]=],
  10893      full_name = 'writebackup',
  10894      scope = { 'global' },
  10895      short_desc = N_('make a backup before overwriting a file'),
  10896      type = 'boolean',
  10897      varname = 'p_wb',
  10898    },
  10899    {
  10900      abbreviation = 'wd',
  10901      defaults = 0,
  10902      desc = [=[
  10903        Only takes effect together with 'redrawdebug'.
  10904        The number of milliseconds to wait after each line or each flush
  10905      ]=],
  10906      full_name = 'writedelay',
  10907      scope = { 'global' },
  10908      short_desc = N_('delay this many msec for each char (for debug)'),
  10909      type = 'number',
  10910      varname = 'p_wd',
  10911    },
  10912  },
  10913 }
  10914 
  10915 --- @param o vim.option_meta
  10916 local function preprocess(o)
  10917  if o.values then
  10918    o.cb = o.cb or 'did_set_str_generic'
  10919    o.expand_cb = o.expand_cb or 'expand_set_str_generic'
  10920  end
  10921 
  10922  if type(o.alias) == 'string' then
  10923    o.alias = {
  10924      o.alias --[[@as string]],
  10925    }
  10926  end
  10927 
  10928  if type(o.defaults) ~= 'table' then
  10929    o.defaults = {
  10930      if_true = o.defaults --[[@as string|boolean|number ]],
  10931    }
  10932  end
  10933 end
  10934 
  10935 for _, o in ipairs(options.options) do
  10936  preprocess(o)
  10937 end
  10938 
  10939 return options