จะตรวจสอบได้อย่างไรว่ามีไฟล์เฉพาะใน 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

8
if filereadable (expand ("~ / .vim / bundle / vundle / README.md")) ให้ g: hasVundle = 1 endif
thinker3

@metaphy เป็นความคิดเห็นที่ยอดเยี่ยมฉันได้เพิ่มคำตอบตามนั้นเพื่อให้มีการมองเห็นมากขึ้น แต่ถ้าคุณต้องการเครดิตอย่าลังเลที่จะเพิ่มคำตอบของคุณเองและฉันจะลบของฉัน
icc97

56

ความคิดเห็นบางส่วนแสดงความกังวลเกี่ยวกับfilereadableและใช้globแทน สิ่งนี้กล่าวถึงปัญหาของการมีไฟล์ที่มีอยู่ แต่สิทธิ์ป้องกันไม่ให้ถูกอ่าน หากคุณต้องการตรวจสอบกรณีดังกล่าวสิ่งต่อไปนี้จะได้ผล:

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

ฉันเข้าใจE116: Invalid arguments for functionแล้ว คุณระบุไฟล์ที่สัมพันธ์กับโฮมไดเร็กทอรีเพื่อตรวจสอบปลั๊กอินได้อย่างไร (ดูที่นี่ )
Scz

คุณกำลังพูดถึงโฮมไดเร็กทอรีของผู้ใช้หรือไม่? ฉันเดาว่าแค่ a ~แต่ฉันไม่คิดบวก คุณจัดหาข้อโต้แย้งอะไรเมื่อคุณได้รับข้อผิดพลาดนั้น
brianmearns

1
ฉันลองใช้~แล้วและให้ข้อผิดพลาดนั้น ตอนนี้ฉันลองอีกครั้งและใช้งานได้ ... :-)
Scz

1
น่าจะเป็นแค่พิมพ์ผิดหรืออะไร แต่ดีใจที่ได้ผลสำหรับคุณ!
brianmearns

ซึ่งแตกต่างจากคำตอบอื่น ๆ ดูเหมือนว่าจะใช้ได้กับไดเรกทอรีด้วย
Brian McCutchon

13

ให้การมองเห็นมากกว่าที่จะแสดงความคิดเห็น metaphy ของในคำตอบที่ได้รับการยอมรับ:

ถ้า filereadable (ขยาย ("~ / .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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.