¿Cómo deshabilitar el desplazamiento horizontal?

37

Tengo algunos caracteres ocultos en el búfer y el desplazamiento horizontal mata la alineación a lo grande.

¿Hay alguna forma de desactivarlo? No pude encontrar ninguna opción relevante.

mala demostración de desplazamiento horizontal

Editar: Demo añadida. Puede ver que vim basa el desplazamiento de desplazamiento en la parte no oculta del archivo, por lo tanto, la alineación se rompe.

Enuy
fuente
66
No puede deshabilitarlo, pero puede:set wrap
EvergreenTree
8
@Enuy, lo que quiero decir es que las líneas son en realidad más largas que el ancho de la ventana, pero algo de texto (los códigos de color tipo bash) están ocultos. Entonces, Vim piensa que ya llegó al borde de la ventana, pero visualmente no lo ha hecho. Yo diría que esto califica como un error.
tommcdo
8
@tommcdo Sí, entiendo lo que quieres decir. Hay un problema similar con las líneas de ajuste cuando solo las partes ocultas al final de la línea son la causa del ajuste y obtuvo WONTFIX de Bram: code.google.com/p/vim/issues/detail?id=260
Enuy
3
Es por eso que estoy buscando una solución alternativa: deshabilitar por completo el desplazamiento horizontal.
Enuy
3
Lo más parecido que puedo pensar es que si estás en una terminal, podrías usar <c-s>para suspender la terminal para que la pantalla no se actualice. Luego podría hacer cambios a ciegas y volver al comienzo de la línea y presionar <c-q>para reanudar. Otras opciones quizás no útiles: asegúrese de que haya el mismo número de caracteres ocultos entre cada carácter visible o amplíe la ventana.
Matt Boehm

Respuestas:

2

Cómo deshabilitar el desplazamiento horizontal

He escrito una solución que deshabilita el desplazamiento horizontal, ( alejándose de la sugerencia de @ ЯрославРахматуллин ), pero no creo que le guste:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

Esto evita el desplazamiento hacia la derecha mediante el método increíblemente preciso de desplazarse nuevamente hacia atrás. *

* Debido a que no sé qué tan lejos te has desplazado hacia la derecha o qué tan largas son tus líneas, estoy desplazando la cantidad arbitrariamente "lejana" de 99 anchos de media pantalla. Tenga en cuenta también que no me estoy molestando en verificar si realmente se ha desplazado hacia la derecha o no antes de desplazarse "hacia atrás" hacia la izquierda. Si realmente tiene la intención de utilizar esta solución, es posible que desee hacer algo al comparar los valores degetcurpos() , 'sidescroll'y 'columns'.

¿Por qué no vas a querer hacerlo?

La razón por la que no va a usar esto es porque el problema de desplazamiento subyacente es otro problema: Vim no le permitirá mover el cursor "fuera de la pantalla". Por lo tanto, si se desplaza hacia la izquierda de manera tal que el cursor no esté en la pantalla después del desplazamiento, Vim lo ayuda con el cursor y lo mueve hacia la izquierda.

Pero debido a que el cálculo que está usando para saber si el cursor está en la pantalla es el mismo que está usando para decidir si desplazarse en el problema original, el efecto neto es que con esta "solución" en su lugar, si intenta mover el cursor a la derecha en una situación que normalmente provocaría un desplazamiento lateral, ahora el cursor se niega a moverse en absoluto. **

** Para ser un poco más preciso, dependiendo de la posición actual y el movimiento, el cursor puede moverse hacia la derecha; simplemente no se moverá más allá de la posición donde normalmente se produciría un desplazamiento.

¿Otras opciones?

Así que me temo que su solución planificada no va a funcionar. Si quieres un viable solución al problema general, será necesario implementarlo en el código fuente de Vim.

Como ya ha notado , es poco probable que esto llegue pronto, así que me temo que su mejor opción para solucionar el caso específico del problema que se muestra en su gif es solicitar al autor del complemento que deje de usarconceal completo y en su lugar eliminar el texto oculto del búfer por completo.

Según el resultado oculto y la mención vim-plugin-AnsiEscen la documentación, esto podría ser algo que puedan implementar, pero es difícil decirlo con certeza sin saber cómo funciona el complemento.

rico
fuente
0

Si tiene una manera de editar el archivo, es posible que desee ajustar la configuración de colores \[y \], como se explica aquí :

[...] Lo que se ha hecho es encerrar el '\ 033 [1; 33m' que comienza el color amarillo en '[' y ']' que le dice al shell "todo entre estos corchetes escapados, incluidos los corchetes mismos, es un personaje que no se imprime [...]

De lo contrario, los códigos de color completos se consideran caracteres y, por lo tanto, podrían tenerse en cuenta para el desplazamiento horizontal.

No estoy seguro de que este sea el problema, pero al ver la fuente del calendario (con syntax off) y el comportamiento actual, me hizo pensar en eso.

padawin
fuente
El problema no son los colores, sino los caracteres ocultos por la concealcaracterística (vea la discusión en los comentarios).
Rico
Si entiendo. Tal vez hay algo que no entendí bien, pero tuve un problema similar en bash con una PS1 que usa caracteres de color (el hecho de que sean colores no importa), y el terminal no regresó correctamente en una nueva línea. lugar, ya que contaba los caracteres para los colores como caracteres efectivos, mientras que tenían que ignorarse, ya que son invisibles. La animación me recordó este problema (donde la paginación horizontal se realiza "demasiado pronto", como si lo hiciera en función del número de caracteres en la línea, que es lo que se menciona en el enlace en mi respuesta).
Padawin
Los dos problemas son similares, estoy de acuerdo. Pero el comportamiento descrito en esta pregunta ocurre debido a la forma en que Vim cuenta los caracteres (no el terminal) y, por lo tanto, la sugerencia que haga en su primer párrafo no ayudará aquí, me temo.
Rico el
0

EDITAR: Este es un error conocido, cerrado "no se solucionará": https://github.com/vim/vim/issues/260

Respuesta original:

Mi vim no se desplaza horizontalmente hasta que el cursor toca el borde de la pantalla.

Estas usando sidescrolloff?

No sé si deshabilitar por completo el desplazamiento horizontal, pero esta configuración debería hacer que espere hasta que el cursor se salga del borde:

:set sidescrolloff=0
JasonWoof
fuente
El problema existe incluso 'sidescrolloff=0'porque Vim cree que el cursor se ha salido del borde: basa su cálculo en el texto oculto, no en el texto visible.
Rico el
Oh, eso es realmente con errores. Encontré un informe de error sobre esto y lo agregué a mi respuesta. El mantenedor de vim no quiere arreglarlo.
JasonWoof
No es una solución para este error ... pero tal vez podría implementar el color de su calendario con texto sin formato en el búfer y prop_type_add () y prop_add () para colores / etc.
JasonWoof
Sí, es un fastidio, pero ese informe de error es la razón por la cual el OP escribió esta pregunta en busca de una solución .
Rico