Emacs में कोड पूरा कैसे करें?


20

मुझे पता है कि emacs कोड पूरा करने का समर्थन करता है। लेकिन ईमानदार होने के लिए मैं कभी भी एक अच्छा FAQ पाठक नहीं रहा, कम से कम किसी ऐसी चीज के लिए जो मैं पूरी तरह से नया हूं। तो मुझे आश्चर्य है कि मुझे क्या डाउनलोड करने की आवश्यकता है और कैसे इस तरह के emacs बनाने के लिए C ++ और जावा में मेरे लिए कुछ स्मार्ट कोड पूरा कर सकते हैं। या क्या कोई पैकेज है जो कई प्रमुख भाषाओं के लिए कोड पूरा करता है?

जवाबों:


27

बेसिक तरीका जो Emacs में किसी भी तरह के बफर में काम करेगा, डायनामिक संक्षिप्त नाम है जिसका उपयोग हिटिंग M-/(aka alt+ /) द्वारा किया जाता है

यह आपके वर्तमान बफ़र में या वर्तमान में खुले अन्य बफ़र्स में मौजूद अन्य स्ट्रिंग्स को डुप्लिकेट करने के लिए टेक्स्ट का विस्तार करेगा।

C ++ या जावा (या अन्य) के लिए भाषा विशिष्ट है, जो अधिक व्यापक कोड पूरा करने के लिए, आप एक कोड टेंपलेटिंग या स्निपेट पैकेज देखना चाहेंगे। StackOverflow पर इस संबंधित प्रश्न में कुछ चर्चा की गई है । आमतौर पर इन चर्चाओं में उल्लेखित एक है यासनीपेट - इस पोस्ट में एक emacs ब्लॉग पर एक स्क्रीनकास्ट डेमो है ।


+1। तुम भी मानक पुस्तकालय complete.elएक कोशिश देना चाहते हो सकता है । यह बहुत पुराना और कम ज्ञात है, लेकिन जिस तरह का इन-बफर पूरा करता है वह उपयोगी हो सकता है। M-x find-library complete, फिर फ़ाइल में टिप्पणी पढ़ें।
ड्रू

21

@ डग का उत्तर थोड़ा पुराना है और उनका ध्यान पूर्व-परिभाषित स्निपेट का उपयोग करके कोड विस्तार पर है।

मुझे लगता है कि ओपी का सवाल इंटेलीसेन्स (उदाहरण के लिए एक वर्ग का ऑटो पूरा विधि नाम) के बारे में है।

  1. हिप्पी का विस्तार लोकप्रिय होने के लिए किया जाता है, सिंटैक्स विश्लेषक इमैक टैग है । तो यह सभी भाषाओं का समर्थन करता है ctags का समर्थन करता है (C ++ all जावा सहित)। लेकिन परिणाम सही नहीं है क्योंकि सीटीजी केवल कोड का विश्लेषण करने के लिए नियमित अभिव्यक्ति का उपयोग करता है। विवरण के लिए मेरे init-hippie-Expand.el देखें। आप के मूल्य की जाँच करके शुरू कर सकते हैंhippie-expand-try-functions-list

  2. ऑटो-कम्प्लीट एक आधुनिक है जिसमें फैंसी UI (ड्रॉपडाउन मेनू, कंसोल विंडो में भी) है। यदि आप एक बैकएंड के रूप में क्लैंग का उपयोग करते हैं । अंतर्मुखी बहुत बेहतर है। क्लैंग को काम करने के लिए, आपको ऑटो-कंप्लीट-क्लैंग इंस्टॉल करना होगा जो कि ऑटो-कम्प्लीट का प्लगइन है। यह केवल भाषा क्लैंग सपोर्ट (C / C ++ / Obj-C) का समर्थन करता है। जैसा कि सिल्वेन बेनर ने कहा है, आप ईएसीएस-एक्लेमिम का उपयोग कर सकते हैं क्योंकि जावा बैक बैक के रूप में होता है जो वास्तव में ग्रहण के निष्पादन योग्य कहता है। तो ऑटो-पूरा जावा का समर्थन कर सकता है। विवरण के लिए मेरा init-auto-complete.el देखें।

  3. सिमेंटिक यूआई और बैक एंड पार्सिंग इंजन दोनों प्रदान करता है। ये धीमा है। ड्रॉपडाउन यूआई ठीक है लेकिन एक्स विंडो की आवश्यकता है। इंटेलीजेंस परिणाम ctags से बेहतर है। और डोकुमनेशन मेरे लिए बहुत भद्दा है। देखें init-semantic.el जानकारी के लिए।

  4. कंपनी-मोड ऑटो-पूर्ण के समान है, अंतर यह है कि यह एक बंडल में सब कुछ पैकेज करता है। उदाहरण के लिए, C ++ डेवलपर्स को केवल कंपनी-मोड (स्वतः पूर्ण कुछ तृतीय पक्ष प्लगइन की आवश्यकता) स्थापित करने की आवश्यकता है। एक और यूआई अंतर है कि कंपनी उम्मीदवार को स्वचालित रूप से दिखाएगी । इसलिए आप कंपनी में कम कीज दबाएं। अनुकूलन के बाद ऑटो-पूर्ण में एक ही काम करना संभव है।

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

