在映射到ex命令时传递寄存器名称

jwd*_*jwd 4 vim

假设我想在vim中创建一个地图,它将调用ex命令作为其工作的一部分.并假设ex命令将寄存器名称作为输入.

这是一个玩具示例:

nmap <leader>p :put x
Run Code Online (Sandbox Code Playgroud)

问题是总是会使用'x'寄存器.但在打字时,我希望能够写:

"a<leader>p
Run Code Online (Sandbox Code Playgroud)

要使用'a'寄存器,或者:

"b<leader>p
Run Code Online (Sandbox Code Playgroud)

使用'b'寄存器.

有没有办法可以将'当前正常模式寄存器'传递给'ex'命令?

jwd*_*jwd 6

啊,我明白了.

诀窍是<expr>在映射中使用.

所以,对于我的例子,答案是:

nnoremap <expr> <leader>p ':put ' . v:register . '<CR>'
Run Code Online (Sandbox Code Playgroud)

检查:h map-expression:h v:register获取更多信息.