将键映射到自身和另一个键,而不覆盖键的先前映射

时间:2016-06-18 09:34:01

标签: vim

我正在编写插件,我需要检测用户何时使用n键来获取下一个搜索结果。

nmap n n:echo "detected!"<CR>

不幸的是,这会覆盖用户为n定义的所有映射,例如在跳转到下一个搜索结果后以光标为中心。

nmap n nzz

有没有办法将n映射到用户映射到necho命令的任何内容?在此示例中,结果应等于:

nmap n nzz:echo "detected"<CR>

1 个答案:

答案 0 :(得分:3)

正如melpomene所写,你可以利用maparg()函数,例如:

function! AppendMap(name, mode, rhs)
    let l:oldrhs = maparg(a:name, a:mode)
    exe printf('%smap %s %s', a:mode, a:name, l:oldrhs.a:rhs)
endf

call AppendMap('n', 'n', ':echo "detected"<CR>')
" If key 'n' was mapped to 'nzz', then it is now mapped to 'nzz:echo "detected"<CR>'