Cuando ejecuta un comando externo con :!
, Vim no sabe lo que el comando externo podría haber escrito en el terminal, por lo que espera a que confirme que está listo para continuar.
Para evitar eso, puede usar la system()
función de esta manera:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
También podría simplificar eso a un comando:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Un problema con las llamadas system()
es que pierde cualquier mensaje de error que pueda producir. Eso se puede resolver usando en echo
lugar de call
, así:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Sin embargo, eso hace eco de una línea vacía en la pantalla cuando el comando tiene éxito, provocando otro mensaje "Presione ENTRAR o escriba comando para continuar". La solución más simple para eso es aumentar la altura de la línea de comando:
:set cmdheight=2
Otra solución más complicada sería hacer eco de un mensaje solo si hay uno. Luego, evita la solicitud sin perder espacio en la pantalla.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif