Emacs में कोड फोल्डिंग प्रभाव कैसे प्राप्त करें?




elisp code-folding (8)

कोड फोल्डिंग, या ऑर्ग-मोड का उपयोग करने वाले साइक्लिंग के प्रकार जैसे कुछ हासिल करने का सबसे अच्छा तरीका क्या है। इस प्रकार के व्यवहार को बनाने के लिए elisp में सबसे अच्छा समाधान क्या होगा?

संपादित करें: मुझे खेद है कि मैं स्पष्ट नहीं था। मैं elisp में कुछ प्रोग्राम करना चाहता हूं जो कोड को फोल्डिंग के समान ही करता है, या वास्तव में पदानुक्रम के साथ ऑर्गे-मोड की तरह अधिकांश का विस्तार किया जा सकता है। मैं इस प्रभाव को प्राप्त करने का सबसे अच्छा तरीका सोच रहा हूं। मुझे लगता है कि मैंने सुना है कि emacs ओवरले एक अच्छा समाधान है, लेकिन मुझे नहीं पता।

जहां तक ​​फोल्डिंग मैं बस बिल्टिन सेट-सिलेक्टिव-डिस्प्ले का उपयोग करता हूं

संपादित करें संख्या 2:

उत्तर के लिए धन्यवाद लेकिन मुझे लगता है कि मैं गलत सवाल पूछ रहा हूं इसलिए मुझे जो कुछ करने की कोशिश कर रहा हूं उस पर और स्पष्ट होने की कोशिश करें। मैं निम्नलिखित बनाना चाहता हूं

जब आप किसी फ़ंक्शन पर अपना पॉइंट डालते हैं और इस elisp फ़ंक्शन को कॉल करते हैं तो यह फ़ंक्शन परिभाषा को जहां भी हो (मैं केवल इसके लिए खोज-टैग का उपयोग करने के बारे में सोच रहा हूं) डालता हूं और इसे वर्तमान बफर में प्रकट करता हूं। विचार यह है कि यदि आपको फ़ंक्शन परिभाषा को पढ़ने के लिए एक अलग बफर पर कूदना है तो मुझे लगता है कि यह एक संदर्भ फ़ाइल को दूसरी फ़ाइल में स्विच करता है। तो मैं इसे कोड फोल्डिंग की तरह व्यवहार करना चाहता हूं केवल यह बफर से बाहरी कोड में खींचता है। यह कुछ समस्याएं प्रस्तुत करता है क्योंकि यह कोड को बफर में चिपकाने वाला नहीं कर सकता है या अगर कोई इसे सहेजता है तो यह कोड में खींचा जाएगा। इसलिए मैं सोच रहा हूं कि बफर के अंदर एक क्षेत्र बनाने का कोई तरीका है जो बफर का हिस्सा भी नहीं है। मुझे लगता है कि समझ में आता है।


emacs एचएस-नाबालिग मोड के साथ आता है जो संतुलित अभिव्यक्तियों के बीच कोड फोल्डिंग को fascilitates http://www.emacswiki.org/emacs/HideShow


आप init फ़ाइल में निम्न कोड के साथ CEDET का उपयोग कर कोड फोल्डिंग भी प्राप्त कर सकते हैं:

(global-semantic-folding-mode t)

इस कोड के मूल्यांकन के बाद, छोटा त्रिकोण फ्रिंजल क्षेत्र में दिखाई देगा, ताकि आप इसका उपयोग करके कोड को फोल्ड और अनदेखा कर सकें। यह विधि अधिक सटीक है, क्योंकि यह स्रोत कोड से निकाली गई वाक्य रचनात्मक जानकारी का उपयोग करती है


जाहिर है कि कोई सही समाधान नहीं है, लेकिन मुझे लगता है कि सबसे अच्छा यह है:

http://www.emacswiki.org/emacs/FoldingMode


