Comment désactiver le défilement horizontal?

37

J'ai des caractères cachés dans la mémoire tampon et le défilement horizontal tue l'alignement beaucoup de temps.

Y a-t-il un moyen de le désactiver? Je n'ai pu trouver aucune option pertinente.

mauvaise démo défilement horizontal

Edit: Démo ajoutée. Vous pouvez voir que vim base le décalage de défilement sur la partie non dissimulée du fichier, ce qui entraîne la rupture de l'alignement.

Enuy
la source
6
Vous ne pouvez pas le désactiver, mais vous pouvez:set wrap
EvergreenTree
8
@ Enuy, ce que je veux dire, c'est que les lignes sont en réalité plus longues que la largeur de la fenêtre, mais du texte (les codes de couleur semblable à bash) est masqué. Donc, Vim pense que cela a déjà atteint le bord de la fenêtre, mais ce n’est pas le cas visuellement. Je dirais que cela est considéré comme un bug.
tommcdo
8
@ tommcdo Oui, je comprends ce que vous voulez dire. Il existe un problème similaire avec les lignes d’emballage, lorsque seules des pièces cachées à la fin de la ligne sont la cause de l’emballage et que cela a été obtenu par Bram: code.google.com/p/vim/issues/detail?id=260
Enuy
3
C'est pourquoi je cherche une solution alternative - désactiver le défilement horizontal.
Enuy
3
Le plus proche que je puisse penser est que si vous êtes dans un terminal, vous pouvez utiliser <c-s>pour suspendre le terminal afin que l'écran ne soit pas mis à jour. Vous pouvez ensuite faire des modifications à l'aveuglette, revenir au début de la ligne et appuyer <c-q>pour reprendre. Autres options peut-être non utiles: assurez-vous que le même nombre de caractères masqués se trouve entre chaque caractère visible ou élargissez la fenêtre.
Matt Boehm

Réponses:

2

Comment désactiver le défilement horizontal

J'ai écrit une solution qui désactive le défilement horizontal (en décochant la suggestion de @ ЯрославРахматуллин ), mais je ne pense pas que vous allez l'aimer:

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

Cela évite de faire défiler vers la droite avec la méthode incroyablement précise consistant à simplement faire défiler à nouveau. *

* Parce que je ne sais pas dans quelle mesure vous avez fait défiler vers la droite ou combien de temps vos lignes sont, je fais défiler le montant arbitrairement "loin" de 99 demi-largeurs d'écran. Notez également que je ne me soucie pas de vérifier si vous avez réellement fait défiler vers la droite avant de faire défiler "en arrière" vers la gauche. Si vous avez réellement l'intention d'utiliser cette solution, vous pouvez ajouter quelque chose en comparant les valeurs de getcurpos(), 'sidescroll'et 'columns'.

Pourquoi tu ne vas pas vouloir le faire

La raison pour laquelle vous n'allez pas utiliser ceci est que le problème de défilement est sous-jacent à un autre problème: Vim ne vous laissera pas déplacer le curseur "hors écran". Par conséquent, si vous faites défiler le curseur vers la gauche de manière à ce que le curseur ne soit plus affiché à l'écran après le défilement, Vim l'y amènera gentiment et le déplacera vers la gauche.

Mais comme le calcul qu’il utilise pour déterminer si le curseur est à l’écran est identique à celui utilisé pour décider de faire défiler ou non le problème initial, l’effet net est que, avec cette "solution" en place, si vous essayez de déplacer le curseur. curseur à droite dans une situation qui provoquerait normalement un défilement latéral; maintenant, le curseur refuse de se déplacer. **

** Pour être légèrement plus précis, en fonction de la position actuelle et du mouvement, le curseur peut se déplacer vers la droite; il ne veut tout simplement pas dépasser la position où un parchemin se produirait normalement.

Autres options?

Donc, je crains que votre solution de contournement prévue ne va pas se dérouler. Si vous voulez une solution viable au problème général, il faudra l’appliquer dans le code source Vim.

Comme vous l'avez déjà noté , il est peu probable que cela arrive dans un avenir rapproché. Je crains donc que votre meilleur pari pour une solution de contournement à l'exemple du problème présenté dans votre gif consiste à demander à l'auteur du plug-in de cesser concealcomplètement d' utiliser et à la place. supprime entièrement le texte caché du tampon.

Sur la base de la sortie et la mention non dissimulée de vim-plugin-AnsiEscdans la documentation ce pourrait être quelque chose qu'il est possible pour eux de mettre en œuvre, mais il est difficile de dire avec certitude sans connaître le fonctionnement du plug - in.

riches
la source
0

Si vous avez le moyen de modifier le fichier, vous voudrez peut-être envelopper la configuration des couleurs avec \[et \], comme expliqué ci- dessous :

[...] Ce qui a été fait, c’est de fermer le '\ 033 [1; 33m' qui commence la couleur jaune par '[' et ']' qui dit à la coque "tout ce qui se trouve entre ces crochets masqués, y compris les crochets eux-mêmes, est un caractère non imprimable [...]

Sinon, tous les codes de couleur sont considérés comme des caractères et peuvent donc être pris en compte pour le défilement horizontal.

Je ne suis pas sûr que ce soit le problème, mais vu la source du calendrier (avec syntax off) et le comportement actuel, cela m'a fait penser à cela.

padawin
la source
Le problème n'est pas les couleurs, mais les caractères cachés par la concealfonctionnalité (voir la discussion dans les commentaires).
Rich
Oui je comprends. Peut-être qu’il ya quelque chose que je n’ai pas bien compris, mais j’ai eu un problème similaire avec une PS1 utilisant des caractères de couleur (le fait qu’il s’agisse de couleurs n'a pas d’importance), et le terminal ne revenait pas correctement dans une nouvelle ligne. place, car il fallait compter les caractères pour les couleurs en tant que caractères effectifs, alors qu’ils devaient être ignorés, car ils sont invisibles. L'animation m'a rappelé ce problème (où la pagination horizontale est faite "trop ​​tôt", comme si elle le faisait en fonction du nombre de caractères dans la ligne, ce qui est mentionné dans le lien dans ma réponse).
Padawin
Les deux problèmes sont similaires, je suis d'accord. Mais le comportement décrit dans cette question se produit en raison de la façon dont Vim compte les caractères (pas le terminal) et, par conséquent, la suggestion que vous faites dans votre premier paragraphe n'aidera pas ici.
Rich
0

EDIT: Ceci est un bug connu, fermé "ne résoudra pas": https://github.com/vim/vim/issues/260

Réponse originale:

Mon vim ne fait pas défiler horizontalement jusqu'à ce que le curseur touche le bord de l'écran.

Utilisez-vous sidescrolloff?

Je ne sais pas comment désactiver complètement le défilement horizontal, mais ce paramètre devrait le faire attendre jusqu'à ce que le curseur se détache du bord:

:set sidescrolloff=0
JasonWoof
la source
Le problème existe même 'sidescrolloff=0'parce que Vim pense que le curseur s'est élancé: il base son calcul sur le texte non masqué, pas sur le texte visible.
Rich
Oh, c'est vraiment buggy. J'ai trouvé un rapport de bogue à ce sujet et l'a ajouté à ma réponse. Le responsable de vim ne veut pas le réparer.
JasonWoof
Ce n'est pas une solution à ce bogue ... mais vous pourriez peut-être mettre en œuvre la coloration de votre calendrier avec du texte brut dans le tampon, ainsi que prop_type_add () et prop_add () pour les couleurs / etc.
JasonWoof