How to detect if a specific file exists in Vimscript?
I'm looking for an elegant way in Vimscript to check if a file exists in the current directory.
I came up with the code below but I'm not sure if that's the most elegant solution (I'll set a Vim option if the file exists). Is there any way of not having to do another comparison of the filename?
Maybe use a different built-in function from Vim?
:function! S开发者_如何学GoomeCheck()
: if findfile("SpecificFile", ".") == "SpecificFile"
: echo "SpecificFile exists"
: endif
:endfunction
With a bit of searching in vim man
I've found this, which looks much better that the original:
:function! SomeCheck()
: if filereadable("SpecificFile")
: echo "SpecificFile exists"
: endif
:endfunction
Some of the comments express concerns about filereadable
and using glob
instead. This addresses the issue of having a file that does exist, but permissions prevent it from being read. If you want to detect such cases, the following will work:
:if !empty(glob("path/to/file"))
: echo "File exists."
:endif
Giving some more visibility to metaphy's comment on the accepted answer:
if filereadable(expand("~/.vim/bundle/vundle/README.md")) let g:hasVundle = 1 endif
filereadable
is what is required, but there's an extra handy step of expand
, should you be using ~
in your path:
:function! SomeCheck()
: if filereadable(expand("SpecificFile"))
: echo "SpecificFile exists"
: endif
:endfunction
For example
:echo filereadable('~/.vimrc')
gives0
,:echo filereadable(expand('~/.vimrc'))
gives1
Sorry if it's too late, but doing
if !empty(expand(glob("filename")))
echo "File exists"
else
echo "File does not exists"
endif
works fine for me
精彩评论