From f34ee3da80e864ff545169bc2ced856bf5822260 Mon Sep 17 00:00:00 2001 From: Kyle <50718101+kylesower@users.noreply.github.com> Date: Sun, 28 Jun 2026 12:20:56 -0500 Subject: 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`. --- runtime/lua/vim/_meta/api.gen.lua | 6 ++++++ runtime/lua/vim/_meta/api_keysets.gen.lua | 2 ++ 2 files changed, 8 insertions(+) (limited to 'runtime/lua/vim/_meta') diff --git a/runtime/lua/vim/_meta/api.gen.lua b/runtime/lua/vim/_meta/api.gen.lua index c596bee759..fcfe124b26 100644 --- a/runtime/lua/vim/_meta/api.gen.lua +++ b/runtime/lua/vim/_meta/api.gen.lua @@ -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. diff --git a/runtime/lua/vim/_meta/api_keysets.gen.lua b/runtime/lua/vim/_meta/api_keysets.gen.lua index 3f5a465984..905d908811 100644 --- a/runtime/lua/vim/_meta/api_keysets.gen.lua +++ b/runtime/lua/vim/_meta/api_keysets.gen.lua @@ -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 -- cgit