aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/_meta.lua7
-rw-r--r--src/nvim/option.c1
-rw-r--r--src/nvim/options.lua2
-rw-r--r--test/functional/lua/vim_spec.lua10
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 [[