118

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

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

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

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

4 回答 4

151

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

:function! SomeCheck()
:   if filereadable("SpecificFile")
:       echo "SpecificFile exists"
:   endif
:endfunction
于 2010-06-23T03:09:50.147 回答
64

filereadable一些评论表达了对替代使用的担忧glob。这解决了文件确实存在但权限阻止读取它的问题。如果您想检测此类情况,以下方法将起作用:

:if !empty(glob("path/to/file"))
:   echo "File exists."
:endif
于 2014-05-06T13:58:15.347 回答
18

对形而上学对已接受答案的评论提供更多可见性:

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

filereadable是必需的,但如果您在路径expand中使用,还有一个额外方便的步骤:~

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

例如

  • :echo filereadable('~/.vimrc')0,
  • :echo filereadable(expand('~/.vimrc'))1
于 2018-11-08T10:30:47.247 回答
3

抱歉,如果为时已晚,但正在做

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

对我来说很好

于 2020-09-22T12:56:06.317 回答