Vim - сопоставление с дополнительным префиксом регистра

Итак, я обнаружил, что общая задача для меня в Vim заключается в том, чтобы установить либо начало строки, либо конец строки. Таким образом, мое сопоставление может быть:

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

Однако, что мне действительно хотелось бы сделать, необязательно включить регистр перед отправкой.

Итак, например "a,P будет помещаться из регистра a в начало строки.

Есть ли способ сделать это с отображением?

Ответ 1

Вы можете сделать это, используя сопоставление <expr> в одной строке:

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

Ответ 2

Это вполне возможно. Сначала я решил, что это решение возможно: 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>