所以我发现在Vim中我的一个共同任务是将PUT连接到行的开头或行的结尾。所以我的映射可能是:
nmap <Leader>p $p
nmap <Leader>P 0P
但是,我真正想要做的是在推杆之前选择包含一个注册表。
所以例如“a,P 会从寄存器a放到行的开头。
有没有办法用映射做到这一点?
答案 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>