Eu criei um augroup
no meu .vimrc
contendo vários autocmd
e eu preciso ativar / desativar estes autocommand
em tempo real.
A idéia é criar um mapeamento (digamos, F4por exemplo) que habilite esses comandos automáticos quando pressionados uma vez e os desabilite quando pressionados novamente sem precisar gerar um arquivo ou recarregar o arquivo .vimrc
.
Como eu posso fazer isso?
key-bindings
autocmd
statox
fonte
fonte
else
ramificação, executando oautocmd!
incondicionalmente no início.exists('#TestAutoGroup#BufEnter')
retornaria após umautocmd!
?(Na verdade, eu descobri isso sozinho, mas como não encontrei uma resposta neste site, pensei que seria útil criar uma pergunta auto-respondida )
Para isso, é possível criar a seguinte função e colocá-la no
.vimrc
:A função cria uma variável usada para determinar se o grupo foi ativado anteriormente ou não.
Quando não foi ativado, o grupo é preenchido com os comandos automáticos desejados. Se o grupo foi ativado anteriormente, usamos
autocmd!
para "redefinir", ou seja, excluir o comando anteriormente inserido nele.Uma documentação relevante está aqui
Por fim, é possível criar o seguinte mapeamento:
para usar F4para chamar a função.
EDIT : Karl Yngve Lervåg sugeriu uma versão aprimorada dessa função que reduziu o número de linhas de código; achei que seria bom manter as duas versões, a primeira ainda funcionando, talvez mais fácil de entender por um estreante do vimscript como eu.
Aqui está a função aprimorada de Karl, muito obrigado a ele:
Nesta versão, o grupo é sempre redefinido e, se não foi ativado, é preenchido com os comandos automáticos desejados
fonte
Acho que a maneira mais fácil é usar uma variável global. Exemplo:
Para obter mais ajuda, consulte:
fonte