Comment déplacer l’écran sans déplacer le curseur dans Vim?

J’ai récemment découvert des raccourcis Ctrl + E et Ctrl + Y pour Vim qui déplacent respectivement l’écran vers le haut et le bas avec un pas de ligne, sans déplacer le curseur .

Connaissez-vous une commande qui laisse le curseur là où il se trouve mais déplace l’écran de sorte que la ligne qui a le curseur devienne la première ligne? (Avoir une commande pour la dernière ligne serait un bon bonus).

Je peux y arriver en appuyant manuellement sur Ctrl + E (ou Ctrl + Y ) le nombre de fois approprié, mais avoir une commande qui le fait directement serait bien.

Des idées?

  • z z – déplace la ligne actuelle vers le milieu de l’écran
    ( Attention avec z z , si vous avez activé le locking des majuscules, vous sauvegarderez et vim !)
  • z t – déplace la ligne actuelle vers le haut de l’écran
  • z b – déplace la ligne actuelle vers le bas de l’écran

Aditionellement:

  • Ctrly Déplace l’écran vers le haut d’une ligne
  • Ctrle Déplace l’écran vers le bas d’une ligne
  • Ctrlu Déplace le curseur et l’écran jusqu’à ½ page
  • Ctrld Déplace le curseur et l’écran vers le bas ½ page
  • Ctrlb Déplace l’écran vers le haut d’une page, le curseur sur la dernière ligne
  • Ctrlf Déplace l’écran vers le bas d’une page, le curseur sur la première ligne

Ctrly et Ctrle ne modifient la position du curseur que si elle est déplacée hors de l’écran.

Gracieuseté de http://www.lagmonster.org/docs/vi2.html

Vim exige que le curseur se trouve dans l’écran actuel à tout moment. Cependant, vous pouvez append un signet à la position actuelle et revenir à l’endroit où vous vous trouviez.

 mg # This book marks the current position as g (this can be any letter)  `g # return to g 

Pour laisser le curseur dans la même colonne lorsque vous utilisez Ctrl + D , Ctrl + F , Ctrl + B , Ctrl + U , G , H , M , L , g g

vous devez définir l’option suivante:

 :set nostartofline 

Voici ma solution dans vimrc:

 nnoremap k kzz nnoremap j jzz nnoremap p pzz nnoremap P Pzz nnoremap G Gzz nnoremap x xzz inoremap  zz nnoremap  zz inoremap  zza nnoremap o ozza nnoremap O Ozza nnoremap a azza 

Pour que le curseur rest au milieu de l’écran et que l’écran se déplace vers le haut ou le bas.

Vous pouvez trouver des réponses utiles à cette question: Faire défiler Vim par rapport au curseur, mappage personnalisé : vous pouvez utiliser ScrollToPercent(0) pour effectuer cette opération.

Vous pouvez préfixer vos commandes de déplacement du curseur avec un nombre qui répètera cette commande plusieurs fois

1 0 Ctrl + E fera Ctrl + E 10 fois au lieu d’un.

Parfois, il est utile de faire défiler le texte avec les touches K et J. J’ai donc cette fonction de “mode de défilement” dans mon fichier .vimrc (également lié sur zs)

scroll_mode.vim

z Entrez exactement ce que cette question demande.

Cela fonctionne où étrangement z z ne fonctionnerait pas (vim 7.4.1689 sur Ubuntu 2016.04 LTS sans .vimrc spécial)

Il y a un nouveau plugin que j’ai écrit, il vous permet de naviguer dans le fichier de trous sans déplacer la position du curseur. Il est basé sur le pliage des lignes entre votre position et votre position cible, puis sautez par-dessus le pli. Ou l’abandonner et ne bouge pas du tout.

Il est également facile de basculer rapidement entre le curseur est la première ligne, le curseur est la dernière ligne et le curseur est au milieu en cliquant simplement sur j, k ou l (quand vous êtes dans le mode du plugin.)

Je suppose que ce serait un bon ajustement ici: https://github.com/anschnapp/move-less