Projectile với bộ nhớ đệm không giống như các tập tin mới


9

Tôi sử dụng đạn để duyệt dự án của tôi. Tôi đã thấy rằng nó rất chậm, vì vậy tôi bật bộ nhớ đệm. Bây giờ thì nhanh rồi (không nhanh như vậy, đáng buồn thay).

Nếu tôi tạo một tệp mới bên ngoài emacs, thì đạn sẽ không tìm thấy nó. Tôi có thể chạy vô hiệu hóa bộ đệm nhưng phải mất vài phút. Làm thế nào để khắc phục điều này?


Bạn có thể mở tệp và thêm thủ công vào bộ đệm M-x projectile-cache-current-file. Nếu bạn không muốn thì Emacs phải đi ngang qua toàn bộ cây đang tìm tệp, vì vậy không thể tối ưu hóa.
PythonNut

1
Tôi khuyên bạn nên mở một yêu cầu tính năng để hỗ trợ filenotify.elthư viện được xây dựng , mà tôi tin rằng sẽ cho phép phóng theo dõi các thay đổi thư mục và do đó được thông báo khi một tệp mới (hoặc thư mục để theo dõi) được tạo (hoặc xóa) để nó có thể tự động thêm (hoặc xóa) các tệp đến / từ bộ đệm. Thông báo thư mục không được đệ quy, vì vậy tính năng này sẽ đòi hỏi phải theo dõi độc lập mọi thư mục trong dự án. Tôi không biết liệu điều đó có phải chịu bất kỳ hình phạt đáng chú ý nào đối với cây dự án lớn hay không.
phils

Câu trả lời:


4

Sử dụng đối số tiền tố, nghĩa là C-u C-c p fnhanh chóng vô hiệu hóa và tìm các tệp trong dự án. Gợi ý trong nhận xét về việc sử dụng projectile-cache-current-filelà đúng về mặt kỹ thuật, nhưng có một cái móc find-filetự động gọi nó trên mỗi tệp mới được mở. Đó sẽ là giải pháp nhanh nhất mà không làm mất hiệu lực bộ đệm hiện có.

Tuy nhiên, có vẻ như vấn đề thực sự là mất quá nhiều thời gian để xây dựng lại bộ đệm bằng cách duyệt qua cây. Đối với điều này, nó sẽ giúp nếu có thêm một chút thông tin về môi trường của bạn. Theo mặc định projectile-indexing-methodđược đặt thành 'nativetrên các cửa sổ, trong đó ưu tiên thực hiện elisp findvì nó dễ mang theo hơn. Mặt khác, nó sử dụng một 'alienphương thức, tức là git ls, findv.v ... Nếu bạn đang ở trên linux thì phương thức Alien được bật theo mặc định.

Nếu không, bạn có thể muốn đuổi theo lỗ thỏ của projectile-get-repo-filesprojectile-get-ext-command. Chúng chỉ định nơi tìm kiếm danh sách các tập tin. Có thể bạn có thể ghi đè lên điều này bằng thư mục cục bộ hoặc muốn áp dụng phương pháp tra cứu nhanh hơn.


2

Điều này không tăng tốc bộ đệm ẩn tệp nhưng nó lưu bước thủ công là phải làm mất hiệu lực bộ đệm cũ (không chứa tệp mới).

Projectile tự động vô hiệu hóa bộ đệm nếu /your/projectile/project/root/.projectiletệp mới hơn tệp bộ đệm dự án.

Kiểm tra này được thực hiện bất cứ khi nào bạn cố gắng tìm bất kỳ tệp nào trong dự án bằng cách sử dụng đạn; projectile-find-filehoặc C-c p fnếu một trong các lệnh thực hiện kiểm tra này trước.

(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)))

- Từ projectile.elnguồn - dòng 575-579

Vì vậy, giải pháp là để touchcác .projectiletập tin khi bạn cập nhật dự án. Ví dụ, bạn có thể aliascác git commit, git pull, vv để làm

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

sau khi làm bất cứ điều gì bạn đang làm với các gitlệnh.

Vì vậy, nếu ai đó trong nhóm của bạn thêm một tệp mới vào dự án và (giả sử bạn đang sử dụng git để kiểm soát phiên bản), bạn sử dụng git kéo bí danh đặc biệt của mình, bộ đệm sẽ tự động bị vô hiệu hóa khi bạn thực hiện projectile-find-filelần sau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.