Bagaimana cara menjalankan "ctags -R" untuk menyimpan file * .h dan * .cpp tanpa konfirmasi konfirmasi?

8

Ini adalah pertanyaan noob, jadi pada dasarnya di vim saya ingin menjalankan ctags -Rketika saya menulis ke file sumber atau header saya ( *.hatau *.cpp) jadi saya mencoba yang berikut:

autocmd BufWritePost *.cpp :!ctags -R
autocmd BufWritePost *.h :!ctags -R

Tampaknya berfungsi, tetapi setiap kali saya menyimpan, ia ingin konfirmasi, jadi saya harus menekan enter, seperti ini:

"coap/coap_pdu_ll.h" 30L, 793C written
:!ctags R

Press ENTER or type command to continue

Apakah ada cara untuk menghilangkan konfirmasi?

pengguna1135541
sumber

Jawaban:

10

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 echoalih-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
garyjohn
sumber
2

Karena sepertinya Anda menggunakan C ++ mengapa tidak membangun kembali tag Anda saat dikompilasi? Cukup tambahkan aturan ke makefile Anda.

Pilihan lain:

Peter Rincker
sumber
Saran yang sangat bagus, sebenarnya saya mencoba gutentag sekarang. Tapi, saya kebanyakan minimalis, bagi saya satu baris dalam file .vimrc lebih baik daripada sebuah plugin, kecuali plugin itu menawarkan saya sesuatu yang tidak bisa dilakukan oleh sebuah baris. Saya pikir plugin diperlukan untuk basis kode yang lebih besar.
user1135541