web-dev-qa-db-fra.com

Comment détecter si un fichier spécifique existe dans Vimscript?

Je cherche un moyen élégant dans Vimscript pour vérifier si le fichier existe dans le répertoire courant dans une fonction.

J'ai trouvé cela, mais je ne sais pas si c'est la solution la plus élégante (je définirai l'option vim si elle existe) - existe-t-il un moyen de ne pas avoir à faire une autre comparaison du nom de fichier - peut-être utiliser un autre vim fonction intégrée (?):

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

Avec un peu de recherche dans vim man J'ai trouvé ceci, qui semble beaucoup mieux que l'original:

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

Certains commentaires expriment des inquiétudes concernant filereadable et l'utilisation de 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 souhaitez détecter de tels cas, les éléments suivants fonctionneront:

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

Donner plus de visibilité à commentaire de la métaphie sur la réponse acceptée:

si filereadable (expand ("~/.vim/bundle/vundle/README.md")), laisser g: hasVundle = 1 endif

filereadable est ce qui est requis, mais il y a une étape très pratique de expand, si vous utilisez ~ dans votre chemin:

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

Par exemple

  • :echo filereadable('~/.vimrc') donne 0,
  • :echo filereadable(expand('~/.vimrc')) donne 1
5
icc97