metrologia - vim online
Vim-mapeo con un prefijo de registro opcional (2)
Así que descubrí que una tarea común para mí en Vim es PONER al comienzo de la línea o al final de la línea. Entonces mi mapeo podría ser:
nmap <Leader>p $p
nmap <Leader>P 0P
Sin embargo, lo que realmente me gustaría hacer es incluir opcionalmente un registro antes de poner.
Entonces, por ejemplo, "a, P pondría desde el registro a al comienzo de la línea.
¿Hay alguna manera de hacer esto con un mapeo?
Puede hacer esto usando mapeo <expr>
en una línea:
nnoremap <expr> /p ''$"''.v:register.v:count1.''p''
nnoremap <expr> /P ''0"''.v:register.v:count1.''P''
Esto es perfectamente posible. Primero pensé que esta solución era posible: https://.com/a/290723/15934 , pero <expr>
no nos deja mover el cursor como deseamos, y no se puede usar normal
.
Aún así, podemos hacer esto:
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>