Répéter la dernière commande en mode normal, y compris les déplacements, dans Vim

25

Dans Vim, avec ., je peux répéter la dernière commande en mode normal; par exemple:

dd.

supprime une ligne deux fois.
Mais si je tape

5j.

le curseur ne se déplace pas de 10 lignes vers le bas. Comment répéter la dernière commande en mode normal, en particulier un déplacement?

Juan Pablo
la source

Réponses:

14

vimne le fait malheureusement pas. Le mieux que vous puissiez faire est d'installer le plugin repmo.vim , qui répète les commandes de mouvement qui ont un nombre.

Paul
la source
11

c'est faisable même dans vanilla vim, mais l'applicabilité dépend de votre cas d'utilisation, c'est-à-dire. combien de fois vous devrez le répéter, car il nécessite quelques touches supplémentaires pour le rendre répétable.


Option 1: le transformer en une opération en mode commande

en vous déplaçant vers le bas de 5 lignes comme exemple, vous pouvez faire:

  1. entrez :norm 5j, cela déplacera le curseur de 5 lignes vers le bas
  2. utiliser @:pour répéter le mouvement

:norm signifie normal, toute chaîne suivante est considérée comme vos frappes en mode normal


Option 2: utiliser une macro

  1. qa(stocker la macro dans le registre a, vous pouvez choisir votre propre registre comme qb, qc)
  2. 5j
  3. q (terminer l'enregistrement de la macro)
  4. @arépéter votre opération enregistrée (remplacer apar le nom du registre que vous avez choisi, par exemple. @b, @c)

La macro nécessite plus de puissance spirituelle pour être configurée, mais elle est plus reproductible dans le sens où vous pouvez stocker plusieurs opérations dans différents registres sans être écrasé par les dernières opérations.

JK ABC
la source
7

Répète en fait .le dernier changement , pas la dernière commande en mode normal. Comme l'a dit Paul, vous aurez besoin d'un plugin pour vous permettre de répéter les mouvements.

Voir " :help .".

Heptite
la source
4

Vous pouvez répéter les modifications avec .. Les mouvements peuvent être répétés avec la ;commande. Cette commande semble être nouvelle et fait une chose similaire au script repmo.vim mentionné dans d'autres réponses.

Par exemple, pour passer à la seconde suivante c, appuyez sur 2fc. Pour recommencer, tapez simplement ;.

trente-trois ans
la source
11
;n'est pas nouveau. C'est une commande vi standard. Vi se souvient du type et du caractère cible (mais pas de l'argument numérique) du dernier mouvement f/ F/ t/ Tet le ;répète. Cependant, il ne répète pas d'autres motions.
pyrocrastie du
Cela a accompli ce que je cherchais à faire! Je vous remercie. et merci @pyrocrasty pour la clarification!
Paul
0

Vous pouvez sélectionner les lignes que vous souhaitez modifier et exécuter la dernière commande de point normale

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
SergioAraujo
la source