【问题标题】:How to detect if a specific file exists in Vimscript?如何检测 Vimscript 中是否存在特定文件?
【发布时间】:2011-03-07 03:01:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: vim file-exists


    【解决方案1】:

    vim man 中搜索了一下,我找到了这个,它看起来比原来的好多了:

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

    【讨论】:

    • 如果 SpecificFile 存在,但当前用户不可读怎么办。也许 findfile 更好。
    • filereadable 的帮助中提到,如果您不关心可读性,可以使用 glob
    • if filereadable(expand("~/.vim/bundle/vundle/README.md")) let g:hasVundle = 1 endif
    • @metaphy 这是一个很好的评论,我在此基础上添加了an answer 以使其更具可见性,但如果您想要信用,请随时添加您自己的答案,我会删除我的.
    【解决方案2】:

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

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

    【讨论】:

    • 我收到E116: Invalid arguments for function。如何指定相对于主目录的文件来检查插件? (另见here
    • 你说的是用户主目录吗?我猜只是~,但我并不肯定。当您遇到该错误时,您提供了哪些论据?
    • 我用~ 尝试过,它给出了那个错误。现在我又试了一次,它起作用了...... :-)
    • 可能只是一个错字什么的。但很高兴它对你有用!
    • 与其他答案不同,这似乎也适用于目录。
    【解决方案3】:

    在接受的答案上让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

    【讨论】:

      【解决方案4】:

      对不起,如果太晚了,但是这样做

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

      适合我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        • 2018-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多