Ketika Anda menjalankan perintah eksternal dengan :!
, Vim tidak tahu apa perintah eksternal mungkin telah ditulis ke terminal, sehingga menunggu Anda untuk mengkonfirmasi bahwa Anda siap untuk melanjutkan.
Untuk menghindarinya, Anda dapat menggunakan system()
fungsi seperti ini:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Anda juga dapat menyederhanakannya menjadi satu perintah:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Masalah dengan panggilan system()
adalah Anda kehilangan pesan kesalahan yang mungkin dihasilkannya. Itu bisa diselesaikan dengan menggunakan echo
alih-alih call
, seperti ini:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Namun, itu menggemakan baris kosong ke layar ketika perintah berhasil, menyebabkan "Tekan ENTER atau ketik perintah untuk melanjutkan" meminta. Solusi paling sederhana untuk itu adalah meningkatkan ketinggian baris perintah:
:set cmdheight=2
Solusi lain yang lebih rumit adalah dengan menggema pesan hanya jika ada. Maka Anda menghindari prompt tanpa kehilangan ruang layar.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif