Quando esegui un comando esterno con :!
, Vim non sa cosa potrebbe aver scritto il comando esterno sul terminale, quindi aspetta che tu confermi che sei pronto per continuare.
Per evitarlo, puoi usare la system()
funzione in questo modo:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Puoi anche semplificarlo con un solo comando:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Un problema con la chiamata system()
è che si perdono tutti i messaggi di errore che potrebbe produrre. Questo può essere risolto usando echo
invece di call
, in questo modo:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Tuttavia, ciò fa eco a una riga vuota sul display quando il comando ha esito positivo, causando un altro prompt "Premere INVIO o digitare il comando per continuare". La soluzione più semplice è quella di aumentare l'altezza della riga di comando:
:set cmdheight=2
Un'altra soluzione più complicata sarebbe quella di fare eco a un messaggio solo se ce n'è uno. Quindi si evita il prompt senza perdere spazio sullo schermo.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif