Considérer:
apple
pear
Placez votre curseur sur la première ligne et tapez Yp
, produisant:
apple
apple
pear
Placez votre curseur sur la pear
ligne et tapez .
pour répéter la dernière commande. Cela ne répète que le p
(plutôt que la combinaison Yp
), produisant:
apple
apple
pear
apple
Je voudrais un moyen de dire .
de répéter les dernières commandes N. Quelque chose comme 2.
répéter la combinaison Yp
pour produire:
apple
apple
pear
pear
Ofc cela ne fonctionnera pas - il répète les p
deux fois. Mais l'idée serait de "répéter la séquence des 2 dernières commandes".
Je sais que je peux q
-enregistrer des séquences de commandes et les répéter avec @@
, mais cette solution n'est pas idéale, car elle nécessite que vous ayez planifié à l'avance, alors qu'en pratique, vous ne réalisez souvent pas que vous devez répéter quelque chose avant vous l'avez fait.
Existe-t-il un moyen de réaliser ce que je veux?
Prix de consolation: si ce qui précède n'est pas possible, existe-t-il un moyen de répéter la dernière lecture de macro? Par exemple, si j'ai tapé @@
pour lire ma dernière macro, j'aimerais que la suivante .
soit équivalente à taper à @@
nouveau - ce qui n'est pas le cas (par exemple, si le résultat de @@
dépend de la ligne sur laquelle vous êtes)
nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>
Mais pour que cela fonctionne, vous devez installer ce plugin: github.com/tpope/vim-repeatRéponses:
Vim stocke uniquement la dernière commande exécutée, et seule celle qui est répétée par
.
; à mon avis, toute autre chose serait difficile à gérer.Si vous ressentez le besoin de répéter le
Yp
combo comme une seule entité, vous devez en faire une seule commande. Le plugin repeat.vim de Tim Pope permet de le faire facilement pour les mappages personnalisés. Bien sûr, si vous choisissez une touche [séquence] courte pour le mappage, vous pouvez simplement retaper rapidement cela (au lieu de.
), et même éviter l'intégration repeat.vim.BTW, mon plugin LineJuggler fournit un
]d
mappage pour dupliquer la ligne actuelle, et il prend en charge la répétition via repeat.vim.la source
Dans
Yp
, le seul "changement" à répéter estp
. Le seul moyen que je connaisse pour modifier le comportement de.
en mode normal est d'ajoutery
à l'cpoptions
option:ce qui vous permet de répéter le dernier coup sec ainsi que le dernier changement.
Mais cela ne change rien à votre problème car il
Yp
y a toujours deux commandes: un coup sec suivi d'un changement.Je ne pense pas que vous puissiez obtenir ce que vous voulez sans un script non trivial. Avez-vous jeté un œil à la section scripts de vim.org ?
la source
J'utilise fréquemment
map
pour obtenir cet effet. Par exemple:Ensuite, une pression
F12
répétée exécuteraYpYpYp
etc. Si vous souhaitez passer à la ligne suivante après chaque collage, mappez une clé à laYp+
place.la source
L'engin remarquable qu'est le plugin RepeatLast (par notre propre @joeytwiddle ) fournit juste cette fonctionnalité, via la méthode impie d'enregistrer tout ce que vous faites en tant que macro.
Il fournit un certain nombre de nouvelles applications, mais, si je lis correctement la documentation, pour effectuer les modifications que vous décrivez , vous pouvez utiliser la séquence de commandes ( en supposant que vous utilisez la valeur par défaut
<leader>
de\
):Yp
Tirez et mettez / collez la ligneapple
,j
Descendre d'une ligne pour que le curseur soit maintenant sur lapear
ligne,\D
oubliez laj
commande,2\.
Répétez les deux commandesY
etp
la source