सशर्त रूप से प्लगइन्स लोड कैसे करें


14

मैं इसका उत्तर खोज रहा था, लेकिन अभी तक कुछ भी नहीं मिला है, इसलिए अगर मुझे कुछ स्पष्ट याद नहीं है, तो मैं माफी चाहता हूं। मैंने सोचा था कि यह एक त्वरित Google खोज होगी, इसलिए शायद यह मेरे विचार से अधिक जटिल है।

मैं जिस प्रकार की फ़ाइल का संपादन कर रहा हूं, उसके आधार पर मैं सशर्त रूप से प्लगइन्स लोड करने में सक्षम होना चाहता हूं। उदाहरण के लिए, जब अजगर को संपादित करते हुए, मैं नहीं चाहता कि vim-sexpइंस्टॉल करने वाली कीबाइंडिंग हो , लेकिन जब क्लोजर पर काम कर रहा हूं, तो मैं चाहता हूं कि उस प्लग को लोड किया जाए।

मैं वर्तमान में neovim और pathogen का उपयोग कर रहा हूं, लेकिन अगर कोई अलग प्लगइन प्रबंधक है जो मेरे लिए ऐसा करता है, तो मैं स्विच करने के लिए खुला रहूंगा। इसके अलावा, अगर यह मौजूद है, :set syntax whateverतो प्लगइन्स को स्विच करता है? क्योंकि वह सुपर होगा :)

किसी भी मदद / दिशा के लिए अग्रिम धन्यवाद!


1
आप एक प्रश्न पूछ रहे हैं, लेकिन आप वास्तव में एक और वर्णन करते हैं: यदि कोई प्लगइन वैश्विक कीबाइंडिंग स्थापित करता है, तो उन्हें अक्षम करें (इसे कैसे करना है इसके बारे में प्लगइन डॉक्स पढ़ें), और उन्हें स्थानीय रूप से पुन: सक्षम करें (उदाहरण के लिए ऑटोकैम का उपयोग करके) केवल उन फ़िलिपेट्स के लिए। चाहते हैं। यदि प्लगइन अच्छी तरह से लिखा गया है, तो आप इसके प्रारंभ में देरी करके बहुत अधिक लाभ नहीं उठाते हैं। लेकिन यदि आप किसी प्लगइन द्वारा सक्रिय अवांछित वैश्विक कीबाइंडिंग को अक्षम नहीं करते हैं , तो प्लगइन लोड होने के बाद भी वे आपको प्रभावित करेंगे ।
वैनसेलर

जवाबों:


19

आप इसे विम-प्लग के साथ कर सकते हैं। README देखें :

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

मुझे लगता है कि आपको प्लगइन को सक्षम करने के :set filetype whateverबजाय उपयोग करना होगा set syntax whatever

(कुछ अन्य प्लगइन प्रबंधक आपको ऐसा करने की अनुमति दे सकते हैं, देखें कि विम प्लगइन प्रबंधकों के बीच अंतर क्या है? )


8

execute pathogen#infect()सभी प्लगइन्स को लोड करने के लिए कॉल करने के बजाय , pathogen#interposeहर प्लगइन को कॉल करें , अर्थात:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

रोगज़नक़ एपीआई को स्रोत के बाहर प्रलेखित नहीं किया गया है , लेकिन यह पर्याप्त सरल है (भले ही फ़ंक्शन नाम अस्पष्ट और गैर-वर्णनात्मक हैं)। आप pathogen#surround()निरपेक्ष रास्तों के लिए भी उपयोग कर सकते हैं।

आप प्लगइन्स को सशर्त रूप से एक मूल के साथ लोड कर सकते हैं autocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

यदि आपको लगता है कि आपके पास इनमें से कई मामले हैं, तो आप इसे अलग-अलग रास्तों में भी विभाजित कर सकते हैं:

  • ~/.vim/bundle/always प्लगइन्स के लिए आप हमेशा चाहते हैं
  • ~/.vim/bundle/<filetype> एक विशिष्ट फ़ाइल प्रकार के लिए प्लगइन्स के लिए
  • और फिर इसे इस तरह लोड करें:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

इस तरह आपको autocmdहर filetype / plugin के लिए एस का एक पूरा गुच्छा नहीं जोड़ना है ।

यदि यह मौजूद है, :set syntax whateverतो प्लगइन्स को स्विच करता है? क्योंकि वह सुपर होगा :)

  • एक बार एक प्लगइन लोड हो जाने के बाद, यह लोड हो जाता है। एक "प्लगइन" बस का एक संग्रह है function, commandऔर mapdefinitons। मैं इसे "अनलोड" करने के लिए किसी भी सीधे तरीके से नहीं जानता।

  • यह आपके द्वारा उपयोग किए जाने वाले फिलामेंट के लिए प्लग इन लोड करता है:set filetype ; सामान्य तौर पर, आप हमेशा उपयोग करना चाहते हैं :set filetypeऔर नहीं :set syntax , के रूप में syntaxकेवल वाक्य रचना हाइलाइटिंग सेट हो जाएगा, और नहीं खरोज और अन्य सेटिंग्स (जैसे iskeyword, formatexpr, आदि)।

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