2012-12-04 14 views
17

अभी मैं अपने .vimrc फ़ाइल को साफ़ कर रहा हूं यह सुनिश्चित करने के लिए कि यह अधिकांश सिस्टम पर संगत है।विम: जांच कर रहा है कि फ़ंक्शन मौजूद है

मेरी स्थिति में मैं एक फ़ंक्शन का उपयोग करता हूं जो एक और प्लगइन सेट करता है, GitBranchInfoString() फ़ंक्शन this plugin द्वारा पेश किया गया फ़ंक्शन।

मैं क्या करना चाहता हूं यह जांचें कि यह फ़ंक्शन सेट है या नहीं, और उसके बाद इसे स्थिति रेखा में जोड़ें। यह अपनी खुद की रेखा में होगा इसलिए मुझे इसकी जांच करने की आवश्यकता है।

इसे पूरा करने का सबसे आसान तरीका क्या होगा?

आपकी सभी मदद के लिए धन्यवाद!

संपादित करें:

मैं निम्नलिखित है:

if exists('*GitBranchInfoString') 
    let &stl.='%{GitBranchInfoString()}' 
endif 

उत्तर

25

उपयोग

if exists("*GitBranchInfoString") 
    " do stuff here 
endif 
+0

यह इसकी जांच करता है, लेकिन किसी कारण से यह स्थिति रेखा पर लागू नहीं होता है। मैंने जो कुछ किया है उसके साथ मैंने प्रश्न अपडेट किया। – greduan

+5

@Eduan vimrc किसी भी प्लगइन लोड होने से पहले सोर्स किया जाता है। 'VimEnter' ईवेंट पर इस स्थिति का उपयोग करें, स्टेटसलाइन सामग्री को '~/.vim/after/plugin/statusline.vim' में रखें (' statusline' कोई नाम हो सकता है) या 'रनटाइम प्लगइन/गिट-शाखा-info.vim' चेक से पहले (यह आपको इस प्लगइन को '--noplugin' विकल्प के साथ अक्षम करने के लिए मना कर देगा, अन्य समाधान नहीं होंगे)। – ZyX

+0

मैं देखता हूं, मैं बाद में कोशिश करूंगा, और आपको कोई प्रतिक्रिया दूंगा। :) – greduan

6

वर्तमान में चयनित जवाब मुझे (विम 7.4/Ubuntu का उपयोग करके) के लिए काम नहीं करता। मुझे विश्वास है कि क्योंकि है:

.vimrc से पहले किसी भी प्लगइन्स

लोड किए गए हैं के रूप में @ZyX एक टिप्पणी में यह उल्लेख किया प्राप्त किया जाता है।

मेरी पसंदीदा विधि केवल प्लगइन फ़ाइल के अस्तित्व की जांच करें। मुझे बाहरी फ़ाइल में एक अलग फ़ंक्शन लिखने से यह क्लीनर मिलता है।

if !empty(glob("path/to/plugin.vim")) 
    echo "File exists." 
endif 
+0

+ 1। सिंडस्टिक को वंडल के माध्यम से स्थापित किया गया है या नहीं, यह जांचने के लिए नमूना: 'अगर! खाली (ग्लोब (विस्तार करें (": पी: एच")। "/ .vim/bundle/syntastic"))। (देखें [यहां] (http://superuser.com/a/120011/4160)।) –

0

बस एक विकल्प के रूप में आप भी एक regexp तय करने के लिए उपयोग कर सकते हैं, तो हाथ में प्लगइन में है अपने runtimepath:

if &rtp =~ 'plugin-name' 
    ... 
endif 

यह लाभ है कि यह प्लग-इन है कि केवल vimscript कोड है के साथ काम करता है autoload निर्देशिका में, जो बदले में नहीं पहचाना जा सकता है जब .vimrc प्रारंभ में पार्स किया जाता है क्योंकि फ़ंक्शन कॉल के समय ऑटोलोड स्निपेट लोड होते हैं।

संबंधित मुद्दे