特定のファイルがVimscriptに存在するかどうかを検出するにはどうすればよいですか?


105

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

以下のコードを思いつきましたが、それが最もエレガントなソリューションであるかどうかはわかりません(ファイルが存在する場合は、Vimオプションを設定します)。ファイル名をもう一度比較する必要がない方法はありますか?

Vimとは異なる組み込み関数を使用しているのではないでしょうか?

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

回答:


138

少し検索するvim manと、これが見つかりました。これは、元のものよりもはるかによく見えます。

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

4
SpecificFileは存在するが、現在のユーザーが読み取ることができない場合はどうなりますか。多分findfileの方が良いでしょう。
ppan

2
読みやすさを気にしない場合にfilereadable使用できる言及のヘルプglob
Sumudu Fernando 2012

8
if filereadable(expand( "〜/ .vim / bundle / vundle / README.md"))を許可g:hasVundle = 1 endif
thinker3

@metaphyは優れたコメントです。これに基づいて回答を追加し、より見やすくしましが、クレジットが必要な場合は、自由に独自の回答を追加してください。私は削除します。
icc97 2018年

56

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

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

わかりますE116: Invalid arguments for function。プラグインをチェックするために、ホームディレクトリに関連するファイルをどのように指定しますか?(こちらもご覧ください
Scz

あなたはユーザーのホームディレクトリについて話しているのですか?私はちょうどを推測しますが~、私は前向きではありません。そのエラーが発生したときに、どのような引数を指定しましたか?
brianmearns 2015

1
私はそれを試してみましたが~、そのエラーが発生しました。今私はもう一度試してみましたが、
うまくいきました

1
たぶんタイプミスか何か。しかし、それがうまくいったことをうれしく思います!
brianmearns 2015

他の回答とは異なり、これはディレクトリでも機能するようです。
Brian McCutchon、2016年

12

受け入れられた答えに関するメタフィーのコメントをさらに可視化する:

もしファイルが読めるなら(expand( "〜/ .vim / bundle / vundle / README.md"))g:hasVundle = 1 endif

filereadableexpand必要ですが~、パスで使用している場合、の余分な便利なステップがあります。

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

例えば

  • :echo filereadable('~/.vimrc')与え0
  • :echo filereadable(expand('~/.vimrc')) 与える 1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.