How to detect if a specific file exists in Vimscript?

我正在 Vimscript 寻找一种优雅的方式来检查文件是否存在于工作目录中。

我想出了下面的代码,但我不确定这是否是最优雅的解决方案(如果文件存在,我将设置一个 Vim 选项)。有没有什么办法可以不用再比较文件名?

也许可以使用与 Vim 不同的内置函数?

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

通过在 vim man中的一些搜索,我发现了这个,它看起来比原来的要好得多:

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

一些评论表达了对 filereadable和使用 glob的担忧。这解决了拥有一个确实存在的文件的问题,但是权限阻止读取该文件。如果你想发现这种情况,以下方法可以奏效:

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

metaphy's comment在公认的答案上有更多的可见性:

如果文件可读(扩展(“ ~/. vim/bundle/vundle/README.md”)) ,则让 g: hasVundle = 1 endf

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

Sorry if it's too late, but doing

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

我觉得挺好的