diff options
-rw-r--r-- | runtime/lua/vim/_meta.lua | 7 | ||||
-rw-r--r-- | src/nvim/option.c | 1 | ||||
-rw-r--r-- | src/nvim/options.lua | 2 | ||||
-rw-r--r-- | test/functional/lua/vim_spec.lua | 10 |
4 files changed, 16 insertions, 4 deletions
diff --git a/runtime/lua/vim/_meta.lua b/runtime/lua/vim/_meta.lua index 02d1154df4..85861420aa 100644 --- a/runtime/lua/vim/_meta.lua +++ b/runtime/lua/vim/_meta.lua @@ -325,9 +325,12 @@ local convert_value_to_vim = (function() return result end, - [OptionTypes.ARRAY] = function(_, value) + [OptionTypes.ARRAY] = function(info, value) if type(value) == "string" then return value end - return table.concat(remove_duplicate_values(value), ",") + if not info.allows_duplicates then + value = remove_duplicate_values(value) + end + return table.concat(value, ",") end, [OptionTypes.MAP] = function(_, value) diff --git a/src/nvim/option.c b/src/nvim/option.c index f57abe89cc..388bedc043 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -7765,6 +7765,7 @@ static Dictionary vimoption2dict(vimoption_T *opt) } PUT(dict, "type", CSTR_TO_OBJ(type)); PUT(dict, "default", def); + PUT(dict, "allows_duplicates", BOOL(!(opt->flags & P_NODUP))); return dict; } diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 86dec74f56..0b09686675 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -3152,7 +3152,7 @@ return { full_name='wildmode', abbreviation='wim', short_desc=N_("mode for 'wildchar' command-line expansion"), type='string', list='onecomma', scope={'global'}, - deny_duplicates=true, + deny_duplicates=false, vim=true, varname='p_wim', defaults={if_true={vi="", vim="full"}} diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua index 836f514433..51a0b58172 100644 --- a/test/functional/lua/vim_spec.lua +++ b/test/functional/lua/vim_spec.lua @@ -1569,7 +1569,15 @@ describe('lua stdlib', function() eq(wildignore, 'super_first,first,foo') end) - end) + it('should not remove duplicates from wildmode: #14708', function() + local wildmode = exec_lua [[ + vim.opt.wildmode = {"full", "list", "full"} + return vim.o.wildmode + ]] + + eq(wildmode, 'full,list,full') + end) + end) -- vim.opt it('vim.cmd', function() exec_lua [[ |