फोल्डिंग आमतौर पर emacs के साथ अनावश्यक है, क्योंकि इसमें ऐसे उपकरण होते हैं जो कोड को फोल्ड करते समय मैन्युअल रूप से किए गए कार्यों को स्पष्ट रूप से कार्यान्वित करते हैं।

अधिकांश लोगों को सरल वृद्धिशील खोजों के साथ अच्छी सफलता मिली है। कहीं भी "foo" का उल्लेख किया गया है? सीएस foo टाइप करें, परिभाषा पाएं, एंटर दबाएं, इसे पढ़ें, और फिर सीएक्स सीएक्स दबाएं जहां आप थे वहां वापस जाएं। सरल और बहुत उपयोगी।

अधिकांश मोड imenu का समर्थन करते हैंएमएक्स imenu आपको नाम से फ़ंक्शन परिभाषा (आदि) पर जाने देगा। फ़ंक्शन का मेनू प्राप्त करने के लिए आप इसे माउस पर भी बाध्य कर सकते हैं (या इसे मेनूबार में जोड़ें; अधिक जानकारी के लिए जानकारी पृष्ठ देखें)। यह डेटा-फ़ंक्शन-मोड के लिए डेटा प्रदान करता है, जो आपको यह देखने देगा कि आप वर्तमान में मॉडल में कौन सा फ़ंक्शन अंदर हैं। (यद्यपि आपका कार्य कितना लंबा है, यद्यपि?)

स्पीडबार भी है, जो इमेन्यू सूचना (और अन्य चीजों) को ग्राफिकल रूप से प्रदर्शित करता है।

