Wenn Sie einen externen Befehl mit ausführen :!
, weiß Vim nicht, was der externe Befehl möglicherweise in das Terminal geschrieben hat, und wartet daher darauf, dass Sie bestätigen, dass Sie bereit sind, fortzufahren.
Um dies zu vermeiden, können Sie die folgende system()
Funktion verwenden:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Sie können dies auch auf einen Befehl vereinfachen:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Ein Problem beim Aufrufen system()
besteht darin, dass Sie alle Fehlermeldungen verlieren, die möglicherweise auftreten. Das kann gelöst werden, indem man echo
statt call
wie folgt verwendet:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Dies führt jedoch zu einer leeren Zeile in der Anzeige, wenn der Befehl erfolgreich ist, und führt zu einer weiteren Eingabeaufforderung "Drücken Sie die EINGABETASTE oder geben Sie den Befehl ein, um fortzufahren". Die einfachste Lösung besteht darin, die Höhe der Befehlszeile zu erhöhen:
:set cmdheight=2
Eine andere, kompliziertere Lösung wäre, eine Nachricht nur dann wiederzugeben, wenn es eine gibt. Dann vermeiden Sie die Eingabeaufforderung, ohne Platz auf dem Bildschirm zu verlieren.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif