Ответ 1
Вы можете сделать это, используя сопоставление <expr>
в одной строке:
nnoremap <expr> \p '$"'.v:register.v:count1.'p'
nnoremap <expr> \P '0"'.v:register.v:count1.'P'
Итак, я обнаружил, что общая задача для меня в Vim заключается в том, чтобы установить либо начало строки, либо конец строки. Таким образом, мое сопоставление может быть:
nmap <Leader>p $p
nmap <Leader>P 0P
Однако, что мне действительно хотелось бы сделать, необязательно включить регистр перед отправкой.
Итак, например "a,P будет помещаться из регистра a в начало строки.
Есть ли способ сделать это с отображением?
Вы можете сделать это, используя сопоставление <expr>
в одной строке:
nnoremap <expr> \p '$"'.v:register.v:count1.'p'
nnoremap <expr> \P '0"'.v:register.v:count1.'P'
Это вполне возможно. Сначала я решил, что это решение возможно: fooobar.com/info/17572/..., но <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>