例如,如果一个使用mamb等在缓冲区中创建一些标记,然后我录制了一个宏,然后我想对所有这些标记执行宏,我该怎么做才能完成这个目标也许可以通过lua或viml写一个函数来完成,或者使用一些插件,或者只是一个vim命令都可以接受。我希望有人能给予我一个示例函数,让我了解更多关于neovim或vim
ma
mb
lua
viml
u7up0aaq1#
您可以使用getpos("'".mark_name)来获得 * 标记 * 的位置。并且可以使用exe 'normal @'.macro_name来执行宏。其给出:
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中记录了一个宏,并标记了两个位置a和b,则可以将其用于:
m
a
b
:RunMacroOnMarks m ab
注意:我选择了明确的标记列表,因为我们可能希望将宏限制在非常有限的注册位置。
xwbd5t1u2#
我使用marks.nvim来完成这个任务。然后设置键盘Map
local keymap = vim.api.nvim_set_keymap keymap('n', '<leader>xx', '<Plug>(Marks-next)', { noremap = true, silent = true })
现在您可以组合使用宏。
2条答案
按热度按时间u7up0aaq1#
您可以使用
getpos("'".mark_name)
来获得 * 标记 * 的位置。并且可以使用exe 'normal @'.macro_name
来执行宏。其给出:
然后,如果您已经在寄存器
m
中记录了一个宏,并标记了两个位置a
和b
,则可以将其用于:注意:我选择了明确的标记列表,因为我们可能希望将宏限制在非常有限的注册位置。
xwbd5t1u2#
我使用marks.nvim来完成这个任务。
然后设置键盘Map
现在您可以组合使用宏。