Mengapa saya harus menggunakan augroup?


31

Saya mengerti cara kerja perintah otomatis , dan cara menggunakannya, tapi saya sedikit yakin untuk apa augroup itu. Saya membaca:help augroup

                                                    *:aug* *:augroup*
:aug[roup] {name}               Define the autocmd group name for the
                                following ":autocmd" commands.  The name "end"
                                or "END" selects the default group.
                                To avoid confusion, the name should be
                                different from existing {event} names, as this
                                most likely will not do what you intended.

Ini tidak benar-benar menjelaskan mengapa mereka berguna, atau mengapa saya ingin membuat nama grup autocommand hanya dengan mendefinisikan sekelompok autocommand di samping satu sama lain.

Misalnya, jika autocommand foodan barterkait, mengapa saya ingin melakukannya

augroup spam
  au!
  au foo * foo
  au bar * bar
augroup END

ketika aku bisa melakukannya

"Autocommands for spam
au foo * foo
au bar * bar

Kecuali saya salah paham untuk apa sebenarnya augroup. Jadi mengapa ini bermanfaat?

Jawaban:


30

Alasan utama untuk menggunakan augroups adalah untuk memungkinkan kontrol yang lebih besar atas rentang perintah otomatis, misalnya untuk menghapus sekelompok perintah otomatis dalam sekali jalan. Pola umum adalah menggunakan au!sebagai bagian pertama grup. Ini menghapus semua autocommand yang ada di grup, dan memungkinkan seseorang untuk memulai lagi. Jika Anda tidak menggunakan grup, maka au!akan menghapus semua / banyak perintah otomatis yang tidak ingin Anda hapus.

Menghapus perintah otomatis sebenarnya cukup umum, misalnya dalam plugin, karena ini memungkinkan seseorang untuk sumber plugin / ftplugin beberapa kali. Jika Anda tidak menghapus perintah otomatis, maka setiap kali Anda menggunakan plugin / ftplugin, Anda akan menambahkan salinan baru dari perintah otomatis yang sama. Ini juga berlaku untuk vimrcfile Anda . Dengan menggunakan grup di file vimrc Anda, menjadi aman untuk memuatnya kembali.

Untuk info lebih lanjut, lihat :h 40.3.


19

Grup autocommand memberi Anda kesempatan untuk mengatur autocommand Anda, yang merupakan fitur yang cukup berguna.

Katakanlah Anda sedang menulis sebuah plugin. Mengelompokkan autocommand plugins Anda di bawah namespace Anda sendiri masuk akal, jika hanya karena memungkinkan Anda mengaktifkan / menonaktifkan autocommands Anda sesuka hati.

Secara vimrcmendasar Anda tidak berbeda dengan yang ada plugin/foo.vim, semua yang Anda dapatkan dengan grup perintah otomatis pada dasarnya lebih mengontrol pengaturan Anda.

Dalam praktek…

Jika Anda tidak menetapkan mereka ke grup, perintah otomatis "diinstal" di grup global secara default. Menginstal autocommand terkait dalam grup mereka sendiri tidak hanya membuat segalanya menjadi lebih jelas tetapi juga memungkinkan Anda untuk mencegah efek "tumpukan" yang ditakuti dengan sangat mudah dan dengan satu !:

augroup spam             versus    autocmd! Foo * foo
    autocmd!                       autocmd! Bar * bar
    autocmd Foo * foo
    autocmd Bar * bar
augroup END

Di sebelah kiri, seluruh grup dihapus sekaligus, sebelum setiap perintah otomatis dari grup tersebut dipasang dengan benar. Rapi.

Di sebelah kanan, Vim akan sia-sia menjalankan rutin "uninstall / instal" yang sama untuk setiap perintah otomatis. Kotor.

Tetapi Anda tidak harus menulis seluruh blok itu setiap kali jika Anda tidak mau. Perintah otomatis dapat ditetapkan secara langsung ke grup sehingga Anda dapat menentukan grup di suatu tempat:

augroup spam
    autocmd!
augroup END

dan letakkan autocommand di tempat yang Anda inginkan, bahkan di skrip lain:

autocmd spam Foo * foo
autocmd spam Bar * bar

Ini akan memberi Anda:

  • namespacing
  • pencegahan penumpukan
  • memesan
  • fleksibilitas

15

Selain jawaban lain, saya menemukan bahwa manfaat praktis yang paling langsung adalah membuatnya mudah untuk memuat ulang file vimscript.

Misalnya menempelkan ini di vimrc Anda:

autocmd BufCreate * echom "New buffer!"

Keluar, mulai ulang, buat buffer baru. Anda lihat New buffer!, yang dapat Anda verifikasi :messages.

Sekarang muat ulang vimrc Anda:, :source $MYVIMRCdan buat lagi buffer baru.

Apa yang kamu lihat sekarang?


Apakah saya menggunakan ini sebagai gantinya:

augroup inform_new_buffer
    autocmd!
    autocmd BufCreate * echom "New buffer!"
augroup end

Maka saya akan baik-baik saja. Saya membuat grup autocmd!perintah otomatis , perintah ini menghapus semua perintah otomatis yang ditentukan dalam grup itu . Itu penting, karena:

augroup inform_new_buffer
    autocmd BufCreate * echom "New buffer!"
augroup end

Hanya akan menambahkannya ke augroup yang sama


Dengan kata lain, itu adalah alasan yang sama kita semua mengetik fun!dan command!, alih-alih versi tanpa !itu tidak memungkinkan penggantian.


Sangat membantu untuk menyoroti arti "semantik" dari !:)
llinfeng
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.