Lorsque vous exécutez une commande externe avec :!
, Vim ne sait pas ce que la commande externe a pu écrire sur le terminal, il attend donc que vous confirmiez que vous êtes prêt à continuer.
Pour éviter cela, vous pouvez utiliser la system()
fonction comme ceci:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Vous pouvez également simplifier cela en une seule commande:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Un problème avec l'appel system()
est que vous perdez tous les messages d'erreur qu'il pourrait produire. Cela peut être résolu en utilisant echo
au lieu de call
, comme ceci:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Toutefois, cela renvoie une ligne vide à l'affichage lorsque la commande réussit, provoquant une autre invite "Appuyez sur ENTRÉE ou tapez commande pour continuer". La solution la plus simple pour cela est d'augmenter la hauteur de la ligne de commande:
:set cmdheight=2
Une autre solution, plus compliquée, serait de faire écho à un message uniquement s'il en existe un. Ensuite, vous évitez l'invite sans perdre d'espace sur l'écran.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif