Projectile with caching ไม่ชอบไฟล์ใหม่


9

ฉันใช้ projectile สำหรับการเบราส์โปรเจค ฉันเห็นว่ามันช้ามากดังนั้นฉันจึงเปิดการแคช ตอนนี้มันเร็ว (ไม่ชัดอย่างน่าเศร้าและน่าเศร้า)

ถ้าฉันสร้างไฟล์ใหม่นอก emacs เอง projectile หาไม่เจอ ฉันสามารถเรียกใช้การทำให้แคชใช้ไม่ได้ แต่ใช้เวลาสองสามนาที จะแก้ไขได้อย่างไร?


คุณสามารถเปิดไฟล์และเพิ่มลงในแคชด้วยM-x projectile-cache-current-fileตนเองได้ หากคุณไม่ต้องการ Emacs จะต้องสำรวจทรีทั้งต้นเพื่อค้นหาไฟล์ดังนั้นจึงไม่มีการเพิ่มประสิทธิภาพ
PythonNut

1
ฉันขอแนะนำให้เปิดการร้องขอคุณสมบัติเพื่อรองรับfilenotify.elไลบรารีที่สร้างขึ้นซึ่งฉันเชื่อว่าจะอนุญาตให้ projectile เพื่อติดตามการเปลี่ยนแปลงไดเรกทอรีและจะได้รับแจ้งเมื่อมีการสร้างไฟล์ใหม่ (หรือไดเรกทอรีสำหรับการติดตาม) (หรือลบ) เพื่อให้สามารถเพิ่มได้โดยอัตโนมัติ (หรือลบ) ไฟล์ไปยัง / จากแคช การแจ้งเตือนไดเรกทอรีจะไม่เกิดขึ้นซ้ำดังนั้นคุณลักษณะนี้จะนำมาซึ่งการติดตามทุกไดเรกทอรีในโครงการอย่างอิสระ ฉันไม่รู้ว่ามันจะมีบทลงโทษที่ชัดเจนสำหรับต้นไม้โครงการขนาดใหญ่หรือไม่
phils

คำตอบ:


4

ใช้อาร์กิวเมนต์คำนำหน้าเช่นC-u C-c p fเพื่อทำให้โมฆะอย่างรวดเร็วและค้นหาไฟล์ในโครงการ คำแนะนำในความคิดเห็นเกี่ยวกับการใช้projectile-cache-current-fileนั้นถูกต้องทางเทคนิค แต่มีตะขอfind-fileที่เรียกสิ่งนี้โดยอัตโนมัติในทุกไฟล์ใหม่ที่เปิด นั่นจะเป็นทางออกที่เร็วที่สุดโดยไม่ทำให้แคชที่มีอยู่ใช้ไม่ได้

อย่างไรก็ตามดูเหมือนว่าปัญหาที่แท้จริงคือการสร้างแคชใหม่โดยใช้เวลานานเกินไป สำหรับสิ่งนี้จะช่วยได้หากมีข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับสภาพแวดล้อมของคุณ โดยค่าเริ่มต้นprojectile-indexing-methodถูกตั้งค่าเป็น'nativeบน windows ซึ่งต้องการใช้งาน elisp findเนื่องจากเป็นแบบพกพามากกว่า มิฉะนั้นก็จะใช้'alienวิธีการเช่นgit ls, findฯลฯ หากคุณอยู่บนลินุกซ์วิธีต่างด้าวถูกเปิดใช้งานโดยค่าเริ่มต้นแม้ว่า

มิฉะนั้นคุณอาจต้องการที่จะไล่ลงหลุมกระต่ายและprojectile-get-repo-files projectile-get-ext-commandพวกเขาระบุตำแหน่งที่ projectile ค้นหารายการของไฟล์ เป็นไปได้ที่คุณสามารถแทนที่สิ่งนี้ด้วย dir-locals หรือ like เพื่อบังคับใช้วิธีการค้นหาที่เร็วขึ้น


2

สิ่งนี้ไม่ได้เพิ่มความเร็วในการแคชไฟล์ แต่จะบันทึกขั้นตอนที่ต้องทำด้วยตนเองเพื่อทำให้แคชเก่า (ซึ่งไม่มีไฟล์ใหม่)

Projectile จะทำให้แคชใช้ไม่ได้โดยอัตโนมัติหาก/your/projectile/project/root/.projectileไฟล์นั้นใหม่กว่าไฟล์แคชโครงการ

การตรวจสอบนี้จะทำทุกครั้งที่คุณพยายามค้นหาไฟล์ใด ๆ ในโครงการโดยใช้ projectile projectile-find-fileหรือC-c p fถ้าหนึ่งในคำสั่งที่ตรวจสอบนี้ก่อน

(defun projectile-maybe-invalidate-cache (force)
  "Invalidate if FORCE or project's dirconfig newer than cache."
  (when (or force (file-newer-than-file-p (projectile-dirconfig-file)
                                           projectile-cache-file))
    (projectile-invalidate-cache nil)))

- จากprojectile.elต้นทาง - เส้น 575-579

ดังนั้นวิธีการแก้ปัญหาคือการไฟล์เมื่อคุณปรับปรุงโครงการ ตัวอย่างเช่นคุณสามารถ, ฯลฯ ที่จะทำtouch.projectilealiasgit commitgit pull

touch /your/projectile/project/root/.projectile` 

หลังจากทำสิ่งที่คุณทำกับgitคำสั่ง

ดังนั้นหากมีคนในทีมของคุณเพิ่มไฟล์ใหม่ให้กับโครงการและ (สมมติว่าคุณใช้ git to version control) คุณใช้ git pull ที่เป็น aliased พิเศษแคชจะถูกทำให้ใช้ไม่ได้โดยอัตโนมัติเมื่อคุณทำprojectile-find-fileครั้งต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.