在正常模式下传递数字键作为vim函数的参数

时间:2016-09-20 12:29:35

标签: regex vim

我想看输出消息:

1234

当我在vim的正常模式下输入1234<Enter>时。

我试图在这里写一些vim脚本

function! PrintNum(n)
    echo n
endfunction

nmap n<Enter> call PrintNum(n)

其中n这里只是一个表示正则表达式\d+的虚拟变量。

我如何在map命令中使用某种正则表达式?

请注意,我也不确定是否应该使用nmap

1 个答案:

答案 0 :(得分:3)

这是:

function! PrintNum(n)
    echo a:n
endfunction

nnoremap <silent> <Enter> :<C-u>call PrintNum(v:count)<CR>

解释

  • 映射中没有虚拟变量;它的执行方式与输入类似。但是,特殊变量v:count获取可以在任何命令之前放置的数字。
  • 在这里,我已将此作为参数n(内部引用为a:n)传递给函数,但我也可以直接在函数内使用v:count
  • 默认情况下,:命令会将计数转换为范围,因为我们需要单独的:call,我们会通过<C-u>删除此范围。
  • 按Enter键结束映射(命令行模式):<CR><silent>可以避免您短暂地看到映射的密钥。
  • You should use :noremap;它使映射不受重映射和递归的影响。