在Vimwiki源代码中,以下行将键=
映射到表达式<Plug>VimwikiAddHeaderLevel
。
nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel
不幸的是,此映射无法正确计数。特别是,键入4=
与输入=
具有相同的效果。
基于this vimcast,我首先尝试使用表达式寄存器来纠正映射。
:nnoremap <buffer> = @=<Plug>VimwikiAddHeaderLevel<CR>
不幸的是,当我输入=
时,出现以下错误。
E15: Invalid expression: <Plug>VimwikiAddHeaderLevel
接下来,我尝试了:normal
方法。
:nnoremap <buffer> = :normal <Plug>VimwikiAddHeaderLevel<CR>
当我键入=
时,这不会导致任何错误,但对缓冲区也没有可见的影响。我还尝试了映射的递归版本,但效果相同。
:nmap <buffer> = :normal <Plug>VimwikiAddHeaderLevel<CR>
进行映射以使其能够接受计数的正确方法是什么?
答案 0 :(得分:1)
您不能(轻松[1])在映射中解决此问题。插件的实现必须支持一个计数,显然,该计数不支持:<Plug>VimwikiAddHeaderLevel
映射到:<C-U>call vimwiki#base#AddHeaderLevel()<CR>
,因此任何计数都会导致自动添加范围,<C-U>
然后删除。 vimwiki#base#AddHeaderLevel()
函数必须通过v:count
(或v:count1
)来获取计数,但事实并非如此。
或者,可以用:function
属性定义range
,然后将其传递给a:firstline
和a:lastline
; cp。 :help function-range-example
。否则必须删除<C-U>
,然后每行调用一次该函数。
因此,如果您认为支持计数很有意义,请向项目提交问题(或请求请求)。
[1]好吧,如果可以通过在同一位置重复执行映射来获得效果,则可以在:for
上使用v:count
循环编写包装函数,该循环通过< / p>
:execute "normal \<Plug>VimwikiAddHeaderLevel"