2012-10-04 11 views
5

मैंने देखा है कि लंबे संपादन सत्रों में, undo-tree (सी-एक्स सी-यू) को कॉल करना धीमा और धीमा हो जाता है। मुझे लगता है कि कारण यह है कि जैसे पेड़ बड़ा हो जाता है, इसे पर्स करने में अधिक समय लगता है (क्योंकि यह फ़ाइल खोलने के बाद से मेरे सभी संपादनों का ट्रैक रखता है)Emacs: पूर्ववत पेड़ की सफाई

क्या अंडों के पेड़ को साफ़ करने का कोई तरीका है खुली फाइल? मैं C-x C-v (find-alternate-file) की कोशिश की है, लेकिन इस फाइल जो कर्सर रीसेट करता है फिर से खुल जाता है (और org-mode की तरह मोड में मेरी सूचियों गिर)

उत्तर

6

रीसेट M-: (setq buffer-undo-tree nil) का उपयोग कर buffer-undo-tree चर। यह बफर के पूरे पूर्ववत इतिहास को त्याग देता है, जैसा कि undo-tree.el द्वारा दर्ज किया गया है।

यह भी इस तरह कोड के साथ एक कमांड में बनाया जा सकता है और बाध्य एक प्रमुख करने के लिए:

(defun clear-undo-tree() 
    (interactive) 
    (setq buffer-undo-tree nil)) 
(global-set-key [(control c) u] 'clear-undo-tree) 
+0

धन्यवाद: हालांकि, मैं समारोह दुर्घटना से के नाम से जाना है, इसलिए एक एक पुष्टि के संकेत और एक चेक कि buffer-undo-tree वास्तव में एक बफर स्थानीय चर रहा है जोड़ा नहीं करना चाहती। क्या आप जानते हैं कि आपके उत्तर और @npostavs के बीच क्या अंतर है? –

+1

एक अंतर यह है कि 'पूर्व-पेड़-त्याग-इतिहास' चर 'पूर्व-सीमा', 'पूर्व-सीमा-सीमा', और 'पूर्व-बाहरी-सीमा' चर के अनुसार इतिहास को छूने का प्रयास करता है, जबकि मेरा समाधान हटा देता है पूरे पूर्व इतिहास। सबसे महत्वपूर्ण बात यह है कि 'पूर्ववत-पेड़-त्याग-इतिहास' स्वचालित रूप से प्रत्येक पूर्ववत/पुनः/स्विच-शाखा संचालन पर लागू होता है, इसलिए जाहिर है कि यह आपके लिए काम नहीं करता है। – user4815162342

+0

धन्यवाद! मैं सिर्फ आपके उत्तर को स्वीकार करने जा रहा था –

1

आप पेड़ छँटाई कर सकते हैं के बजाय पूरी बात को त्यागकर:

undo-tree-discard-history is a compiled Lisp function in 
`undo-tree.el'. 

(undo-tree-discard-history) 

Discard undo history until we're within memory usage limits 
set by `undo-limit', `undo-strong-limit' and `undo-outer-limit'. 
+0

फ़ंक्शन '(पूर्व-पेड़-त्याग-इतिहास)' को कॉल करने और चर '(बफर-अंडो-पेड़) '' nil' को सेट करने के बीच क्या अंतर है? (जैसा कि @ user4815162342 उत्तर में) –

+1

@ user273158: उपयोगकर्ता 4815162342 की टिप्पणी के अनुसार पूरी तरह से हटाएं बनाम कम करें। मैंने नहीं देखा था कि इसे हर पूर्ववत/रेडो कहा जाता था। संभवतः, आप इसे और अधिक प्रभावी बनाने के लिए सीमाएं कम कर सकते हैं। – npostavs

3

ध्यान दें कि हाल ही में पूर्ववत पेड़ संस्करणों में यह टिप अप्रचलित हो सकती है। संस्करण 0.6 से आगे, पूर्व-पेड़ डिफ़ॉल्ट रूप से "आलसी पेड़-चित्रकारी" का उपयोग करता है। यह महत्वपूर्ण रूप से दृश्यमान भाग को खींचकर बड़े अंडो पेड़ों के विज़ुअलाइजेशन को गति देता है (और जब आप पेड़ के चारों ओर घूमते हैं तो इसे विस्तारित करते हैं)। अधिक जानकारी के लिए undo-tree-visualizer-lazy-drawing चर के लिए डॉकस्ट्रिंग देखें।

यदि आप फिर भी पूरे पूर्ववत पेड़ को त्यागना चाहते हैं, तो buffer-undo-tree से nil पर मैन्युअल रूप से सेट करना एक अच्छा एक-ऑफ समाधान है। दीर्घकालिक समाधान undo-limit, undo-strong-limit, और undo-outer-limit के मूल्यों को पूर्ववत करने के लिए पूर्ववत पेड़ आकार को सीमित करने के लिए है, यह सीमित करके कि पुराने डेटा को हटाने से पहले कितना पूर्ववत इतिहास संग्रहीत करता है।

मैन्युअल रूप से undo-tree-discard-history पर कॉल करना व्यर्थ है। जब भी आप पूर्ववत से संबंधित कुछ भी करते हैं तो इसे स्वचालित रूप से कॉल किया जाता है।

1

कभी-कभी मुझे एक बफर के पूर्व-पेड़ को फ्लश करना पड़ता है क्योंकि मैंने कुछ पाठ चिपकाए जिनमें वर्ण शामिल हैं जिन्हें बफर/फ़ाइल के वर्तमान एन्कोडिंग में प्रदर्शित नहीं किया जा सकता है। तो मुझे @ एमेलियो वाज़्यूज़-रीना का कार्य बहुत उपयोगी पाया गया।

(defun clean-undo-tree() 
"Clear current buffer's undo-tree. 
Undo-tree can cause problems with file encoding when characters 
are inserted that cannot be represented using the files current 
encoding. This is even the case when characters are only 
temporarily inserted, e.g. pasted from another source and then 
instantly deleted. In these situations it can be necessary to 
clear the buffers undo-tree before saving the file." 
    (interactive) 
    (let ((buff (current-buffer))) 
    (if (local-variable-p 'buffer-undo-tree) 
     (if (y-or-n-p "Clear buffer-undo-tree? ") 
      (progn 
       (setq buffer-undo-tree nil) 
       (message "Cleared undo-tree of buffer: %s" (buffer-name buff))) 
      (message "Cancelled clearing undo-tree of buffer: %s" (buffer-name buff))) 
     (error "Buffer %s has no local binding of `buffer-undo-tree'" (buffer-name buff))))) 
संबंधित मुद्दे