113 votes

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

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

J'ai trouvé le code ci-dessous mais je ne suis pas sûr que ce soit la solution la plus élégante (je vais définir une option Vim si le fichier existe). Existe-t-il un moyen de ne pas avoir à effectuer une autre comparaison du nom de fichier ?

Peut-être utiliser une autre fonction intégrée de Vim ?

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

147voto

stefanB Points 27796

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

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

4 votes

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

2 votes

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

8 votes

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

62voto

sh1ftst0rm Points 2148

Certains des commentaires expriment des préoccupations concernant filereadable et en utilisant glob à la place. Cela permet de résoudre le problème d'un fichier qui existe, mais dont les permissions empêchent la lecture. Si vous voulez détecter de tels cas, la méthode suivante fonctionnera :

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

0 votes

Je reçois E116: Invalid arguments for function . Comment spécifier le fichier relatif au répertoire d'origine pour vérifier la présence d'un plugin ? (Voir aussi aquí )

0 votes

Parlez-vous du répertoire personnel de l'utilisateur ? Je suppose qu'il s'agit d'un ~ mais je ne suis pas sûr. Quels arguments avez-vous fournis lorsque vous avez obtenu cette erreur ?

1 votes

Je l'ai essayé avec ~ et cela a donné cette erreur. Maintenant j'ai réessayé et ça marche... :-)

18voto

icc97 Points 1602

Donner un peu plus de visibilité à commentaire de metaphy sur la réponse acceptée :

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

filereadable est ce qui est nécessaire, mais il y a une étape supplémentaire pratique de expand vous devriez utiliser ~ sur votre chemin :

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

Par exemple

  • :echo filereadable('~/.vimrc') da 0 ,
  • :echo filereadable(expand('~/.vimrc')) da 1

3voto

aloussase Points 21

Désolé si c'est trop tard, mais en faisant

if !empty(expand(glob("filename")))
    echo "File exists"
else
    echo "File does not exists"
endif

fonctionne bien pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X