Não há função como mode()
ou variável v:macro_running
especial, e muitos argumentariam que isso apenas encorajaria práticas ruins.
O que você pode fazer é usar o comportamento de feedkeys()
, cujas chaves passadas geralmente são executadas logo após o comando / mapeamento, mas apenas no final da execução da macro. Se você colocar seus comandos de longa execução lá, eles irão desacelerar diretamente os comandos normais como de costume, mas somente (cummulativamente) ficarão lentos após a execução da macro (e você pode geralmente abortar isso com <C-C>
).
Exemplo
let @q = ',a,b'
Em vez de:
nnoremap ,a aHello<Esc>2gs
nnoremap ,b aWorld<Esc>2gs
use
nnoremap ,a aHello<Esc>:call feedkeys('2gs', 'n')<CR>
nnoremap ,b aWorld<Esc>:call feedkeys('2gs', 'n')<CR>
Isso inserirá imediatamente todo o texto HelloWorld
dentro de uma macro.