2010-06-23 6 views
76

Je cherche une manière élégante dans vimscript pour vérifier si le fichier existe dans le répertoire courant dans une fonction.vimscript: Comment détecter si un fichier spécifique existe

Je suis venu avec cela mais je ne sais pas si c'est la solution la plus élégante (je vais définir l'option vim si elle existe) - est-il possible de ne pas faire une autre comparaison du nom de fichier - vim fonction intégrée (?):

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

Répondre

107

Avec un peu de recherche dans vim man que j'ai trouvé ce qui est beaucoup mieux que l'original:

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

Que se passe-t-il si SpecificFile existe, mais n'est pas lisible pour l'utilisateur actuel. Peut-être que findfile est meilleur. – ppan

+0

L'aide pour les mentions 'filereadable' vous pouvez utiliser' glob' si vous ne vous souciez pas de la lisibilité. –

+3

si filereadable (développez ("~/.vim/bundle/vundle/README.md")) laissez g: hasVundle = 1 endif – metaphy

34

Certains des commentaires expriment des préoccupations au sujet filereadable et en utilisant glob à la place. Cela résout le problème d'avoir un fichier qui existe, mais les autorisations l'empêchent d'être lu. Si vous voulez détecter de tels cas, ce qui suit fonctionnera:

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

Je reçois 'E116: arguments non valides pour la fonction'. Comment spécifiez-vous le fichier relatif au répertoire de base pour vérifier un plugin? (Voir aussi [ici] (http://stackoverflow.com/a/30444477/3596168)) – Scz

+0

Parlez-vous du répertoire personnel de l'utilisateur? Je devinerais juste un '' ', mais je ne suis pas positif. Quels arguments avez-vous fournis lorsque vous avez eu cette erreur? – brianmearns

+1

Je l'ai essayé avec '~', et il a donné cette erreur. Maintenant j'ai essayé encore et cela fonctionne ... :-) – Scz

Questions connexes