vi / vim abrumpt movimientos del búfer dentro de la ventana

11

Cuando se usa :set wrapen vi / vim, el contenido de una línea completa se coloca en el búfer de visualización al mover el cursor a una nueva línea, incluso cuando se navega por un archivo por la línea de visualización (gj / gk) en oposición a la línea real (j / k). Por ejemplo, si una línea se ajusta sobre 5 líneas de pantalla y se encuentra actualmente fuera del búfer de la pantalla, el búfer saltará 5 líneas al navegar en esta línea para forzar que toda la línea encaje en la pantalla. ¿Hay alguna manera de deshabilitar este comportamiento? Tenga en cuenta que set display+=lastlinepermitirá la visualización de líneas parciales cuando una línea ajustada se fuerza fuera de la pantalla al navegar fuera de la línea, pero esto no resuelve los saltos de búfer que ocurren cuando se navega en una línea que inicialmente estaba fuera del búfer.

Aclaración: en caso de que la descripción anterior sea nebulosa, lo esencial es que me gustaría poder desplazarme suavemente en vim con el ajuste de línea habilitado de modo que las líneas se muestren parcialmente fuera de la pantalla en lugar de mostrarse obligatoriamente en su totalidad.

user001
fuente
1
¿Podría confirmar que lo que quiere decir es: desea que parte de la parte envuelta de la línea esté fuera de la pantalla y pueda desplazarse sin problemas? Vim muestra líneas por completo cuando 'wrap'está encendido, me temo
Benoit
Precisamente. ¿Supongo que no hay forma de anular este comportamiento de mostrar líneas ajustadas en su totalidad mientras se desplaza? Gracias.
user001
1
No que yo sepa. Sin embargo, espere respuestas, nadie sabe lo que Vim puede hacer.
Benoit
1
de acuerdo con @Benoit. No es posible hasta donde yo sé.
Fredrik Pihl
1
Actualmente hay una discusión sobre la lista de correo vim_dev sobre este tema. Parece que no eres el único con esta solicitud.
Randy Morris

Respuestas:

1

No es una respuesta completa, pero tal vez una pista. Hay scrollopcion. La ayuda para esa opción lee, entre otras cosas:

{Vi es un poco diferente: 'scroll' da el número de líneas de pantalla en lugar de líneas de archivo, hace una diferencia cuando las líneas se ajustan}

thebodzio
fuente
Gracias, eso es útil. Las combinaciones de teclas <Ctrl-E> (abajo) y <Ctrl-Y> (arriba) dan el comportamiento básico que quiero. Si hay una manera de detectar si el cursor está en la línea superior o inferior de la ventana, una solución temporal implicaría asignar condicionalmente las teclas de flecha arriba y abajo a <Ctrl-Y> gk y <Ctrl-E> gj, respectivamente. Cuando el cursor no está en la línea superior o inferior de la ventana, es necesario asignarlos a gk y gj (la instrucción else en el condicional). ¿Hay una manera simple de detectar si el cursor está en la línea superior o inferior de la ventana actual?
user001
0

en modo normal, puede saltar entre las partes mostradas de una línea ajustada usando gky gj( g<up>o g<down>). Este wikipage vim explica cómo cambiar el comportamiento de forma permanente.

jpjacobs
fuente
1
Ciertamente, y he mapeado esos comportamientos a las teclas de flecha direccionales. Sin embargo, esto es diferente de la visualización obligatoria de la totalidad de una línea envuelta al navegar a esa línea. Este comportamiento es independiente del uso de gj / gk o j / k. Me gustaría poder navegar parcialmente en una línea que inicialmente está fuera del búfer (fuera de la pantalla) sin que se muestre la línea completa.
user001
OK, entonces entendí mal. Bueno, supongo que tu línea está envuelta o no. Lo que quieres es algo intermedio, pero creo que es simplemente imposible.
jpjacobs