मैं उपयोग करने का सुझाव या तो स्वत: पूर्ण या कंपनी प्रमुख कोड पूर्णता प्लगइन के रूप में और या तो अर्थ या पूरक प्लगइन के रूप में हिप्पी-विस्तार

मैं कंपनी-मोड और हिप्पी का उपयोग करता हूं- क्योंकि,

  • अब (वर्ष 2017) कंपनी-मोड ऑटो-पूर्ण की तुलना में अधिक सक्रिय रूप से बनाए रखा गया है और इसमें अधिक 3 पार्टी प्लगइन्स हैं (उदाहरण के लिए, लेटेक्स प्लगइन)

  • हिप्पी-विस्तार बहुत सक्रिय नहीं है, लेकिन यह TABकुंजी पर कब्जा नहीं करता है जो कंपनी-मोड / अर्थ / ऑटो-पूर्ण उपयोग कर रहा है

यदि आप C ++ / Java के लिए कंपनी-मोड का उपयोग करते हैं, तो आप संशोधित करना चाह सकते हैं company-backends

कंपनी-मोड पर कुछ और टिप्स,

आपको मूल्य को ट्विक करने की आवश्यकता हो सकती है company-backends। उदाहरण के लिए, मान लीजिए कि इसका मूल्य है (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))। फिर अगर company-eclimआप गैर-शून्य उम्मीदवारों को प्राप्त कर सकते हैं company, तो आपको लगता है कि आप जावा लिख ​​रहे हैं, इसलिए यह बैकएंड नहीं चलेगा company-eclim

अब देखते हैं (company-dabbrev-code company-gtags company-etags company-keywords)। इन चारों बैकेंड का एक साथ उपयोग किया जाएगा। उदाहरण के लिए, company-dabbrev-codeगैर-शून्य उम्मीदवारों को सफलतापूर्वक लाने के बाद भी , अन्य तीन बैकेंड अभी भी निष्पादित किए जाते हैं।

वास्तविक दुनिया में, अक्सर बैकएंड के क्रम को फिर से समायोजित करने या नए बैकेंड को जोड़ने के लिए आवश्यक है ( company-rtagsउदाहरण के लिए)।


लेटेक्स के लिए Emacs 24 में सबसे अच्छा ऑटो-पूर्ण पैकेज कौन सा है?
डॉक्टरेट

@doctorate मुझे लगता है कि आपको ऑटो-पूर्ण और इसके स्रोत emacswiki.org/emacs/AutoCompleteSources का उपयोग करने की आवश्यकता है , लेकिन मैं लेटेक्स उपयोगकर्ता के बजाय एक प्रोग्रामर हूं, इसलिए आप Google प्लस Emacs समुदाय पर बेहतर जांच करेंगे, बहुत सारे शैक्षणिक लोग ।
चिन बिन

कृपया ध्यान दें नोट कंपनी-मोड भी लेटेक्स का समर्थन करता है। इसलिए मैं बजाय कंपनी स्वत: पूर्ण सुझाव है
chen बिन

2

संक्षिप्त उत्तर: मुझे पता है कि जावा के लिए उपयोगी ईमेक के लिए कोई नहीं है। डायनेमिक विस्तार आपके क्लास पथ में पुस्तकालयों की परवाह नहीं करता है, यह आपके द्वारा टाइप किए जाने वाले कोड के बारे में कुछ भी नहीं जानता है यह केवल उस पाठ तक विस्तार कर सकता है जो पहले से ही बफ़र्स में मौजूद है। JDE और emacs-eclim इस कार्यक्षमता को प्रदान करने की कोशिश करते हैं लेकिन व्यक्तिगत रूप से मैं प्रभावित नहीं था।


0

संक्षिप्त जवाब: M-/

लंबे उत्तर: RTFM :-)


6
+1, ईश्वर मुझे उम्मीद है कि अगला प्रश्न जो मैं देख रहा हूं, वह है "
आरटीएफएम

@rownage: ओह, thats `` जानकारी Emacs-manual'` ( C-h r)
Samb

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