开发者

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') gives 0,
  • :echo filereadable(expand('~/.vimrc')) gives 1


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