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. Y a-t-il un moyen rapide de faire cela?
J'ai essayé Ctrl + Q, mis en évidence un ensemble de lignes et appuyé sur @@, mais cela ne semblait pas suffire.
Utilisez la commande normal 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.
:5,10norm! @a
Exécutez la macro stockée dans le registre a sur les lignes 5 à la fin du fichier.
:5,$norm! @a
Exécutez la macro enregistrée dans le registre a sur toutes les lignes.
:%norm! @a
Exécutez le magasin de macros dans le registre a sur toutes les lignes pattern.
:g/pattern/norm! @a
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. Puis tapez :norm! @a
et observez que la ligne de saisie suivante est affichée.
:'<,'>norm! @a
Entrez : help normal dans vim pour en savoir plus.
Utilisez global pour exécuter la macro 'a' sur toutes les lignes contenant 'pattern'
:g/pattern/normal! @a
Pour obtenir de l'aide, vérifiez: :help global
.
Vous pouvez aussi faire ceci:
En mode normal:
[number of times to apply the macro] @ [register]
Par exemple:
1000@q
Met la macro du registre q aux 1000 prochaines lignes.
Mise à jour: le réponse acceptée est bien meilleur
Mise à jour: comme l'a souligné @kevinliu, vous souhaiterez probablement mettre fin à la macro avec un
j
pour accéder à la ligne suivante.
Il y a aussi un plugin appelé RangeMacro, fait exactement ce que vous voulez! Pour tout le monde qui ne peut deviner par son nom, ce qu’il fait: il répète une macro enregistrée pour chaque ligne d’une plage donnée, que ce soit par sélection visuelle ou par: 40,50 /: +10