web-dev-qa-db-fra.com

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

J'ai récemment découvert Ctrl+E et Ctrl+Y raccourcis pour Vim qui déplacent respectivement l'écran de haut en bas avec un pas d'une 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 contenant le curseur devienne la première ligne? (avoir une commande pour la dernière ligne serait un bonus sympa).

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

Des idées?

546
ereOn
  • zz - déplace la ligne en cours au milieu de l'écran
    (Attention avec zz, s'il vous arrive d'avoir Caps Lock sur accidentellement, vous enregistrez et quittez vim!)
  • zt - déplace la ligne actuelle en haut de l'écran
  • zb - déplace la ligne en cours au bas de l'écran
802
Kevin Vaughan

Aditionellement:

  • Ctrl-y Déplace l'écran vers le haut d'une ligne
  • Ctrl-e Déplace l'écran vers le bas d'une ligne
  • Ctrl-u Déplace le curseur et l'écran vers le haut ½ page
  • Ctrl-d Déplace le curseur et l'écran vers le bas ½ page
  • Ctrl-b Déplace l'écran d'une page vers le haut, le curseur à la dernière ligne
  • Ctrl-f Déplace l'écran d'une page vers le bas, le curseur à la première ligne

Ctrl-y et Ctrl-e ne changez la position du curseur que s'il était déplacé de l'écran.

Avec l'aimable autorisation de http://www.lagmonster.org/docs/vi2.html

571
Paul Wheeler

Vim exige que le curseur se trouve en permanence sur l'écran actuel. Toutefois, vous pouvez marquer la position actuelle en faisant défiler un signet, puis revenir à l'endroit où vous vous trouviez.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g
35
GWW

Voici ma solution dans vimrc:

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

Pour que le curseur reste au milieu de l'écran et que celui-ci se déplace vers le haut ou le bas.

13
Henry

Pour laisser le curseur dans la même colonne lorsque vous utilisez Ctrl+DCtrl+FCtrl+BCtrl+UGHMLgg

vous devez définir l'option suivante:

:set nostartofline
12
Alexander Rumyantsev

Vous pouvez préfixer les commandes de déplacement du curseur avec un numéro et répéter cette commande autant de fois que nécessaire.

1Ctrl+E ça ira Ctrl+E 10 fois au lieu d'un.

5
yunzen

Vous pouvez trouver des réponses utiles à cette question: Défilement de Vim par rapport au curseur, mappage personnalisé : vous pouvez utiliser ScrollToPercent(0) à partir de cette question pour le faire.

4
ZyX

zEnter fait exactement ce que cette question demande.

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

3
Nicolas Raoul

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

scroll_mode.vim

2
Oleg Khalidov

Surpris, personne n'utilise l'option option de défilement qui maintient le curseur au milieu de la page. Essayez-le avec:

:set so=999

C'est la première méthode recommandée sur le wiki vim et fonctionne bien

1

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. Cela consiste à replier les lignes entre votre position et la position de votre cible, puis à sauter par-dessus le pli. Ou abandonnez-le et ne bougez pas du tout.

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

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

1
snap