2010-06-23 5 views
76

Poszukuję eleganckiego sposobu sprawdzania, czy plik istnieje w bieżącym katalogu w funkcji.vimscript: Jak wykryć, czy określony plik istnieje

Wpadłem na to, ale nie jestem pewien, czy to jest najbardziej eleganckie rozwiązanie (ustawię opcję vim, jeśli istnieje) - czy jest jakiś sposób na uniknięcie konieczności kolejnego porównania nazwy pliku - może użyć innego vim wbudowana funkcja (?):

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

Odpowiedz

107

przy odrobinie szukając w vim man Znalazłem ten, który wygląda znacznie lepiej, że oryginalny:

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

Co jeśli plik SpecificFile istnieje, ale nie jest dostępny dla bieżącego użytkownika. Może plik findfile jest lepszy. – ppan

+0

Pomoc dla "filereadable" wspomina, że ​​możesz użyć 'glob', jeśli nie zależy ci na czytelności. –

+3

if filereadable (expand ("~/.vim/bundle/vundle/README.md")) let g: hasVundle = 1 endif – metaphy

34

niektóre komentarze wyrażają obawy filereadable i zamiast tego użyj glob. Rozwiązuje to problem istnienia pliku, który istnieje, ale uprawnienia uniemożliwiają jego odczytanie. Jeśli chcesz wykryć takie przypadki, działa:

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

Otrzymuję 'E116: nieprawidłowe argumenty funkcji". W jaki sposób określić plik względem katalogu domowego, aby sprawdzić wtyczkę? (Zobacz także [tutaj] (http://stackoverflow.com/a/30444477/3596168)) – Scz

+0

Czy mówisz o katalogu domowym użytkownika? Zgaduję tylko "~", ale nie jestem pozytywny. Jakie argumenty dostarczyłeś, gdy dostałeś ten błąd? – brianmearns

+1

Próbowałem go z '~', i dało to błąd. Teraz spróbowałem ponownie i działa ... :-) – Scz