Los principales comandos de desplazamiento en Vim son:
- Ctrl- By Ctrl- F, así como PageUpy PageDowndesplazarse por la página completa
- Ctrl- Uy Ctrl- Ddesplazarse media página de forma predeterminada
- Ctrl- Yy Ctrl- Edesplazarse una línea
Cada vez que pierdo el contexto visual para los dos primeros, he desarrollado el mal hábito de golpear el último ( Ctrl- Yy Ctrl- E) repetidamente.
Dado que actualmente no hay soporte de primera parte para un desplazamiento suave, ¿cuáles son las soluciones / complementos menos objetables?
Utilizo Vim y GVim dependiendo de la tarea, y estoy feliz de personalizarlos por separado si no hay un truco realmente bueno que funcione para ambos. La rueda de desplazamiento del mouse funciona bien en GVim, pero estoy buscando soluciones basadas en teclado.
vim
scroll
smooth-scrolling
Andrew Wagner
fuente
fuente
Respuestas:
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
:caracteristicas:
scroll
opción Vim .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.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-ESin 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íneasfuente
Hay un truco de reasignación simple en tips.txt de vim:
fuente
noremap <expr> <C-u> repeat("\<C-y>", 20)
para facilitar la lectura.:map <C-U> 20<C-Y>
Enchufe descarado, pero creé un complemento aquí que puede usar para ajustar fácilmente la distancia, la velocidad y la duración de la animación de desplazamiento: https://github.com/terryma/vim-smooth-scroll
fuente
Un complemento reciente
He publicado algo similar aquí , pero básicamente hay un gran complemento que podemos usar ahora para el desplazamiento, llamado terryma / vim-smooth-scroll . Proporciona un desplazamiento muy agradable y suave.
La instalación es bastante sencilla:
1Yo uso Vundle, así que simplemente agregué esto en .vimrc.bundles :
En la última versión de Vundle disponible hoy, 29 de abril de 2016, puede poner esto en su .vimrc :
2Como se indica en el documento, puede configurar 3 argumentos: distancia , duración y velocidad .
Estoy usando esto en mi archivo .vimrc :
fuente
<C-E>
y<C-Y>
.Lo que hago es configurar la repetición del teclado en muy rápido, alrededor de 120 caracteres / segundo, y el retraso pequeño. Luego mapeo a 4j y a 4k navego hacia arriba y hacia abajo por el código fuente usando j y k, lo que mueve el cursor hacia arriba y hacia abajo de manera agradable y rápida, bastante suave. Pero aquí está la parte buena, y esto funciona en Linux, no en Windows. Desde hace varios años, la entrada del teclado de X11 funciona de tal manera que cuando presiona y mantiene presionada j, obviamente comienza a poner j caracteres. Pero cuando mantiene presionada la tecla j y luego también presiona la tecla ctrl, X11 comienza a colocar los caracteres cj sin que tenga que volver a presionar la tecla j. Luego, cuando suelta la tecla ctrl y sigue presionando j, X11 continúa poniendo j de nuevo. Entonces j hace que el cursor comience a moverse suavemente hacia abajo, y puedes presionar ctrl periódicamente sin soltar j para darle un impulso,
Además, hago lo que hace Devin y configuro scrolloffset en 5.
Por último, cambio ctrl y bloqueo de mayúsculas. La posición predeterminada de la tecla ctrl está completamente retardada (sin intención de ofender). Hace que tengas que rotar tu mano izquierda. Casi nunca uso el bloqueo de mayúsculas, así que las cambio. Entonces mi dedo meñique izquierdo puede alcanzar la tecla Ctrl sin ningún movimiento de yoga.
Estas cosas me han funcionado durante años. Solo uso vim, nunca gvim.
fuente
Esto no es exactamente un desplazamiento suave, pero es la forma en que manejo no perder contexto al saltar páginas.
establecer así = 7
'scrolloff' 'so' número (predeterminado 0) global
{no en Vi}
Número mínimo de líneas de pantalla para mantener por encima y por debajo del cursor. Esto hará que algo de contexto sea visible alrededor del lugar donde está trabajando. Si lo establece en un valor muy grande (999), la línea del cursor siempre estará en el medio de la ventana (excepto al principio o al final del archivo o cuando las líneas largas se ajustan). Para desplazarse horizontalmente, consulte 'desplazamiento lateral'. NOTA: Esta opción se establece en 0 cuando se establece 'compatible'.
fuente
El complemento cskeeters / vim-smooth-scroll admite un desplazamiento suave y no requiere configuración. Es compatible para apoyar el desplazamiento suave con
zt
,zz
, yzb
. Es una bifurcación del complemento de terryma . Se han aplicado algunas de las solicitudes de extracción abiertas.fuente
... donde 'N' es el número de líneas individuales que desea desplazar.
No es suave en sentido literal, pero te quedas con el teclado.
fuente
Acabo de encontrar este plugin llamado "acelerada-alisar-Scroll" ( "Vim plugin para el desplazamiento suave acelerada (mapeo para
<C-D>/<C-U>
,<C-F>/<C-B>)
") que puede ser utilizado, por ejemplo, a través Vundle al poner esta línea en su .vimrc:Luego, reiniciando Vim y ejecutando el
:PluginInstall
comando, luego reinicie Vim nuevamente y use las teclas<C-D>
( Ctrl+D) y<C-O>
(Ctrl+O comandos ) normalmente.Lamentablemente, este complemento también mueve el cursor en lugar de lo que quería: simplemente desplazar la pantalla como los comandos
<C-E>
y<C-Y>
.fuente
Esto combina muchas de estas respuestas, y esto es lo que uso.
fuente