Vimscript'te belirli bir dosya olup olmadığı nasıl tespit edilir?


105

Geçerli dizinde bir dosya olup olmadığını kontrol etmek için Vimscript'te zarif bir yol arıyorum.

Aşağıdaki kodu buldum ancak bunun en zarif çözüm olup olmadığından emin değilim (dosya varsa bir Vim seçeneği ayarlayacağım). Dosya adıyla başka bir karşılaştırma yapmamanın bir yolu var mı?

Belki Vim'den farklı bir yerleşik işlev kullanın?

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

Yanıtlar:


138

Biraz araştırma yaptıktan sonra vim manbunu buldum, ki bu orijinalinden çok daha iyi görünüyor:

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

4
Ya SpecificFile varsa, ancak mevcut kullanıcı tarafından okunamıyorsa. Belki dosya bulma daha iyidir.
ppan

2
Okunabilirliği önemsemiyorsanız filereadablekullanabileceğiniz sözler için yardım glob.
Sumudu Fernando

8
dosya okunabilirse (genişletme ("~ / .vim / bundle / vundle / README.md")) let g: hasVundle = 1 endif
thinker3

@metaphy bu mükemmel bir yorum, daha fazla görünürlük sağlamak için buna dayalı bir cevap ekledim , ancak krediyi isterseniz kendi cevabınızı eklemekten çekinmeyin ve benimkini sileceğim.
icc97

56

Bazı yorumlar filereadable, globbunun yerine kullanımla ilgili endişeleri ifade ediyor . Bu, var olan bir dosyaya sahip olma sorununu giderir, ancak izinler okunmasını engeller. Bu tür durumları tespit etmek istiyorsanız, aşağıdakiler çalışacaktır:

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

Anlıyorum E116: Invalid arguments for function. Bir eklenti olup olmadığını kontrol etmek için dosyayı ana dizine göre nasıl belirtirsiniz? (Ayrıca buraya bakın )
Scz

Kullanıcı ana dizininden mi bahsediyorsunuz? Sanırım sadece a ~, ama pozitif değilim. Bu hatayı aldığınızda hangi argümanları sağladınız?
brianmearns

1
Onu denedim ~ve o hatayı verdi. Şimdi tekrar denedim ve işe yarıyor ... :-)
Scz

1
Muhtemelen sadece bir yazım hatası ya da bir şey. Ama sizin için çalıştığına sevindim!
brianmearns

Diğer yanıtın aksine, bu dizinler için de işe yarıyor gibi görünüyor.
Brian McCutchon

12

Metafinin kabul edilen yanıt hakkındaki yorumuna biraz daha görünürlük kazandırmak :

dosya okunabiliyorsa (genişletme ("~ / .vim / bundle / vundle / README.md")) let g: hasVundle = 1 endif

filereadablegerekli olan şeydir, ancak yolunuzda expandkullanmanız gereken ekstra kullanışlı bir adım vardır ~:

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

Örneğin

  • :echo filereadable('~/.vimrc')verir 0,
  • :echo filereadable(expand('~/.vimrc')) verir 1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.