创建普通模式命令,在Vim中接受一个数字作为参数

时间:2011-04-06 17:37:34

标签: vim

如何创建一个接受数字作为其一部分的普通模式命令?示例包括6>>(缩进6行文本),2dw(删除2个单词)和23yy(将23行复制到复制缓冲区)。有没有办法使用nmap或其同类?

执行此操作

具体来说,我想创建一个映射,如果我输入

<leader>4bu

在普通模式下,Vim会做

:4buf<CR>

2 个答案:

答案 0 :(得分:3)

您需要定义自己的运算符,请参阅:

:help :map-operator

答案 1 :(得分:1)

  1. 使用nnoremap,而不是nmap
  2. 提供给上一个普通模式命令的数字可以通过v:count变量访问,因此,例如,以下映射会将提供的数字添加到缓冲区文本编号次:

    nnoremap ,a a<C-r>=v:count<CR><Esc>
    

    20,a20添加20,a 20次的原因是因为20a<C-r>...被重写为nnoremap ,a :<C-u>call feedkeys("a".v:count."\e", "n")<CR> 。为避免这种情况,您可以使用

    <C-u>

    v:count会丢弃ex命令的计数,但仍可从{{1}}变量访问。