vi / vim abrumpt buffer moves within window

11

Lors de l'utilisation :set wrapdans vi / vim, le contenu d'une ligne enveloppée entière est placé dans le tampon d'affichage lors du déplacement du curseur dans une nouvelle ligne, même lors de la navigation dans un fichier par ligne d'affichage (gj / gk) par opposition à la ligne réelle (j / k). Par exemple, si une ligne est enroulée sur 5 lignes d'écran et se trouve actuellement en dehors du tampon d'affichage, le tampon sautera de 5 lignes lors de la navigation dans cette ligne pour forcer la ligne entière à tenir dans l'écran. Existe-t-il un moyen de désactiver ce comportement? Notez que set display+=lastlinecela permettra l'affichage de lignes partielles lorsqu'une ligne enveloppée est forcée hors de l'écran en s'éloignant de la ligne, mais cela ne résout pas les sauts de tampon qui se produisent lors de la navigation dans une ligne qui était initialement en dehors du tampon.

Clarification: dans le cas où la description ci-dessus est nébuleuse, l'essentiel est que je voudrais pouvoir faire défiler en douceur dans vim avec l'habillage de ligne activé de telle sorte que les lignes seront partiellement affichées hors de l'écran plutôt que d'être obligatoirement affichées dans leur intégralité.

user001
la source
1
Pourriez-vous confirmer que ce que vous voulez dire est: vous voulez qu'une partie de la partie enveloppée de la ligne soit hors affichage et puisse défiler en douceur? Vim montre entièrement les lignes quand il 'wrap'est allumé, j'ai peur
Benoit
Précisément. Je suppose qu'il n'y a aucun moyen de remplacer ce comportement d'afficher les lignes enveloppées dans leur intégralité lors du défilement? Je vous remercie.
user001
1
Pas que je sache. Attendez les réponses cependant, personne ne sait ce que Vim peut faire.
Benoit
1
d'accord avec @Benoit. Pas possible pour autant que je sache.
Fredrik Pihl
1
Il y a actuellement une discussion sur la liste de diffusion vim_dev sur ce sujet. Il semble que vous ne soyez pas le seul à faire cette demande.
Randy Morris

Réponses:

1

Pas une réponse complète, mais peut-être une piste. Il y a une scrolloption. L'aide de cette option se lit, entre autres:

{Vi est un peu différent: 'scroll' donne le nombre de lignes d'écran au lieu des lignes de fichier, fait une différence lorsque les lignes s'habillent}

thebodzio
la source
Merci, c'est utile. Les combinaisons de touches <Ctrl-E> (bas) et <Ctrl-Y> (haut) donnent le comportement de base que je souhaite. S'il existe un moyen de détecter si le curseur se trouve sur la ligne supérieure ou inférieure de la fenêtre, une solution temporaire impliquerait de mapper conditionnellement les touches fléchées haut et bas à <Ctrl-Y> gk et <Ctrl-E> gj, respectivement. Lorsque le curseur n'est pas sur la ligne supérieure ou inférieure de la fenêtre, il est nécessaire de les mapper sur gk et gj (l'instruction else au conditionnel). Existe-t-il un moyen simple de détecter si le curseur se trouve sur la ligne supérieure ou inférieure de la fenêtre actuelle?
user001
0

en mode normal, vous pouvez basculer entre les parties affichées d'une ligne enveloppée en utilisant gket gj( g<up>ou g<down>). Ce wikipage vim explique comment changer le comportement de façon permanente.

jpjacobs
la source
1
Certainement, et j'ai associé ces comportements aux touches fléchées directionnelles. Cependant, cela diffère de l'affichage obligatoire de l'intégralité d'une ligne enveloppée lors de la navigation vers cette ligne. Ce comportement est indépendant de l'utilisation de gj / gk ou j / k. Je voudrais pouvoir naviguer partiellement dans une ligne qui est initialement hors du tampon (hors écran) sans que la ligne enveloppée entière ne soit affichée.
user001
OK, alors j'ai mal compris. Eh bien, je suppose que votre ligne est enveloppée ou non. Ce que vous voulez, c'est quelque chose entre les deux, mais je pense que c'est tout simplement impossible.
jpjacobs