将参数传递给vim map

时间:2014-11-18 14:52:21

标签: vi vim

 (A) Upper and lower limits on numeric data.
 (B) Passwords to prohibit unauthorised access to files.
 (C) Data dictionary to keep the data
 (D) Data dictionary to find last access of data

我想将(A)复制到缓冲区 - a (B)复制到缓冲区 - b 等等。

我想为此目的使用密钥 s sa 应该复制当前行  缓冲 - a sb 缓冲 - b 等。

我编写了代码:map s "ayy来映射 s 以将当前行复制到缓冲区 - a

但我不知道如何传递缓冲区名称。 (在 s 之后输入的字符。)

更新:想要复制到注册,而不是缓冲!!

2 个答案:

答案 0 :(得分:5)

  • 您要做的是处理注册,而不是缓冲区的行,您的问题非常混乱。在vim中,它们是两个完全不同的东西。

  • 尝试为您的映射找到另一个键组合。 s非常有用。也许你可以尝试<leader>sX(这里的X是注册名称)

您的要求可以通过使用<expr> mapping来实现,此映射可以为您完成:

nnoremap <expr> <leader>s '"'.nr2char(getchar()).'Y'

如果按<leader>sa,光标下方的行将被拉动以注册a<leader>sm会阻止当前行注册m,依此类推。

默认<leader> \ :h leader了解详情。

答案 1 :(得分:2)

使用getchar()的肯特方法的替代方法是将您的映射重组为"as而不是sa。这也符合Vim的内置命令方案(其中"ayy正在to注册a)。有了它,您将以v:register变量的形式免费解析寄存器。

您的s映射将只是:nnoremap s yy;寄存器部分将自动传递给yy。对于更复杂的映射,您可以使用:

:nnoremap <silent> s :execute '"' . v:register . 'yy'<CR>