Как определить, существует ли определенный файл в Vimscript? - PullRequest
92 голосов
/ 23 июня 2010

Я ищу элегантный способ в Vimscript, чтобы проверить, существует ли файл в текущем каталоге в функции.

Я придумал это, но не уверен, что это самое элегантное решение (я буду устанавливать опцию vim, если оно существует) - есть ли способ не делать еще одно сравнение имени файла - возможно, использовать другое vim встроенная функция (?):

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

Ответы [ 3 ]

122 голосов
/ 23 июня 2010

Немного поиска в vim man Я нашел это, которое выглядит намного лучше, чем оригинал:

:function! SomeCheck()
:   if filereadable("SpecificFile")
:       echo "SpecificFile exists"
:   endif
:endfunction
46 голосов
/ 06 мая 2014

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

:if !empty(glob("path/to/file"))
:   echo "File exists."
:endif
5 голосов
/ 08 ноября 2018

Повышение наглядности комментария метафии принятого ответа:

если файл читаемый (развернуть ("~ / .vim / bundle / vundle / README.md")), пусть 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
...