2010-06-23 4 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

+0

В помощи для 'filereadable' упоминается, что вы можете использовать' glob', если вам не нравится читаемость. –

+3

if fileradable (expand ("~/.vim/bundle/vundle/README.md")) let g: hasVundle = 1 endif – metaphy

34

Некоторые замечания выражают озабоченность по поводу filereadable и используя вместо этого glob. Это касается проблемы наличия файла, который существует, но разрешения препятствуют его чтению. Если вы хотите обнаружить такие случаи, будет работать следующее:

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

Я получаю 'E116: Недействительные аргументы для функции'. Как вы указываете файл относительно домашнего каталога для проверки плагина? (См. Также [здесь] (http://stackoverflow.com/a/30444477/3596168)) – Scz

+0

Вы говорите о домашнем каталоге пользователя? Я бы предположил, что это просто '' ', но я не уверен. Какие аргументы вы поставили, когда получили эту ошибку? – brianmearns

+1

Я пробовал его с '~', и он дал эту ошибку. Теперь я попробовал еще раз, и он работает ... :-) – Scz