Diam harus pergi sebelum !./make.sh, bukan sebelumnya au. Menempatkan silentsebelum auberarti akan mendaftarkan perintah otomatis secara diam-diam. Seharusnya terlihat seperti ini:
au BufWritePost * silent! !./make.sh
Satu masalah dengan menjalankan perintah eksternal seperti ini dengan :silentperintah adalah bahwa layar tidak redraw, meninggalkan Anda dengan layar kosong. Namun, vim memang memiliki perintah yang menggambar ulang layar, yang dapat digunakan seperti:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
Alasan saya perlu menggunakan perintah eksekusi adalah karena :!perintah tersebut menggunakan karakter apa pun yang ditemukan setelahnya, yang berarti saya tidak bisa melakukannya silent! !./make.sh | redraw!karena bash akan mencoba menginterpretasikan semua karakter setelahnya !.
Catatan
Perhatikan bahwa :silent!mengabaikan pesan kesalahan, sedangkan :silenttidak. Juga, >/dev/null 2>&1bagian ini mengalihkan semua output !./make.shke /dev/null. Anda dapat membaca lebih lanjut tentang saya / redirection di bash di sini .
Perintah kedua berhasil, meskipun masih mencetak output di layar. Selain itu, saya tidak perlu menekan Enter saat skrip berakhir lagi, ini bagus. Tapi saya ingin tahu apakah ada cara untuk benar-benar menekan output.
Andre Herman Bezerra
1
Apakah mengganti execute "!./make.sh"dengan execute "!./make.sh >/dev/null 2>&1"bantuan? Ini mengalihkan semua output dari perintah ke /dev/null. Baca tldp.org/LDP/abs/html/io-redirection.html untuk informasi lebih lanjut tentang pengalihan di bash.
EvergreenTree
Aku seharusnya memikirkan itu! Berhasil. Terima kasih!
Andre Herman Bezerra
7
Jawaban atas pertanyaan langsung Anda sama seperti yang dikirim oleh @EvergreenTree. Namun saya merasa seperti Anda kehilangan beberapa alat builtin Vim untuk membangun / mengkompilasi / proyek linting. Terutama :makedan daftar perbaikan cepat.
Apa gunanya :makemembuat kita?
Menggunakan :makememungkinkan Anda untuk mengumpulkan kesalahan Anda menjadi daftar yang dikenal sebagai daftar perbaikan cepat. Menggunakan perbaikan cepat, Anda dapat menavigasi antara kesalahan dalam file Anda, sehingga Anda melompat langsung ke tempat kompiler mengatakan kesalahan itu (berguna kan?).
:membuat
Menjalankan :makeakan menjalankan program make 'makeprg',. Kemudian parsing output dengan 'errorformat'dan masukkan setiap entri ke daftar perbaikan cepat.
Biasanya 'makeprg'default untuk makeperintah yang menjalankan a Makefile. Namun Anda dapat mengubah Anda 'makeprg'melalui :compilerperintah atau mengaturnya secara langsung.
Anda juga dapat memberikan argumen tambahan :make. misalnya:make clean
Catatan: menjalankan :makeakan sering menampilkan output dari perintah di bagian bawah layar dengan permintaan yang meminta untuk menekan enter. Cukup tekan enter karena semua output akan tersedia dalam daftar perbaikan cepat. Anda dapat menekan ini melalui :silent, mis :silent make.
Perintah khusus umum untuk make diam adalah:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
daftar perbaikan cepat
Setelah Anda menjalankan :makedaftar perbaikan cepat Anda akan menahan output dari kompiler.
Gunakan perintah berikut untuk menavigasi daftar perbaikan cepat.
:copen untuk membuka jendela perbaikan cepat
:cclose untuk menutup jendela perbaikan cepat
:cnext/ :cprevuntuk pindah ke item berikutnya / sebelumnya
:ccuntuk mencetak di bagian bawah kesalahan saat ini atau :cc 3untuk menunjukkan kesalahan tertentu dalam contoh ini 3
Secara pribadi saya menggunakan plugin Tim Pope yang tidak rusak untuk menavigasi daftar perbaikan cepat.
Bagaimana dengan berlari :makesecara otomatis dan diam-diam?
Anda bisa melakukan ini dengan :autocmdsama seperti Anda di mana.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
Sebagai bonus saya menambahkan membuka jendela perbaikan cepat :cwindowjika ada kesalahan.
Catatan: Harus lebih spesifik dengan pola file pada BufWritePostautocmd sehingga file yang tidak terkait tidak dibuat.
Masih ada lagi ?!
Ini hanya menggunakan beberapa perintah built-in Vim plus beberapa autocmd untuk meyakinkan. Tentu saja ada plugin dan alat yang dapat membantu Anda
Dispatch.vim dapat digunakan untuk menjalankan :makepekerjaan secara tidak sinkron.
Syntastic pemeriksaan sintaks Plugin mengajukan setelah :write.
Ale.vim (Asynchronous Lint Engine) adalah sebuah plugin untuk menyediakan linting di NeoVim dan Vim 8 saat Anda mengedit file teks Anda.
Unimpaired.vim memudahkan pengelolaan daftar perbaikan cepat.
Makefiles tua polos. Kecuali jika Anda ./script.shsangat rumit, Anda mungkin ingin menggunakan make. Ini dapat skala melakukan lebih banyak tugas nanti dan merupakan alat bangunan umum.
Anda dapat menggunakan Vim Awesome untuk mencari lebih banyak plugin yang mungkin membantu.
Kesimpulan
Secara pribadi saya mengintegrasikan :makedan perbaikan cepat ke dalam alur kerja saya sendiri. Saya percaya menangkap output dari proses build Anda dan menangkap kesalahan agar bernilai investasi. Sebagai bonus tambahan, Anda mungkin akan lebih nyaman dengan daftar perbaikan cepat dan dapat menggunakan daftar untuk aplikasi lain seperti :grep.
Saya memikirkan :makesementara saya menjawab ini, tetapi saya tidak memasukkannya. Ini adalah ide yang lebih baik untuk menggunakan make foreompile things.
EvergreenTree
cara mengubah autocmd untuk hanya menjalankan makeprg pada file tertentu.
execute "!./make.sh"
denganexecute "!./make.sh >/dev/null 2>&1"
bantuan? Ini mengalihkan semua output dari perintah ke/dev/null
. Baca tldp.org/LDP/abs/html/io-redirection.html untuk informasi lebih lanjut tentang pengalihan di bash.Jawaban atas pertanyaan langsung Anda sama seperti yang dikirim oleh @EvergreenTree. Namun saya merasa seperti Anda kehilangan beberapa alat builtin Vim untuk membangun / mengkompilasi / proyek linting. Terutama
:make
dan daftar perbaikan cepat.Apa gunanya
:make
membuat kita?Menggunakan
:make
memungkinkan Anda untuk mengumpulkan kesalahan Anda menjadi daftar yang dikenal sebagai daftar perbaikan cepat. Menggunakan perbaikan cepat, Anda dapat menavigasi antara kesalahan dalam file Anda, sehingga Anda melompat langsung ke tempat kompiler mengatakan kesalahan itu (berguna kan?).:membuat
Menjalankan
:make
akan menjalankan program make'makeprg'
,. Kemudian parsing output dengan'errorformat'
dan masukkan setiap entri ke daftar perbaikan cepat.Biasanya
'makeprg'
default untukmake
perintah yang menjalankan aMakefile
. Namun Anda dapat mengubah Anda'makeprg'
melalui:compiler
perintah atau mengaturnya secara langsung.Anda juga dapat memberikan argumen tambahan
:make
. misalnya:make clean
Catatan: menjalankan
:make
akan sering menampilkan output dari perintah di bagian bawah layar dengan permintaan yang meminta untuk menekan enter. Cukup tekan enter karena semua output akan tersedia dalam daftar perbaikan cepat. Anda dapat menekan ini melalui:silent
, mis:silent make
.Perintah khusus umum untuk make diam adalah:
daftar perbaikan cepat
Setelah Anda menjalankan
:make
daftar perbaikan cepat Anda akan menahan output dari kompiler.Gunakan perintah berikut untuk menavigasi daftar perbaikan cepat.
:copen
untuk membuka jendela perbaikan cepat:cclose
untuk menutup jendela perbaikan cepat:cnext
/:cprev
untuk pindah ke item berikutnya / sebelumnya:cc
untuk mencetak di bagian bawah kesalahan saat ini atau:cc 3
untuk menunjukkan kesalahan tertentu dalam contoh ini 3Secara pribadi saya menggunakan plugin Tim Pope yang tidak rusak untuk menavigasi daftar perbaikan cepat.
Bagaimana dengan berlari
:make
secara otomatis dan diam-diam?Anda bisa melakukan ini dengan
:autocmd
sama seperti Anda di mana.Sebagai bonus saya menambahkan membuka jendela perbaikan cepat
:cwindow
jika ada kesalahan.Catatan: Harus lebih spesifik dengan pola file pada
BufWritePost
autocmd sehingga file yang tidak terkait tidak dibuat.Masih ada lagi ?!
Ini hanya menggunakan beberapa perintah built-in Vim plus beberapa autocmd untuk meyakinkan. Tentu saja ada plugin dan alat yang dapat membantu Anda
:make
pekerjaan secara tidak sinkron.:write
../script.sh
sangat rumit, Anda mungkin ingin menggunakan make. Ini dapat skala melakukan lebih banyak tugas nanti dan merupakan alat bangunan umum.Kesimpulan
Secara pribadi saya mengintegrasikan
:make
dan perbaikan cepat ke dalam alur kerja saya sendiri. Saya percaya menangkap output dari proses build Anda dan menangkap kesalahan agar bernilai investasi. Sebagai bonus tambahan, Anda mungkin akan lebih nyaman dengan daftar perbaikan cepat dan dapat menggunakan daftar untuk aplikasi lain seperti:grep
.Untuk bantuan lebih lanjut lihat:
sumber
:make
sementara saya menjawab ini, tetapi saya tidak memasukkannya. Ini adalah ide yang lebih baik untuk menggunakan make foreompile things.