如何创建一个接受数字作为其一部分的普通模式命令?示例包括6>>
(缩进6行文本),2dw
(删除2个单词)和23yy
(将23行复制到复制缓冲区)。有没有办法使用nmap
或其同类?
具体来说,我想创建一个映射,如果我输入
<leader>4bu
在普通模式下,Vim会做
:4buf<CR>
答案 0 :(得分:3)
您需要定义自己的运算符,请参阅:
:help :map-operator
答案 1 :(得分:1)
nnoremap
,而不是nmap
。提供给上一个普通模式命令的数字可以通过v:count
变量访问,因此,例如,以下映射会将提供的数字添加到缓冲区文本编号次:
nnoremap ,a a<C-r>=v:count<CR><Esc>
20,a
将20
添加20,a
20次的原因是因为20a<C-r>...
被重写为nnoremap ,a :<C-u>call feedkeys("a".v:count."\e", "n")<CR>
。为避免这种情况,您可以使用
<C-u>
。 v:count
会丢弃ex命令的计数,但仍可从{{1}}变量访问。