VIM: Como verificar se o script atual está sendo executado em uma macro?

1

Em vários casos, tenho alguns scripts vim que só quero executar quando não estão sendo executados em uma macro. Por exemplo, em alguns casos, eu pisco o cursor para me lembrar de onde está agora (o que é inútil quando executado em uma macro e faz com que a macro demore 10x).

Portanto, para esses casos, gostaria de verificar se ele está sendo executado como uma macro e evitar fazer a operação desnecessária nesse caso. Eu vasculhei a ajuda um pouco, mas não consegui encontrar uma flag para detectar isso. Isso é possível?

    
por Steve Vermeulen 04.11.2013 / 01:17

1 resposta

2

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.

    
por 04.11.2013 / 08:57