feat(api): nvim_set_option_value(operation=...) #39849

Problem:
`nvim_set_option_value` cannot "update" options similar to `:set opt=`,
`:set opt+=`, etc. The Lua impls of "vim.opt" / "vim.o" have incomplete,
bespoke reimplementations of those operations.

ref #38420

Solution:
- Add `operation` param to `nvim_set_option_value`, which may be "set",
  "append", "prepend", or "remove".
- Use this feature to implement `vim.opt` / `vim.o`.
This commit is contained in:
Kyle
2026-06-28 12:20:56 -05:00
committed by GitHub
parent a5aa62e37b
commit f34ee3da80
12 changed files with 598 additions and 243 deletions

View File

@@ -2305,12 +2305,18 @@ function vim.api.nvim_set_option(name, value) end
--- @param value any New option value
--- @param opts vim.api.keyset.option Optional parameters
--- - buf: Buffer number. Used for setting buffer local option.
--- - dry_run: (`boolean?`, default: false) If true, then the
--- option value won't be set.
--- - operation: One of "set", "append", "prepend", or "remove".
--- Corresponds to `:set=`, `:set+=`, `:set^=`, and `:set-=`.
--- Default is "set".
--- - scope: One of "global" or "local". Analogous to
--- `:setglobal` and `:setlocal`, respectively.
--- - tab: `tab-ID` for tab-local options (currently only 'cmdheight'). Tabpage 0
--- means the current tabpage. If a non-current tab is given, the value will take
--- effect when it is switched-to.
--- - win: `window-ID`. Used for setting window local option.
--- @return any # Option value
function vim.api.nvim_set_option_value(name, value, opts) end
--- Sets a global (g:) variable.

View File

@@ -381,7 +381,9 @@ error('Cannot require a meta file')
--- @class vim.api.keyset.option
--- @field buf? integer
--- @field dry_run? boolean
--- @field filetype? string
--- @field operation? string
--- @field scope? string
--- @field tab? integer
--- @field win? integer