O que eu faço é editar a macro, colocando e, em seguida, puxando o registro em um buffer temporário ou diretamente na linha de comando ( :let @q = <C-r>=string(@q)<CR>
). A menos que eu veja o erro, isso geralmente significa cortar a cauda da macro para ver onde ela está errada.
Você pode alternativamente tentar intercalar os comandos [N]gs
(ou seja, dormir N segundos), se isso ajudar você.