J'ai un fichier avec un tas de lignes. J'ai enregistré une macro qui effectue une opération sur une seule ligne. Je veux répéter cette macro sur toutes les lignes restantes du fichier. Existe-t-il un moyen rapide de procéder?
J'ai essayé Ctrl + Q, mis en évidence un ensemble de lignes et appuyé sur @@, mais cela ne semblait pas faire l'affaire.
vim
vim-macros
Jordan Parmer
la source
la source
Réponses:
Utilisez la commande normale en mode Ex pour exécuter la macro sur plusieurs / toutes les lignes:
Exécutez la macro stockée dans le registre a sur les lignes 5 à 10.
Exécutez la macro stockée dans le registre a sur les lignes 5 jusqu'à la fin du fichier.
Exécutez la macro stockée dans le registre a sur toutes les lignes.
Exécutez le magasin de macros dans le registre a sur toutes les lignes correspondant au modèle .
Pour exécuter la macro sur des lignes sélectionnées visuellement, appuyez sur V et sur j ou k jusqu'à ce que la région souhaitée soit sélectionnée. Tapez ensuite
:norm! @a
et observez que la ligne de saisie suivante est affichée.Entrez : aidez normal dans vim pour en savoir plus.
la source
:norm! @a
:
après avoir mis en surbrillance les lignes, la ligne d'entrée Ex sera lue:'<,'>
à laquelle vous ajouterez ensuite le reste de ce que Kevin a suggéré. Cela rendra la commande finale lire::'<,'>norm! @a
.!
le remappage des clés par l'utilisateur. Vous n'en avez peut-être pas besoin, mais une réponse qui fonctionne pour tout le monde l'exige.Utilisez global pour exécuter la macro «a» sur toutes les lignes contenant «pattern»
Pour de l' aide, consultez:
:help global
.la source
Vous pouvez également le faire:
En mode normal:
Par exemple:
Pomme la macro du registre q aux 1 000 lignes suivantes.
la source
:%norm! @a
etvGG :norm! @a
j
commande pour descendre à la ligne suivante, sinon elle essaiera de l'appliquer à la même ligne.Il y a aussi un plugin appelé RangeMacro, fait exactement ce que vous voulez! Pour tous ceux qui ne peuvent pas deviner par le nom, ce qu'il fait: il répète une macro enregistrée pour chaque ligne dans une plage donnée, que ce soit par sélection visuelle ou par: 40,50 /: +10
Voir http://www.vim.org/scripts/script.php?script_id=3271
la source