commit 22df6492101f0163c0126dcdf2be01bd58ae7c28
parent 93f5bd0caf9037f95ee77288bfd424008bc3a14b
Author: glepnir <glephunter@gmail.com>
Date: Sun, 3 Aug 2025 10:52:54 +0800
fix(api): nvim_create_user_command addr option should allow ranges #35077
Problem: Using `addr` without `range` in nvim_create_user_command gives
"No range allowed" error, inconsistent with `:command -addr` behavior.
Solution: Set EX_RANGE flag when `addr` option is specified to match
`:command` behavior.
Diffstat:
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/src/nvim/api/command.c b/src/nvim/api/command.c
@@ -1170,6 +1170,7 @@ void create_user_command(uint64_t channel_id, String name, Union(String, LuaRef)
goto err;
});
+ argt |= EX_RANGE;
if (addr_type_arg != ADDR_LINES) {
argt |= EX_ZEROR;
}
diff --git a/test/functional/api/command_spec.lua b/test/functional/api/command_spec.lua
@@ -782,6 +782,13 @@ describe('nvim_create_user_command', function()
eq(5, #api.nvim_list_tabpages())
eq(1, fn.tabpagenr())
end)
+
+ it('"addr" flag allows ranges without explicit "range" flag', function()
+ exec_lua([[
+ vim.api.nvim_create_user_command('Test2', 'echo "hello <line1><line2>"', { addr = 'other' })
+ ]])
+ eq('hello 12', n.exec_capture('1,2Test2'))
+ end)
end)
describe('nvim_del_user_command', function()