कैशिंग के साथ प्रक्षेप्य नई फ़ाइलों को पसंद नहीं करता है


9

मैं अपने प्रोजेक्ट ब्राउज़िंग के लिए प्रोजेक्टाइल का उपयोग करता हूं। मैंने देखा है कि यह वास्तव में धीमा है, इसलिए मैंने कैशिंग चालू किया। अब यह तेजी से है (उदास नहीं, तेजी से उदास)।

अगर मैं खुद emacs के बाहर एक नई फ़ाइल बनाता हूं, तो प्रोजेक्टाइल उसे नहीं ढूंढता। मैं कैशे अमान्य कर सकता हूं लेकिन इसमें कुछ मिनट लगते हैं। इसे कैसे ठीक करें?


आप फ़ाइल खोल सकते हैं और मैन्युअल रूप से इसे कैश के साथ जोड़ सकते हैं M-x projectile-cache-current-file। यदि आप नहीं चाहते हैं, तो Emacs को पूरे पेड़ की तलाश करनी चाहिए , ताकि कोई अनुकूलन न हो सके।
पायथनटन

1
मेरा सुझाव है कि इन-बिल्ट filenotify.elलाइब्रेरी को सपोर्ट करने के लिए एक फीचर रिक्वेस्ट खोलने का , जो मेरा मानना ​​है कि प्रॉजेक्टाइल को डायरेक्टरी चेंजेस को ट्रैक करने की अनुमति देगा और इसके बाद सूचित किया जाएगा जब एक नई फाइल (या ट्रैकिंग के लिए डायरेक्टरी) बनाई गई (या डिलीट) की गई ताकि यह अपने आप जुड़ सके (या निकालें) कैश से / के लिए फ़ाइलें। निर्देशिका सूचनाएं पुनरावर्ती नहीं हैं, इसलिए यह सुविधा परियोजना में प्रत्येक निर्देशिका को स्वतंत्र रूप से ट्रैक करेगी। मैं नहीं जानता कि क्या किसी बड़े प्रोजेक्ट ट्री के लिए कोई ध्यान देने योग्य दंड होगा।
फिल्स

जवाबों:


4

C-u C-c p fप्रोजेक्ट में फ़ाइलों को जल्दी से अमान्य करने और खोजने के लिए , उपसर्ग तर्क का उपयोग करें । उपयोग करने के बारे में टिप्पणी में सुझाव projectile-cache-current-fileतकनीकी रूप से सही है, लेकिन find-fileइस पर एक हुक है जो स्वचालित रूप से खोली गई प्रत्येक नई फ़ाइल पर कॉल करता है। यह मौजूदा कैश को अमान्य किए बिना सबसे तेज़ समाधान होगा।

हालांकि, ऐसा लगता है कि असली मुद्दा यह है कि पेड़ को हटाने के लिए कैश को फिर से बनाना बहुत लंबा है। इसके लिए यह मदद करेगा यदि आपके पर्यावरण के बारे में थोड़ी अधिक जानकारी थी। डिफ़ॉल्ट रूप projectile-indexing-methodसे 'nativeविंडोज़ पर सेट किया जाता है, जो कि एक अधिक सटीक कार्यान्वयन पसंद करता है findक्योंकि यह अधिक पोर्टेबल है। अन्यथा यह एक 'alienविधि का उपयोग करता है , अर्थात git ls, findआदि। यदि आप लिनक्स पर हैं, तो विदेशी विधि डिफ़ॉल्ट रूप से सक्षम है।

नहीं तो आप के खरगोश की मांद का पीछा करना चाह सकते हैं projectile-get-repo-filesऔर projectile-get-ext-command। वे निर्दिष्ट करते हैं कि फाइलों की सूची के लिए प्रोजेक्टाइल कहां दिखता है। यह संभव है कि आप इसे धीर-स्थानीय लोगों के साथ ओवरराइड कर सकते हैं या तेज लुकअप विधि के लिए मजबूर कर सकते हैं।


2

यह फ़ाइल कैशिंग को गति नहीं देता है, लेकिन यह बासी कैश को अमान्य करने के मैनुअल चरण को बचाता है (जिसमें नई फ़ाइल शामिल नहीं है)।

यदि /your/projectile/project/root/.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 का उपयोग कर रहे हैं) तो आप अपने विशेष एलियास git पुल का उपयोग करते हैं, जब आप projectile-find-fileअगली बार करते हैं तो कैश स्वचालित रूप से अमान्य हो जाएगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.