मुझे एग्रुप का उपयोग क्यों करना चाहिए?


31

मैं समझता हूं कि ऑटो कमांड कैसे काम करते हैं, और उनका उपयोग कैसे किया जाता है, लेकिन मैं इस बात से थोड़ा आश्वस्त हूं कि ऑग्रुप क्या है। में पढ़ता हूँ: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.

यह वास्तव में नहीं समझाता है कि वे क्यों उपयोगी हैं, या मैं कभी भी एक दूसरे के बगल में ऑटोकॉमैंड्स के झुंड को परिभाषित करने के लिए एक ऑटोकॉमैंड समूह का नाम क्यों बनाना चाहूंगा।

उदाहरण के लिए, यदि ऑटोकॉम fooऔर barसंबंधित हैं, तो मैं क्यों करना चाहता हूं

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

जब मैं बस कर सकता था

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

जब तक मुझे गलतफहमी न हो कि वास्तव में कौन से समूह हैं। तो वे क्यों उपयोगी हैं?

जवाबों:


30

augroupS का उपयोग करने का मुख्य कारण ऑटोकॉमैंड्स की श्रेणियों पर अधिक नियंत्रण की अनुमति देना है, जैसे कि एक बार में ऑटोकॉमैंड्स का एक गुच्छा हटाना। एक सामान्य पैटर्न au!समूह के पहले भाग के रूप में उपयोग करना है । यह समूह में सभी मौजूदा ऑटोकॉमैंड्स को हटा देता है, और एक को नए सिरे से शुरू करने की अनुमति देता है। यदि आपने एक समूह का उपयोग नहीं किया है, तो au!सभी / कई ऑटोकॉमैंड को हटा देगा जिसे आप हटाना नहीं चाहते थे।

उदाहरण के लिए, प्लगइन्स में ऑटोकॉमैंड्स को हटाना वास्तव में काफी सामान्य है, क्योंकि यह एक प्लगइन को कई बार / प्लग इन करने की अनुमति देता है। यदि आपने ऑटोकॉमैंड्स को डिलीट नहीं किया है, तो हर बार जब आप प्लगइन / फेल्पुगिन को सॉर्ट करते हैं तो आप उसी ऑटोकॉमैंड की एक नई कॉपी जोड़ देंगे। यह आपकी vimrcफ़ाइल के लिए भी सही है । अपनी vimrc फ़ाइल में एक समूह का उपयोग करके, इसे फिर से लोड करना सुरक्षित हो जाता है।

अधिक जानकारी के लिए, देखें :h 40.3


19

ऑटोकॉमैंड समूह आपको अपने ऑटोकॉमैंड को व्यवस्थित करने का अवसर देते हैं, जो कि अपने आप में एक काफी उपयोगी विशेषता है।

कहते हैं कि आप एक प्लगइन लिख रहे हैं। अपने खुद के नामस्थान के तहत अपने प्लगइन के ऑटोकॉमैंड्स को समूहबद्ध करना समझ में आता है, यदि केवल इसलिए कि यह आपको अपने ऑटोकॉमैंड्स को इच्छानुसार सक्षम / अक्षम कर देता है।

आपका vimrcमूल रूप से एक से अलग नहीं plugin/foo.vimहै, सभी आपको ऑटोकॉमैंड समूहों के साथ मिलता है मूल रूप से आपके सेटअप पर अधिक नियंत्रण है।

प्रयोग में…

यदि आप उन्हें एक समूह में असाइन नहीं करते हैं, तो वैश्विक समूह में स्वतः पूर्णताएँ "डिफ़ॉल्ट रूप से" स्थापित होती हैं। अपने स्वयं के समूह में संबंधित ऑटोकॉमैंड्स स्थापित करने से न केवल चीजें स्पष्ट हो जाती हैं, बल्कि यह आपको बहुत आसानी से और एकल के साथ खतरनाक "पाइल-अप" प्रभाव को रोकने की अनुमति देता है !:

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

बाईं ओर, पूरे समूह को एक ही बार में अनइंस्टॉल किया जाता है, इससे पहले कि समूह के प्रत्येक ऑटोकॉमैंड ठीक से स्थापित हो। साफ।

दाईं ओर, Vim व्यर्थ रूप से प्रत्येक ऑटोकॉमैंड के लिए समान "अनइंस्टॉल / इंस्टॉल" रूटीन के माध्यम से चलेगा। गंदा।

लेकिन अगर आप नहीं चाहते हैं तो आपको हर बार उस पूरे ब्लॉक को लिखना होगा। ऑटोकॉमैंड्स को सीधे एक समूह को सौंपा जा सकता है ताकि आप कहीं एक समूह को परिभाषित कर सकें:

augroup spam
    autocmd!
augroup END

और अपने ऑटोकॉमैंड्स को जहां आप चाहते हैं, दूसरी स्क्रिप्ट में भी रखें:

autocmd spam Foo * foo
autocmd spam Bar * bar

यह आपको देगा:

  • नेमस्पेसिंग
  • पाइल-अप की रोकथाम
  • क्रम
  • लचीलापन

15

अन्य उत्तरों के अलावा, मुझे लगता है कि सबसे तात्कालिक व्यावहारिक लाभ यह है कि यह विम्सस्क्रिप्ट फ़ाइलों को पुनः लोड करना आसान बनाता है।

उदाहरण के लिए इसे अपने vimrc में चिपकाएँ:

autocmd BufCreate * echom "New buffer!"

छोड़ो, पुनः आरंभ करो, एक नया बफर बनाओ। आप देखते हैं New buffer!, जिसे आप सत्यापित कर सकते हैं :messages

अब अपना vimrc पुनः लोड करें: :source $MYVIMRCऔर फिर से एक नया बफर बनाएं।

अब आप क्या देखते हैं?


क्या मैंने इसके बजाय इसका उपयोग किया था:

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

तब मैं ठीक होता। मैं ऑटोकॉमैंड्स का एक समूह बनाता हूंautocmd! कमांड उस समूह में सभी परिभाषित ऑटोकॉमंड्स को स्पष्ट करता है । यह महत्वपूर्ण है, क्योंकि:

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

बस इसे उसी एग्रुप में जोड़ देंगे।


दूसरे शब्दों में, यह एक ही कारण है कि हम सभी प्रकार fun!और command!, इसके बिना संस्करणों के बजाय !ओवरराइडिंग की अनुमति नहीं देते हैं।


यह बहुत उपयोगी है: वह "अर्थ" का अर्थ !:)
लेलिनफेंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.