Home Explore Blog CI



neovim

18th chunk of `runtime/doc/lua.txt`
239017b033615307655c8bd1550e829b33b9a861db29e6c80000000100000fa2
 Examples: ~

    To set a boolean toggle:
        Vimscript: `set number`
        Lua:       `vim.o.number = true`

    To set a string value:
        Vimscript: `set wildignore=*.o,*.a,__pycache__`
        Lua:       `vim.o.wildignore = '*.o,*.a,__pycache__'`

Similarly, there is |vim.bo| and |vim.wo| for setting buffer-scoped and
window-scoped options. Note that this must NOT be confused with
|local-options| and |:setlocal|. There is also |vim.go| that only accesses the
global value of a |global-local| option, see |:setglobal|.


                                                               *vim.opt_local*
                                                              *vim.opt_global*
                                                                     *vim.opt*


A special interface |vim.opt| exists for conveniently interacting with list-
and map-style options from Lua: It allows accessing them as Lua tables and
offers object-oriented method for adding and removing entries.

    Examples: ~

    The following methods of setting a list-style option are equivalent:
        In Vimscript: >vim
            set wildignore=*.o,*.a,__pycache__
<
        In Lua using `vim.o`: >lua
            vim.o.wildignore = '*.o,*.a,__pycache__'
<
        In Lua using `vim.opt`: >lua
            vim.opt.wildignore = { '*.o', '*.a', '__pycache__' }
<
    To replicate the behavior of |:set+=|, use: >lua

        vim.opt.wildignore:append { "*.pyc", "node_modules" }
<
    To replicate the behavior of |:set^=|, use: >lua

        vim.opt.wildignore:prepend { "new_first_value" }
<
    To replicate the behavior of |:set-=|, use: >lua

        vim.opt.wildignore:remove { "node_modules" }
<
    The following methods of setting a map-style option are equivalent:
        In Vimscript: >vim
            set listchars=space:_,tab:>~
<
        In Lua using `vim.o`: >lua
            vim.o.listchars = 'space:_,tab:>~'
<
        In Lua using `vim.opt`: >lua
            vim.opt.listchars = { space = '_', tab = '>~' }
<

Note that |vim.opt| returns an `Option` object, not the value of the option,
which is accessed through |vim.opt:get()|:

    Examples: ~

    The following methods of getting a list-style option are equivalent:
        In Vimscript: >vim
            echo wildignore
<
        In Lua using `vim.o`: >lua
            print(vim.o.wildignore)
<
        In Lua using `vim.opt`: >lua
            vim.print(vim.opt.wildignore:get())
<

In any of the above examples, to replicate the behavior |:setlocal|, use
`vim.opt_local`. Additionally, to replicate the behavior of |:setglobal|, use
`vim.opt_global`.


Option:append({value})                                      *vim.opt:append()*
    Append a value to string-style options. See |:set+=|

    These are equivalent: >lua
        vim.opt.formatoptions:append('j')
        vim.opt.formatoptions = vim.opt.formatoptions + 'j'
<

    Parameters: ~
      • {value}  (`string`) Value to append

Option:get()                                                   *vim.opt:get()*
    Returns a Lua-representation of the option. Boolean, number and string
    values will be returned in exactly the same fashion.

    For values that are comma-separated lists, an array will be returned with
    the values as entries in the array: >lua
        vim.cmd [[set wildignore=*.pyc,*.o]]

        vim.print(vim.opt.wildignore:get())
        -- { "*.pyc", "*.o", }

        for _, ignore_pattern in ipairs(vim.opt.wildignore:get()) do
            print("Will ignore:", ignore_pattern)
        end
        -- Will ignore: *.pyc
        -- Will ignore: *.o
<

    For values that are comma-separated maps, a table will be returned with
    the names as keys and the values as entries: >lua
        vim.cmd [[set listchars=space:_,tab:>~]]

        vim.print(vim.opt.listchars:get())
        --  { space = "_", tab = ">~", }

        for char, representation in pairs(vim.opt.listchars:get()) do
            print(char, "=>", representation)
        end
<

Title: Interacting with Vim Options in Lua with vim.opt
Summary
This section provides examples of setting boolean, string, list-style, and map-style options using `vim.o` and `vim.opt` in Lua, mirroring Vimscript's `:set` command. It demonstrates how to use `vim.opt`'s methods like `append`, `prepend`, and `remove` for list-style options, replicating `:set+=`, `:set^=`, and `:set-=` respectively. It explains how to retrieve the option's Lua representation using `vim.opt:get()` and shows how to iterate over comma-separated lists and maps using `ipairs` and `pairs`. It also mentions `vim.opt_local` and `vim.opt_global` for replicating `:setlocal` and `:setglobal` behavior. Finally, it details the `Option:append()` function, which appends a value to a string-style option, and provides examples of how `Option:get()` returns Lua representations of options including arrays for comma-separated lists and tables for comma-separated maps.