यह देखने के लिए कि कोई प्लगइन सक्रिय है या नहीं


15

यदि vim-latexsuiteमैं उपयुक्त फ़ाइल खोलता हूं, तो मैं यह कैसे निर्धारित कर सकता हूं कि कोई फ़िलाटाइप प्लगइन (जैसे ) स्थापित और सक्रिय किया गया है? एक अन्य लोकप्रिय संपादक संकेत देगा कि प्रासंगिक "मामूली मोड" सक्रिय है। क्या समतुल्य है?

जवाबों:


20

मैं यह कैसे निर्धारित कर सकता हूं कि कोई फ़िलाटाइप प्लगइन (जैसे विम-लेटेक्सुसाइट) स्थापित किया गया है

आप :scriptnamesसभी खट्टी फाइलों की सूची का उपयोग कर सकते हैं ।

एक अन्य विकल्प यह है कि चर को इंगित करने के लिए जाँच करें कि क्या प्लग लोड किया गया था, जैसा कि यह है recommended practice to allow the user to disable the loading of a given plugin.। आप आमतौर पर फ़ोल्डर के g:loaded_...अंदर चर पा सकते हैं <plugin_name>/pluginआपके द्वारा बताए गए प्लगइन के लिए आप उपयोग कर सकते हैं echo exists("loaded_libList")

और जब मैं उचित फ़ाइल खोलूं तो सक्रिय हो जाएगा?

यदि यह एक फ़ायलेटाइप प्लगइन है तो 'filetype'विकल्प सेट होने पर इसे स्वचालित रूप से सक्रिय किया जाना चाहिए । आप जाँच सकते हैं कि क्या विकल्प वर्तमान बफर के लिए सही है:

:set filetype?

एक अन्य लोकप्रिय संपादक संकेत देगा कि प्रासंगिक "मामूली मोड" सक्रिय है। क्या समतुल्य है?

आप इस तरह के संकेत दिखाने के लिए अपनी स्थिति को अनुकूलित कर सकते हैं, या तो प्लगइन्स का उपयोग कर सकते हैं या सीधे विकल्पों के माध्यम से, जैसा कि vi-improved.org:help 'statusline' पर बताया गया है ।


6

विम प्लगइन्स किसी भी सक्रियण संकेत के साथ नहीं आते हैं, और एक उचित सेटअप में, यह आवश्यक नहीं है।

आप जल्दी से जांच कर सकते हैं कि क्या कोई प्लगइन इसके साइड इफेक्ट्स, आमतौर पर मैपिंग के लिए क्वेरी करके सक्रिय है या नहीं। इसलिए, उदाहरण के लिए, मुझे पता है कि NERDCommenter मैपिंग के साथ शुरू होता है <Leader>c, इसलिए इसके सक्रियण के लिए एक क्वेरी होगी :nmap <Leader>c। यदि मैपिंग सूचीबद्ध हैं, तो प्लगइन सक्रिय है। कस्टम कमांड के लिए और :autocmdप्लगइन के समूह में समान हासिल किया जा सकता है । अधिकांश प्लगइन्स एक समावेश गार्ड चर को भी परिभाषित g:loaded_pluginnameकरते हैं जिन्हें जांचा जा सकता है।

यही बात filetype plugins पर लागू होती है (और प्रभाव तब सभी को बफर-स्कोप होना चाहिए)। सक्रिय प्लगइन्स का निर्धारण करने में सबसे महत्वपूर्ण कारक फ़िलेटाइप का सही पता लगाना है। आप उस के माध्यम से क्वेरी कर सकते हैं :setlocal filetype?या यहां तक 'statusline'कि %y/ %Yआइटम के माध्यम से इसे अपने में डाल सकते हैं ।


6

