कैसे पता लगाएं कि क्या कोई विशिष्ट फ़ाइल Vimscript में मौजूद है?


105

मैं यह देखने के लिए Vimscript में एक सुरुचिपूर्ण तरीके की तलाश कर रहा हूं कि क्या वर्तमान निर्देशिका में कोई फ़ाइल मौजूद है।

मैं नीचे दिए गए कोड के साथ आया था, लेकिन मुझे यकीन नहीं है कि यह सबसे सुंदर समाधान है (यदि फ़ाइल मौजूद है तो मैं एक विम विकल्प सेट करूँगा)। फ़ाइल नाम की एक और तुलना नहीं करने का कोई तरीका है?

शायद विम से एक अलग बिल्ट-इन फ़ंक्शन का उपयोग करें?

:function! SomeCheck()
:   if findfile("SpecificFile", ".") == "SpecificFile"
:       echo "SpecificFile exists"
:   endif
:endfunction

जवाबों:


138

में खोज का एक सा के साथ vim manमैं इस पाया है, जो बहुत है कि मूल बेहतर लग रहा है:

:function! SomeCheck()
:   if filereadable("SpecificFile")
:       echo "SpecificFile exists"
:   endif
:endfunction

4
क्या होगा अगर SpecificFile मौजूद है, लेकिन वर्तमान उपयोगकर्ता के लिए पठनीय नहीं है। शायद फाइफ़ाइल बेहतर है।
9

2
यदि आप पठनीयता की परवाह नहीं करते filereadableहैं globतो उल्लेख के लिए सहायता का उपयोग कर सकते हैं ।
सुमुदु फर्नांडो

8
अगर filereadable (विस्तार ("~ ~ .vim / बंडल / vundle / README.md")) g: hasVundle = 1
एंडीफ़

@metaphy यह एक उत्कृष्ट टिप्पणी है, मैंने इसे अधिक दृश्यता देने के लिए इस पर आधारित एक उत्तर जोड़ा है , लेकिन यदि आप चाहते हैं कि क्रेडिट आपके स्वयं के उत्तर को जोड़ने के लिए स्वतंत्र महसूस करे और मैं इसे हटा दूंगा।
ic9797

56

टिप्पणियों में से कुछ के बारे में filereadableऔर globइसके बजाय का उपयोग कर चिंता व्यक्त करते हैं। यह मौजूद होने वाली फ़ाइल को संबोधित करता है, लेकिन अनुमतियाँ इसे पढ़ने से रोकती हैं। यदि आप ऐसे मामलों का पता लगाना चाहते हैं, तो निम्नलिखित काम करेंगे:

:if !empty(glob("path/to/file"))
:   echo "File exists."
:endif

मुझे मिलता है E116: Invalid arguments for function। आप प्लगइन के लिए जाँच करने के लिए होम डायरेक्टरी के सापेक्ष फ़ाइल कैसे निर्दिष्ट करते हैं? ( यहां भी देखें )
Scz

क्या आप उपयोगकर्ता होम निर्देशिका के बारे में बात कर रहे हैं? मैं सिर्फ अनुमान लगाऊंगा ~, लेकिन मैं सकारात्मक नहीं हूं। जब आपको वह त्रुटि मिली, तो आपने क्या तर्क दिए?
ब्रायनमर्न्स 10

1
मैंने इसके साथ प्रयास किया ~, और इसने वह त्रुटि दी। अब मैंने फिर से कोशिश की और यह काम करता है ... :-)
Scz

1
शायद सिर्फ एक टाइपो या कुछ और। लेकिन खुशी है कि यह आपके लिए काम किया!
ब्रायनमर्न्स

अन्य उत्तर के विपरीत, यह निर्देशिकाओं के लिए भी काम करता है।
ब्रायन मैककिनटन

12

स्वीकृत उत्तर पर रूपक की टिप्पणी के लिए कुछ और दृश्यता देते हुए :

अगर filereadable (विस्तार करें ("~ / .vim / बंडल / vundle / README.md")) g: hasVundle = 1 endif

filereadableयह आवश्यक है, लेकिन आपके रास्ते में एक अतिरिक्त कदम expandहोना चाहिए, क्या आपको इसका उपयोग करना चाहिए ~:

:function! SomeCheck()
:   if filereadable(expand("SpecificFile"))
:       echo "SpecificFile exists"
:   endif
:endfunction 

उदाहरण के लिए

  • :echo filereadable('~/.vimrc')देता है 0,
  • :echo filereadable(expand('~/.vimrc')) देता है 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.