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")) let 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

1
으로 시도했지만 ~오류가 발생했습니다. 이제 나는 다시 시도하고 ... :-) 작동
SCZ

1
아마 오타 나 뭔가 일 것입니다. 그러나 그것이 당신을 위해 일했다는 것을 기쁘게 생각합니다!
brianmearns

다른 답변과 달리 이것은 디렉토리에서도 작동하는 것으로 보입니다.
Brian McCutchon

12

받아 들여진 답변에 대한 형이상 사의 의견 에 대한 가시성을 더 제공합니다 .

파일 읽기 가능 (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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.