2010-06-23 72 views
76

我在vimscript中尋找一個優雅的方式來檢查函數中當前目錄中是否存在文件。vimscript:如何檢測是否存在特定文件

我想出了這個,但不知道如果這是最優雅的解決方案(如果它存在,我會設置vim選項) - 有什麼辦法不需要做文件名的另一個比較 - 也許使用不同的vim內置函數(?):

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

回答

107

有了位vim man搜索的我發現這一點,這看起來好多了,原來:

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

如果SpecificFile存在,但對當前用戶不可讀,該怎麼辦?也許findfile更好。 – ppan 2012-04-12 09:53:23

+0

'filereadable'的幫助提到你可以使用'glob',如果你不關心可讀性。 – 2012-04-28 21:20:57

+3

if filereadable(展開(「〜/ .vim/bundle/vundle/README.md」)) let g:hasVundle = 1 endif – metaphy 2014-04-22 14:45:46

34

有關的一些評論表達擔憂filereadable和改爲使用glob。這解決了擁有一個確實存在的文件的問題,但是權限阻止了它被讀取。如果你想檢測這種情況,下面將起作用:

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

我得到'E116:函數的無效參數。你如何指定相對於主目錄的文件來檢查插件? (另見[這裏](http://stackoverflow.com/a/30444477/3596168)) – Scz 2015-07-23 09:23:24

+0

你在說用戶主目錄嗎?我猜想只是一個'〜',但我不積極。當你有這個錯誤時你提供了什麼論點? – brianmearns 2015-07-23 10:04:01

+1

我用'〜'試過了,它給出了這個錯誤。現在我再試一次,它的工作原理:-) – Scz 2015-07-23 13:31:39

相關問題