web-dev-qa-db-ja.com

特定のファイルがVimscriptに存在するかどうかを検出する方法は?

関数の現在のディレクトリにファイルが存在するかどうかを確認するVimscriptのエレガントな方法を探しています。

私はこれを思い付きましたが、それが最もエレガントな解決策であるかどうかはわかりません(存在する場合はvimオプションを設定します)-ファイル名の別の比較を行う必要がない方法はあります-異なるvimを使用する可能性があります組み込み関数(?):

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

vim manで少し検索すると、これが見つかりました。

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

一部のコメントは、filereadableと、代わりにglobを使用することに関する懸念を表明しています。これにより、存在するファイルが存在する問題に対処しますが、アクセス許可によりファイルが読み取られなくなります。そのような場合を検出したい場合、以下が機能します。

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

受け入れられた回答の metaphyのコメント をさらに可視化する:

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_を返します
5
icc97