所以我发现Vim的一个常见任务是将PUT放到行的开头或行的末尾。所以我的映射可能是:Vim - 使用可选的寄存器前缀映射
nmap <Leader>p $p
nmap <Leader>P 0P
但是,我真正想要做的是在放置前可选择包含一个寄存器。
因此,例如“A,P会把从注册到该行的开头。
有没有办法做到这一点与映射?
所以我发现Vim的一个常见任务是将PUT放到行的开头或行的末尾。所以我的映射可能是:Vim - 使用可选的寄存器前缀映射
nmap <Leader>p $p
nmap <Leader>P 0P
但是,我真正想要做的是在放置前可选择包含一个寄存器。
因此,例如“A,P会把从注册到该行的开头。
有没有办法做到这一点与映射?
您可以在一行中做到这一点使用<expr>
映射:
nnoremap <expr> \p '$"'.v:register.v:count1.'p'
nnoremap <expr> \P '0"'.v:register.v:count1.'P'
这是完全可能的。我第一次不过,我觉得这个解决方案是可能的: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>
他谈论在该行,而不是文件的开始/结束加入。顺便说一句,''映射确实允许你移动一个游标,你只需要将游标移动命令添加到表达式的结果中。 –
ZyX
2012-03-31 16:33:27