उस विशेष मामले में, मैं केवल साथ खेलूंगा :scriptnames। हम यह जांचने के लिए एक वैश्विक चर का उपयोग करने की उम्मीद नहीं कर सकते हैं कि क्या एक फीट प्लगइन लोड किया गया है - लाटेक्सुइट में प्लगइन्स हो सकते हैं, मुझे याद नहीं है, जो कुछ निश्चित है वह है कि बहुत सारे फुटप्लगिन स्क्रिप्ट हैं। कई ftplugins का उपयोग करें b:did_ftplugin(कम से कम विम के साथ भेज दिया), लेकिन यह दृष्टिकोण निश्चित रूप से पैमाने पर नहीं होता है: परिणाम में, सभी ftplugins इस व्यर्थ चर का उपयोग नहीं करते हैं, और हम एक सामान्य चर नाम की जांच नहीं कर सकते हैं कि क्या एक दिया गयाplugin है लोड किया गया है - उदाहरण के लिए, अकेले C के लिए मेरे पास 22 ftplugins हैं, वे निश्चित रूप से समान एंटी-रिनिवलिंग गार्ड का उपयोग नहीं कर रहे हैं।

तो :scriptname:scriptnameहमारी मानव आंखों के लिए, अलास बहुत सारे अनियंत्रित परिणाम देता है। सौभाग्य से execute()(हाल ही में एक समारोह), और filter()बचाव के लिए आते हैं। उस स्थिति में, मैं लेटेक्स से संबंधित विम लिपियों की तलाश करूंगा

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

इसके अलावा यदि आप एक प्लगइन प्रबंधक का उपयोग कर रहे हैं, तो संभावना है कि प्लगइन प्रबंधक 'runtimepath'विकल्प का उपयोग कर रहा है। आप इसके मान को प्रदर्शित कर सकते हैं :echo &rtp। आप इसके मान को फ़िल्टर भी कर सकते हैं:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(यह आपको बताएगा कि क्या आपके प्लगइन प्रबंधक ने आपके प्लगइन, आपके मामले में LaTeX-suite को सक्रिय कर दिया है। यह आपको यह नहीं बताएगा कि संबंधित फ़्लिपगिंस सही ढंग से लोड किए गए हैं या नहीं। :scriptnameयह जानकारी आपको देगा।


3

यदि आप ऑटोकॉमैंड्स द्वारा फिल्टाइप प्लगइन्स को सक्रिय करते हैं, तो आप वर्बोज़ = 9 को सेट कर सकते हैं ताकि विम ऑटोकोमैंड्स को प्रतिध्वनित करें क्योंकि यह उन्हें निष्पादित करता है:

:set verbose=9

3

एक तरीका यह है कि आप रेगेक्स सर्च करें runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

यदि आप विम-प्लग का उपयोग कर रहे हैं , तो यहां जांचने का एक सामान्य उद्देश्य तरीका है:

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

उपयोग:

if PlugLoaded('MY-PLUGIN')
    " ...
endif

यह पर्याप्त नहीं है। इसके अलावा, यह केवल प्लगइन प्रबंधकों के साथ स्थापित प्लगइन्स का ख्याल रखता है। सभी मामलों में, यह प्लगइन्स के भीतर शिप किए गए फुटप्लगिन लिपियों का ध्यान नहीं रखता है, जो ओपी का प्रश्न था।
ल्यूक हरमिट

0

यदि आप विम-प्लग का उपयोग करते हैं , तो यह एक चर सेट करता है, plugsजो आपके सभी लोड किए गए प्लगइन्स को सूचीबद्ध करता है, और उनके बारे में कुछ जानकारी। जब मैं YCM या coc.nvim चला रहा था, यह जांचने की आवश्यकता होने पर मैंने आपके लिए अपने प्रश्न को हल किया। has_key(plugs, "name")उदाहरण के लिए, यदि कोई प्लग इन लोड हो रहा है , तो आप देख सकते हैं :

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

नोट: यह केवल दिखाता है कि यह वर्तमान में आपके में सूचीबद्ध है vimrcया नहीं, उदाहरण के लिए, यदि आपने इसे आलसी लोड पर सेट किया है, तो

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

स्टार्टअप पर अभी भी प्रिंट होगा, भले ही nerdtreeअभी तक लोड नहीं किया गया है।

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