यदि आप अपनी फ़ाइल का अवलोकन प्राप्त करना चाहते हैं, तो एमएक्स आज़माएं "। रेगेक्स को देखते हुए, यह वर्तमान बफर में प्रत्येक मैच के साथ एक नया बफर बनाएगा। आप कार्यों के अवलोकन को पाने के लिए" (defun "खोज सकते हैं वर्तमान फ़ाइल उपकरण। परिणाम पर क्लिक करने से आपको फ़ाइल में उस स्थिति में ले जाया जाएगा।

तो वैसे भी, इस बारे में सोचें कि आप वास्तव में क्या हासिल करना चाहते हैं, और Emacs शायद इसे लागू करता है। अपूर्ण उपकरणों से लड़ना न करें जो आपको चीजों को लगातार फोल्ड और प्रकट करते हैं।


बिल्ली को त्वचा का एक और तरीका:

जैसे ही होता है, आपको इसके लिए किसी पैकेज या अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं होती है। बस किसी भी स्रोत फ़ाइल पर जाएं, टाइप करें

एम -1 सीएक्स $ और जादू होता है!

हमेशा की तरह, यह सफेद जादू है: सीएक्स $ आपके कोड को वापस लाएगा।

हम यह जानने के लिए Emacs की सहायता प्रणाली का उपयोग कर सकते हैं कि क्या हो रहा है: Ch के सीएक्स $ हमें बताता है कि उपरोक्त कुंजी संयोजन सेट-सिलेक्टिव-डिस्प्ले को कॉल कर रहा है, एक फ़ंक्शन जो एक संख्यात्मक तर्क लेता है (एम -1 उपसर्ग मूल्य के रूप में 1 पास करता है उस तर्क के) और, आश्चर्यजनक रूप से, उस तर्क के मूल्य पर परिवर्तनीय चुनिंदा-प्रदर्शन सेट करता है।

नाबालिग emacs जादूगर ब्लॉग से

बस पूर्णता के लिए: एम -3 सीएक्स $ गहरा घोंसला कोड दिखाएगा और इसी तरह।

एफडब्ल्यूआईडब्ल्यू मैंने आज एक छोटा सा सहायक बनाया जो smth पर आधारित है। here पाया here है कि वर्तमान कर्सर स्थिति के आधार पर F5 कोड फोल्डिंग को टॉगल करता है:

(global-set-key (kbd "<f5>") 'set-selective-display-dlw)

(defun set-selective-display-dlw (&optional level)
"Fold text indented same of more than the cursor.
If level is set, set the indent level to LEVEL.
If 'selective-display' is already set to LEVEL, clicking
F5 again will unset 'selective-display' by setting it to 0."
  (interactive "P")
  (if (eq selective-display (1+ (current-column)))
      (set-selective-display 0)
    (set-selective-display (or level (1+ (current-column))))))

मेरा मानना ​​है कि आपकी "प्रोजेक्ट" की फोल्डिंग की तुलना काफी अच्छी नहीं है, क्योंकि बफर सामग्री को बरकरार रखने (टेक्स्ट) को रखते हुए फोल्डिंग उपस्थिति को बदलने के बारे में है। बफर सामग्री को बरकरार रखने के दौरान आपकी परियोजना में अतिरिक्त टेक्स्ट दिखाना शामिल होगा, AFAIU। इसलिए। यह टेक्स्ट-सम्मिलन और तह की संरचना के रूप में कार्यान्वित नहीं है (फिर, बफर सामग्री बदली जाएगी)।

लेकिन शायद, यह वास्तव में एक ही तंत्र के साथ संभव है क्योंकि "ओवरले" के साथ फोल्डिंग किया जाता है ... "पहले स्ट्रिंग" और "बाद-स्ट्रिंग" ओवरले गुणों पर विचार करें ; शायद, आप बिंदु पर शून्य-लंबाई ओवरले से संबंधित इन स्ट्रिंग्स में अपनी फ़ंक्शन परिभाषा डाल सकते हैं। रूपरेखा मोड में ओवरले का उपयोग कैसे किया जाता है यह देखने के लिए outline-flag-region फ़ंक्शन देखें।


यदि आप hs-minor-mode उपयोग करते हैं, तो यह एक अच्छा विचार हो सकता है कि एक सुविधाजनक शॉर्टकट भी सेट करें, उदाहरण के लिए:

(eval-after-load 'hideshow
 '(progn
   (global-set-key (kbd "C-+") 'hs-toggle-hiding)))

vimish-fold भी एक अच्छा और आसान समाधान है।

https://github.com/mrkkrp/vimish-fold

मुखपृष्ठ से:

यह विम में टेक्स्ट फोल्डिंग करने के लिए एक पैकेज है। इसमें निम्नलिखित विशेषताएं हैं:

  • सक्रिय क्षेत्रों की तह;
  • अच्छी दृश्य प्रतिक्रिया: यह स्पष्ट है कि पाठ का कौन सा हिस्सा गुना है;
  • डिफ़ॉल्ट रूप से दृढ़ता: जब आप फ़ाइल बंद करते हैं तो आपके फ़ोल्ड गायब नहीं होते हैं;
  • दृढ़ता से स्केल अच्छी तरह से, आप सैकड़ों फाइलों पर प्रतिकूल प्रभाव के बिना बहुत सारे गुना के साथ काम कर सकते हैं;
  • यह इंडेंटेशन या कुछ तोड़ नहीं है;
  • फोल्ड को फोल्ड किए गए राज्य से गुमराह किया जा सकता है और बहुत आसानी से वापस किया जा सकता है;
  • मौजूदा गुना के बीच त्वरित नेविगेशन;
  • आप फ़ोल्डरों को प्रकट करने के लिए माउस का उपयोग कर सकते हैं (शुरुआती के लिए अच्छा और न केवल उनके लिए);
  • एवी पैकेज के प्रशंसकों के लिए: आप न्यूनतम स्ट्रोक के साथ टेक्स्ट को फोल्ड करने के लिए एवी का उपयोग कर सकते हैं!

उत्कृष्ट use-package का उपयोग करके मैं अपनी कॉन्फ़िगरेशन में इस स्निपेट का उपयोग करके इसे इंस्टॉल और सक्रिय करता हूं:

(use-package vimish-fold
  :ensure t
  :config (vimish-fold-global-mode t))




code-folding