pegar - ¿Cuál es la mejor manera de hacer scroll suave en Vim?
vim pdf (8)
Un complemento reciente
He publicado algo similar here , pero básicamente hay un gran complemento que podemos usar ahora para desplazar, llamado terryma/vim-smooth-scroll . Proporciona un desplazamiento muy agradable y suave.
La instalación es bastante fácil:
1 Yo uso Vundle así que simplemente anexé esto en .vimrc.bundles :
Bundle terryma/vim-smooth-scroll
En la última versión de Vundle disponible hoy, 29 de abril de 2016, puede poner esto en su .vimrc :
Plugin ''terryma/vim-smooth-scroll''
2 Como se indica en el documento, puede configurar 3 argumentos: distancia , duración y velocidad .
Estoy usando esto en mi archivo .vimrc :
noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
Los principales comandos de desplazamiento en Vim son:
- Ctrl - B y Ctrl - F , así como PageUp y PageDown desplazarse por página completa
- Ctrl - U y Ctrl - D desplazan media página de forma predeterminada
- Ctrl - Y y Ctrl - E desplazarse una línea
Pierdo el contexto visual todo el tiempo para los dos anteriores, así que he desarrollado la mala costumbre de presionar el último ( Ctrl - Y y Ctrl - E ) repetitivamente.
Dado que actualmente no hay compatibilidad de primera mano para el desplazamiento suave, ¿cuáles son las soluciones / complementos menos objetables?
Yo uso Vim y GVim dependiendo de la tarea, y estoy feliz de personalizarlos por separado si no hay nadie realmente bueno que funcione para ambos. La rueda de desplazamiento del mouse funciona muy bien en GVim, pero estoy buscando soluciones basadas en teclado.
Acabo de encontrar este complemento llamado "desplazamiento suave acelerado" ("complemento Vim para desplazamiento suave acelerado (asignación a <CD>/<CU>
, <CF>/<CB>)
" que se puede utilizar, por ejemplo, a través de Vundle poniendo esta línea en su .vimrc:
Plugin ''yonchu/accelerated-smooth-scroll''
Luego, reiniciando Vim y ejecutando el comando :PluginInstall
, reinicia Vim y utiliza normalmente los comandos <CD>
( Ctrl + D ) y <CO>
( Ctrl + O ).
Lamentablemente, este complemento también mueve el cursor en lugar de lo que yo quería: simplemente desplazarse por la pantalla como los comandos <CE>
y <CY>
.
Conector desvergonzado, pero he creado un complemento aquí que puede usar para ajustar fácilmente la distancia, la velocidad y la duración de la animación de desplazamiento: terryma/vim-smooth-scroll
El complemento cskeeters/vim-smooth-scroll admite desplazamiento suave y no requiere configuración. Es compatible para admitir el desplazamiento suave con zt
, zz
y zb
. Es una bifurcación del terryma/vim-smooth-scroll de terryma/vim-smooth-scroll . Algunas de las solicitudes de extracción abierta se han aplicado.
Esto no es exactamente un desplazamiento suave, pero es la forma en que trato de no perder el contexto al saltar de página.
establecerlo = 7
''scrolloff'' ''so'' number (predeterminado 0) global
{no en Vi}
Número mínimo de líneas de pantalla para mantener arriba y debajo del cursor. Esto hará que algún contexto sea visible alrededor de donde estás trabajando. Si lo configura en un valor muy grande (999), la línea del cursor siempre estará en el medio de la ventana (excepto al inicio o al final del archivo o cuando se alinean las líneas largas). Para desplazarse horizontalmente, vea ''sidescrolloff''. NOTA: Esta opción se establece en 0 cuando se establece ''compatible''.
Hay un truco de reasignación simple en vim''s tips.txt:
Smooth scrolling *scroll-smooth*
If you like the scrolling to go a bit smoother, you can use these mappings:
:map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
:map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
Lo que hago es configurar la repetición del teclado muy rápido, alrededor de 120 caracteres / segundo, y el retraso pequeño. Luego hago un mapa a 4j y a 4k. Navego hacia arriba y hacia abajo en el código fuente usando j y k, que mueve el cursor hacia arriba y hacia abajo agradable y rápido, bastante suave. Pero esta es la parte buena, y esto funciona en Linux, no en Windows. Desde hace varios años, la entrada de teclado de X11 funciona de tal manera que cuando presiona y mantiene presionada j, obviamente comienza a sacar j caracteres. Pero cuando mantiene presionada j y luego también presiona la tecla ctrl, X11 comienza a poner caracteres cj sin tener que volver a presionar la tecla j. Luego, cuando sueltas la tecla Ctrl y sigues presionando j, X11 continúa poniendo j de nuevo. Así que j hace que el cursor empiece a moverse suave y suavemente hacia abajo, y periódicamente puede presionar ctrl sin soltar j para darle un impulso, una sacudida.
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 es completamente retardada (sin intención de ofender). Te obliga a rotar tu mano izquierda. Casi nunca uso mayúsculas y minúsculas, así que las cambio. Entonces mi dedo rosado izquierdo puede alcanzar la tecla Ctrl sin movimientos de yoga.
Estas cosas me han funcionado durante años. Solo uso vim, nunca gvim.
Actualización : ahora he introducido este código, refactorizado un poco de acuerdo con las directrices 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 por la base de la opción de
scroll
Vim. - Velocidad de desplazamiento personalizable (ajuste el argumento de tiempo del comando de
sleep
; yo uso diez milisegundos). Nota : al igual que ralentizar la velocidad de fotogramas en un video, si ralentiza demasiado el desplazamiento suave, será un desplazamiento brusco, no un desplazamiento suave. Pero lo que sea que funcione mejor para ti. - Funciona en modo normal o inserción.
Nota : todos los que copie y pegue, recuerde que el carácter ^
indica un carácter de control; ¡copiar y pegar producirá resultados no válidos y estos deben ingresarse manualmente!
-
^Y
- CTRL - V luego CTRL - Y -
^E
- CTRL - V luego CTRL - E
Sin embargo, las sintaxis de estilo <CU>
y <Enter>
se escriben literalmente como esos caracteres; el comando de mapa los convierte de manera inteligente en caracteres de control.
Usando el mouse
La pregunta menciona que desplazarse con el mouse funciona bien en GVim, pero se desea una solución de teclado. Esto implica para mí que el solicitante puede estar interesado en una solución de mouse si funciona en el terminal regular Vim.
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 alrededor (es decir, en modo normal), no cuando estoy editando (en el 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.
Sobre la base de esta pregunta , sin embargo, parece que algunas personas tienen que hacer algo más de configuración manual más allá de simplemente encender el mouse (yo solo uso set mouse=n
):
Mi .vimrc
tiene las siguientes líneas
set mouse=a
map <ScrollWheelUp> <C-Y>
map <ScrollWheelDown> <C-E>