Quando você executa um comando externo :!
, o Vim não sabe o que o comando externo pode ter gravado no terminal, portanto, você espera que você confirme que está pronto para continuar.
Para evitar isso, você pode usar a system()
função assim:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Você também pode simplificar isso em um comando:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Um problema com a chamada system()
é que você perde as mensagens de erro que ela pode produzir. Isso pode ser resolvido usando em echo
vez de call
, da seguinte maneira:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
No entanto, isso ecoa uma linha vazia na tela quando o comando é bem-sucedido, causando outro prompt "Pressione ENTER ou digite o comando para continuar". A solução mais simples para isso é aumentar a altura da linha de comando:
:set cmdheight=2
Outra solução mais complicada seria repetir uma mensagem apenas se houver uma. Você evita o prompt sem perder espaço na tela.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif