Vim - 使用可选的寄存器前缀进行映射

时间:2012-03-31 09:51:00

标签: vim

所以我发现在Vim中我的一个共同任务是将PUT连接到行的开头或行的结尾。所以我的映射可能是:

nmap <Leader>p $p
nmap <Leader>P 0P

但是,我真正想要做的是在推杆之前选择包含一个注册表。

所以例如“a,P 会从寄存器a放到行的开头。

有没有办法用映射做到这一点?

2 个答案:

答案 0 :(得分:5)

您可以使用<expr>映射在一行中执行此操作:

nnoremap <expr> \p '$"'.v:register.v:count1.'p'
nnoremap <expr> \P '0"'.v:register.v:count1.'P'

答案 1 :(得分:2)

这是完全可能的。我首先虽然我可以使用此解决方案:https://stackoverflow.com/a/290723/15934,但<expr>不会让我们按照我们的意愿移动光标,并且normal无法使用。

不过,我们可以这样做:

function! s:PutAt(where)
  " <setline($+1> appends, but <setline(0> does not insert, hence the hack
  " with getline to build a list of what should be at the start of the buffer.
  let line = a:where ==1 
        \ ? [getreg(), getline(1)]
        \ : getreg()
  call setline(a:where, line)
endfunction

nnoremap <silent> <leader>P :call <sid>PutAt(1)<cr>
nnoremap <silent> <leader>p :call <sid>PutAt(line('$')+1)<cr>