feat(commands): ChangeSymbolTo -range, GenerateLinks path filter, NuwikiGenerateTags
Closes the three new command gaps from the 2026-05-31 re-audit (all real,
client-side, both clients × Vimwiki/Nuwiki):
- VimwikiChangeSymbolTo / ListChangeSymbolI / NuwikiChangeSymbol are now
-range -nargs=1 via a new list_change_symbol_range(symbol,l1,l2) helper that
loops over_range; was -nargs=1 only → E481 on a visual selection.
ChangeSymbolInListTo/InList stay range-less.
Bonus: the Neovim VimwikiChangeSymbolInListTo + NuwikiChangeSymbolInList defs
passed whole_list=false, changing only the current item — corrected to true.
- VimwikiGenerateLinks / NuwikiGenerateLinks are now -nargs=?; with an arg the
client dispatches the existing server command nuwiki.links.generateForPath
({path}) for real subtree-scoped link generation, else nuwiki.links.generate.
Was bare → E488 on an arg.
- Added NuwikiGenerateTags (Vim + Neovim) mirroring VimwikiGenerateTags, with
-nargs=? -complete=…tags — closes the :Vimwiki*↔:Nuwiki* alias asymmetry.
Tests: cmd.ChangeSymbolTo_range_sets_marker, cmd.GenerateLinks_accepts_optional_path,
cmd.NuwikiGenerateTags_exists (test-keymaps.lua, 283 pass) +
cmd.VimwikiChangeSymbolTo_accepts_range, cmd.VimwikiGenerateLinks_accepts_path,
cmd.NuwikiGenerateTags_exists (test-keymaps-vim.vim, 272/18/21). fmt clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -873,6 +873,39 @@ vim.defer_fn(function()
|
||||
.. vim.inspect(vim.api.nvim_buf_get_lines(0, 0, -1, false)))
|
||||
end
|
||||
end)
|
||||
-- `:[range]VimwikiChangeSymbolTo {sym}` — now -range -nargs=1. A 1,3 range
|
||||
-- must set every item's marker to the given symbol.
|
||||
tobj_case('cmd.ChangeSymbolTo_range_sets_marker', function()
|
||||
set_buf({ '- a', '- b', '- c' })
|
||||
vim.cmd('1,3VimwikiChangeSymbolTo *')
|
||||
local done = vim.wait(2000, function()
|
||||
local l = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||
for _, ln in ipairs(l) do
|
||||
if not ln:match('^%*%s') then return false end
|
||||
end
|
||||
return true
|
||||
end, 30)
|
||||
if not done then
|
||||
error('range change-symbol did not set all markers: '
|
||||
.. vim.inspect(vim.api.nvim_buf_get_lines(0, 0, -1, false)))
|
||||
end
|
||||
end)
|
||||
-- `:VimwikiGenerateLinks [rel_path]` — now -nargs=? (was bare; an arg raised
|
||||
-- E488). Both forms must dispatch without a Vim-level command error.
|
||||
tobj_case('cmd.GenerateLinks_accepts_optional_path', function()
|
||||
set_buf({ '= page =' })
|
||||
local ok1 = pcall(vim.cmd, 'VimwikiGenerateLinks')
|
||||
local ok2 = pcall(vim.cmd, 'VimwikiGenerateLinks subdir')
|
||||
if not (ok1 and ok2) then
|
||||
error('GenerateLinks rejected an arg: ok1=' .. tostring(ok1) .. ' ok2=' .. tostring(ok2))
|
||||
end
|
||||
end)
|
||||
-- :NuwikiGenerateTags alias must exist (parity with :VimwikiGenerateTags).
|
||||
tobj_case('cmd.NuwikiGenerateTags_exists', function()
|
||||
if vim.fn.exists(':NuwikiGenerateTags') ~= 2 then
|
||||
error(':NuwikiGenerateTags not defined')
|
||||
end
|
||||
end)
|
||||
-- `:VimwikiNormalizeLink 1` (the arg is upstream's visual flag; the command
|
||||
-- is -nargs=? not -range, so no `'<,'>`) wraps the last visual selection.
|
||||
tobj_case('cmd.normalize_link_visual_wraps_selection', function()
|
||||
|
||||
Reference in New Issue
Block a user