我在 Vimscript 中寻找一种优雅的方式来检查当前目录中是否存在文件。
我想出了下面的代码,但我不确定这是否是最优雅的解决方案(如果文件存在,我将设置一个 Vim 选项)。有没有办法不必再比较文件名?
也许使用与 Vim 不同的内置函数?
:function! SomeCheck()
: if findfile("SpecificFile", ".") == "SpecificFile"
: echo "SpecificFile exists"
: endif
:endfunction
通过在 vim man
中进行一些搜索,我发现了这个,它看起来比原来的要好得多:
:function! SomeCheck()
: if filereadable("SpecificFile")
: echo "SpecificFile exists"
: endif
:endfunction
一些评论表达了对 filereadable
和使用 glob
的担忧。这解决了文件确实存在但权限阻止读取它的问题。如果您想检测此类情况,以下方法将起作用:
:if !empty(glob("path/to/file"))
: echo "File exists."
:endif
E116: Invalid arguments for function
。如何指定相对于主目录的文件来检查插件? (另见here)
~
,但我并不肯定。当您遇到该错误时,您提供了哪些论据?
~
尝试过,它给出了那个错误。现在我又试了一次,它起作用了...... :-)
让 metaphy's comment 对已接受的答案有更多的了解:
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
抱歉,如果为时已晚,但正在做
if !empty(expand(glob("filename")))
echo "File exists"
else
echo "File does not exists"
endif
对我来说很好
不定期副业成功案例分享
filereadable
的帮助提到如果您不关心可读性,可以使用glob
。