WinEnter, BufEnter, BufRead, Syntax, FileType घटनाओं का क्रम क्या है?


16

मैं autocmd.txtमदद के माध्यम से चला गया , लेकिन इस बारे में जानकारी बिखरी हुई है और हमेशा मौजूद नहीं है (उदाहरण के साथ BufRead)।

कोई व्यक्ति जो इस कुएं को समझता है, इन घटनाओं के क्रम को सूचीबद्ध कर सकता है - शायद परांठे में चिह्नित शर्तों की तरह

WinEnter   
BufEnter (if this window is for a different buffer than the current)

और इतने पर, आसान संदर्भ के लिए?

नोट (नीचे मेरी अपनी टिप्पणी से नकल) : मैं उनमें से व्यक्तिगत स्पष्टीकरण, जो ठीक हैं के बारे में बात नहीं कर रहा हूँ, लेकिन कैसे वे एक दूसरे के साथ बातचीत और किस क्रम में वे होने के बारे में। उदाहरण के लिए, WinEnterकहते हैं , "विम्न विंटर ऑटोकॉमंड के बाद BufEnter ऑटोकॉमैंड्स को निष्पादित करता है", TabEnterकहता है "WinEnter को ट्रिगर करने और BufEnter ईवेंट को ट्रिगर करने से पहले", यह सभी कई जगहों पर इस तरह बिखरा हुआ है। और कभी-कभी इसका उल्लेख बिल्कुल नहीं किया जाता है (उदाहरण के लिए। BufReadयह उल्लेख नहीं करता है कि क्या यह बुफनेटर के बाद या उससे पहले चलता है - शायद कोई विशेषज्ञ इसे किसी अन्य जानकारी के टुकड़े से प्राप्त कर सकता है, लेकिन मैं नहीं कर सकता।
इसलिए, मेरा इरादा यहाँ है। इन घटनाओं के क्रम के लिए एक एकल, सरल संदर्भ बनाएं, जिसे गैर-विशेषज्ञों द्वारा जल्दी से देखा जा सकता है,autocmd घटना विनिर्देशों।


मुझे लगता है कि अधिकांश स्पष्टीकरण ठीक हैं, क्या आप उन लोगों की सूची दे सकते हैं जिन्हें आप समझ नहीं सकते हैं?
nobe4

@ Nobe4 मैं उनके बारे में व्यक्तिगत स्पष्टीकरण के बारे में बात नहीं कर रहा हूं, जो वास्तव में ठीक हैं, लेकिन इस बारे में कि वे एक दूसरे के साथ कैसे और किस क्रम में बातचीत करते हैं। उदाहरण के लिए, WinEnterकहते हैं , "विम्न विंटर ऑटोकॉमंड के बाद BufEnter ऑटोकॉमैंड्स को निष्पादित करता है", TabEnterकहता है "WinEnter को ट्रिगर करने और BufEnter ईवेंट को ट्रिगर करने से पहले", यह सभी कई जगहों पर इस तरह बिखरा हुआ है। और कभी-कभी इसका उल्लेख नहीं किया जाता है (उदाहरण के लिए। BufReadयह उल्लेख नहीं करता है कि क्या यह बुफनेटर के बाद या उससे पहले चलता है - शायद कोई विशेषज्ञ इसे किसी अन्य जानकारी के टुकड़े से प्राप्त कर सकता है, लेकिन मैं नहीं कर सकता।
सूंदर - मोनिका

इसलिए, मेरा इरादा इन घटनाओं के क्रम के लिए एक एकल, सरल संदर्भ बनाना है, जो गैर-विशेषज्ञों द्वारा जल्दी से देखा जा सकता है, ताकि हमारे autocmdघटना विनिर्देशों में अधिक सटीक हो सके ।
सूंदर -

ठीक है, मैं इस सवाल को समझ नहीं पाया। आप हर घटना को लॉग इन करने की कोशिश कर सकते हैं, और उपस्थिति के क्रम को देख सकते हैं (यदि आप चाहें तो मैं एक उत्तर दे सकता हूं)
nobe4

आपका इरादा वास्तव में किसी को इस तरह के एक सरल संदर्भ प्रदान करने के बारे में पूछना है, न कि एक (खुद को) बनाना;)
VanLaser

जवाबों:


11

@ उत्तर को पूरा करने के लिए:

आप केवल लॉगिंग फ़ंक्शन के साथ घटनाओं के क्रम को लॉग कर सकते हैं:

augroup EventLoggin
  autocmd!
  autocmd BufNewFile * call s:Log('BufNewFile')
  autocmd BufReadPre * call s:Log('BufReadPre')
  ...
  autocmd User * call s:Log('User')
augroup END

function! s:Log(eventName) abort
  silent execute '!echo '.a:eventName.' >> log'
endfunction

यहां देखें पूरी फाइल: https://gist.github.com/nobe4/aa8313fe98ca8821afad

आप कर सकते हैं tail -f logऔर आप एक वास्तविक समय autocommand घटनाओं गतिविधि प्राप्त करते हैं।


3
मैंने इसके लिए एक सरल प्लगइन बनाया, यहां देखें ।
कार्ल यंगवे Lervåg

6
ध्यान दें कि @ KarlYngveLervåg ने अपने प्लगइन को दूसरे पथ पर स्थानांतरित कर दिया है । धन्यवाद कार्ल!
ल्यूक हरमिट्टे

ध्यान देने और टिप्पणी करने के लिए धन्यवाद, ल्यूक! (नोट: मैं मृत लिंक को ठीक करने के लिए अपनी टिप्पणी अपडेट नहीं कर सकता, क्षमा करें!)
कार्ल Yngve Lervåg

10

मैंने कीवर्ड के विभिन्न सेटों के साथ इसके लिए googling की कोशिश की, और इस परिणाम के साथ एक ऐसे प्रयास पर सोना मारा: http://www.ibm.com/developerworks/library/l-vim-script-5/

विशेष रूप से, यह भाग वर्तमान प्रश्न के लिए प्रासंगिक है:

उदाहरण के लिए, यदि आप विम शुरू करते हैं, तो डेमो टाइप नामक एक फाइल को संपादित करें। इंसर्ट मोड में स्वैप करें, कुछ टेक्स्ट में टाइप करें, फाइल को सेव करें, और फिर बाहर निकलें, आपके विम सत्र को उन घटनाओं की एक श्रृंखला प्राप्त होती है, जैसे सूची 1 में दिखाया गया है।

लिस्टिंग 1. एक साधारण विम संपादन सत्र में घटना क्रम

> विम

  1. BufWinEnter (एक डिफ़ॉल्ट विंडो बनाएं)
  2. BufEnter (एक डिफ़ॉल्ट बफर बनाएं)
  3. VimEnter (Vim सत्र प्रारंभ करें ) : Demo.txt को संपादित करें
  4. BufNew (एक नया बफर बनाएँ।
  5. BufAdd (सत्र की बफर सूची में उस नए बफ़र को जोड़ें)
  6. BufLeave (डिफ़ॉल्ट बफर से बाहर निकलें)
  7. BufWinLeave (डिफ़ॉल्ट विंडो से बाहर निकलें)
  8. BufUnload (बफर सूची से डिफ़ॉल्ट बफर निकालें)
  9. BufDelete (डिफ़ॉल्ट बफर को निपटाएं)
  10. BufReadCmd (नए बफर में Demo.txt के संदर्भों को पढ़ें)
  11. BufEnter (नए बफर को सक्रिय करें)
  12. BufWinEnter (नई बफ़र विंडो सक्रिय करें) i
  13. सम्मिलित करें (डालें मोड में स्वैप करें)

यह अभी भी पूरी तरह से व्यापक नहीं है (उदाहरण के लिए BufReadउर्फ का कोई उल्लेख नहीं है BufReadPost, लेकिन मैं मान रहा हूं कि यह बाद में आएगा BufReadCmd), लेकिन यह एक उत्कृष्ट शुरुआत है।

जानकारी का एक महत्वपूर्ण गायब टुकड़ा हालांकि यह है कि कैसे FileTypeऔर Syntaxऑटोकैड इवेंट इस के साथ बातचीत करते हैं (अनुमान लगा रहे हैं filetypeऔर syntaxपहले से ही हैं, और एक नई फ़ाइल खोली गई है जिसका फ़िलाटाइप और सिंटैक्स विम के लिए जाना जाता है)।


7
यह तब ही सही है जब आप किसी एकल फ़ाइल का संपादन कर रहे हों। आम धारणा के विपरीत, को लागू करने के आदेश autocmdसे अधिक फ़ाइलों भर में रों है नहीं अच्छी तरह से परिभाषित। और यहां तक ​​कि एक एकल फ़ाइल के साथ, विम के संस्करण के साथ ऑर्डर कुछ बार बदल गया है। प्लगइन्स के कारण (और क्या) के कारण होने वाली समस्याओं पर vim_dev की मृत्यु पर चर्चा की गई है, और समग्र डिजाइन भविष्य के भविष्य में बदलने वाला नहीं है। व्यापक समझ प्राप्त करने के लिए , खैर, apply_autocmdsविम 7.4.827 के स्रोतों में 139 घटनाएं हैं । उसके साथ अच्छा भाग्य।
सातो कैटसुरा

@SatoKatsura इस विशेषज्ञ राय की तरह मैं देख रहा था, धन्यवाद! क्या कुछ संदर्भ हैं जो आप इस बारे में और जानने के लिए सुझाव दे सकते हैं (विम के स्रोतों में गोताखोरी के अलावा)? इसके अलावा, यह पूरी तरह से आपके हित के क्षेत्र से बाहर हो सकता है, लेकिन क्या आपके पास कोई विचार है अगर चीजें 'नव-भूमि' में बेहतर परिभाषित हैं?
सूंदर -

मुझे डर है कि मुझे किसी निश्चित संदर्भ का पता नहीं है। autocmdविम में एस एक गड़बड़ है, मुझे नहीं लगता कि कुछ साधारण मामलों को छोड़कर, वास्तव में एक निश्चित संदर्भ लिखना संभव है। मुझे लगता है कि हर कोई बस "आमतौर पर काम करता है" के लिए बसता है, और जब यह नहीं होता है तो सिकुड़ जाता है। नियोविम के रूप में, मैं व्यक्तिगत रूप से परियोजना के बारे में मिश्रित भावनाएं हूं। मैंने हाल ही में कोड को नहीं देखा है; मुझे लगता है कि आप उनके मुद्दे ट्रैकर पर एक जवाब मिल सकता है।
सातो कैटसुरा

इसके अलावा "घटना" का शब्द भी एक निश्चित क्रम के विचार को तोड़ देना चाहिए।
VanLaser
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.