Les macros n'existent pas en vi standard.
q suivi d'une lettre de tampon enregistrera la suite dans le tampon, aussi bien des commandes normales que des commandes ex. On termine par un deuxième appui sur q. On réexécute avec la commande @ suivie de la lettre du tampon. Un recherche qui n'aboutit pas arrête l'exécution. Comme d'autres commandes, la commande @ peut être préfixée d'un nombre... 5, 10, 100000. Habituellement je teste ma macro une fois ou deux, et avec d'exécuter un grand nombre de fois je mets l'option lazyredraw (:set lazyredraw), car la macro s'exécute plus vite. Cependant, même ainsi c'est plus lent qu'un sed ou un tr simple sans passer par vi, et à partir de quelques centaines de milliers de lignes il vaut habituellement mieux de sortir de vi et de prendre le temps de faire un sed ou un tr voire un perl.
Pour peu que vim ait le droit d'écrire dans le fichier ~/.viminfo, les macros sont persistants.
Les macros vim sont nettement plus faciles à faire que les scripts sed dès que l'on agisse sur plusieurs lignes. Un exemple : pour passer d'un format
Entete1 ligne1-1 ligne1-2 ligne1-3 Entete2 ligne2-1 ligne2-2 ligne2-3
à un format
Entete1:ligne1-1:ligne1-2:ligne1-3 Entete2:ligne2-1:ligne2-2:ligne2-3
je mets l'option lazyredraw, j'enregistre une macro (p par exemple) consistant à mettre le curseur sur une ligne commençant par espace, monter d'une ligne, joindre avec la ligne suivante (celle qui commençait avec espace, donc), puis remplacer l'espace entre les lignes par un : (le dernier q termine la macro). J'exécute la macro une fois ou deux pour vérifier que ça marche bien, et ensuite je la lance par exemple 10000 fois. Ça donne :
:set lazyredraw qp/^ / kJr:q@p@p10000@p
Le nombre de répétitions dépend bien sûr du nombre de lignes dans le fichier. Trop c'est pas grave, une macro s'arrête quand une recherche n'aboutit pas. Pas assez ce n'est pas grave non plus, car pour un très gros fichier, ça permet de surveiller l'exécution : si l'exécution 10000 fois prend 1 minute mais n'a atteint que 10% du fichier, on peut envisager de faire 100000 fois et d'aller prendre un café, mais si ça n'a pas dépassé 0% du fichier, c'est le moment de faire un script sed ou perl !
Pour interrompre l'exécution, taper Ctrl-C.