Actualización : ahora he enviado este código, refactorizado un poco de acuerdo con las pautas en :help write-plugin
, a un repositorio de Github .
Usando el teclado
Esto es lo que tengo en mi .vimrc
:
function SmoothScroll(up)
if a:up
let scrollaction="^Y"
else
let scrollaction="^E"
endif
exec "normal " . scrollaction
redraw
let counter=1
while counter<&scroll
let counter+=1
sleep 10m
redraw
exec "normal " . scrollaction
endwhile
endfunction
nnoremap <C-U> :call SmoothScroll(1)<Enter>
nnoremap <C-D> :call SmoothScroll(0)<Enter>
inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i
caracteristicas:
- Desplácese en la base de la
scroll
opción Vim .
- Velocidad de desplazamiento personalizable (ajuste el argumento de tiempo del
sleep
comando; yo uso diez milisegundos). Nota : al igual que reducir la velocidad de fotogramas en un video, si ralentiza demasiado el desplazamiento suave, será un desplazamiento desigual, no un desplazamiento suave. Pero lo que funcione mejor para ti.
- Funciona en modo normal o de inserción.
Nota : todos los que copien y peguen, recuerden que el ^
carácter indica un carácter de control; copiar y pegar producirá resultados no válidos y estos se deben ingresar manualmente.
^Y
- CTRL- Ventonces CTRL-Y
^E
- CTRL- Ventonces CTRL-E
Sin embargo, las sintaxis de estilo <C-U>
y <Enter>
se escriben literalmente como esos caracteres; el comando map los convierte inteligentemente en personajes de control.
Usando el mouse
La pregunta menciona que el desplazamiento con el mouse funciona bien en GVim, pero se desea una solución de teclado. Esto me implica que el autor de la pregunta puede estar interesado en una solución de mouse si funciona en el terminal Vim normal.
Para mí, activar el soporte del mouse permite un desplazamiento suave a través de la rueda del mouse. Además, para mí, el desplazamiento suave es más importante cuando miro a mi alrededor (es decir, en modo normal), no cuando estoy editando (en modo de inserción), y si no estoy editando activamente, la necesidad de que mis manos permanezcan en el El teclado en todo momento se elimina, por lo que esto funciona bien.
Sin embargo, sobre la base de esta pregunta , parecería que algunas personas tienen que hacer una configuración más manual más allá de simplemente encender el mouse (solo uso set mouse=n
):
Mi .vimrc
tiene las siguientes líneas
set mouse=a
map <ScrollWheelUp> <C-Y>
map <ScrollWheelDown> <C-E>