vim 是否有办法对所有标记进行宏操作?

hwazgwia  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(152)

例如,如果一个使用mamb等在缓冲区中创建一些标记,然后我录制了一个宏,然后我想对所有这些标记执行宏,我该怎么做才能完成这个目标
也许可以通过luaviml写一个函数来完成,或者使用一些插件,或者只是一个vim命令都可以接受。我希望有人能给予我一个示例函数,让我了解更多关于neovim或vim

u7up0aaq

u7up0aaq1#

您可以使用getpos("'".mark_name)来获得 * 标记 * 的位置。并且可以使用exe 'normal @'.macro_name来执行宏。
其给出:

function! s:exec(macro, marks) abort
  for mark in split(a:marks, '\zs\ze')
    call setpos('.', getpos("'".mark))
    exe 'normal @'.a:macro
  endfor
endfunction

command! -nargs=+ RunMacroOnMarks  call s:exec(<f-args>)

然后,如果您已经在寄存器m中记录了一个宏,并标记了两个位置ab,则可以将其用于:

:RunMacroOnMarks m ab

注意:我选择了明确的标记列表,因为我们可能希望将宏限制在非常有限的注册位置。

xwbd5t1u

xwbd5t1u2#

我使用marks.nvim来完成这个任务。
然后设置键盘Map

local keymap = vim.api.nvim_set_keymap
keymap('n', '<leader>xx', '<Plug>(Marks-next)', { noremap = true, silent = true })

现在您可以组合使用宏。

相关问题