C ++ में बुद्धिमान ऑटो-पूरा कैसे करें?


43

Emacs किसी अन्य IDE के साथ प्रतिस्पर्धा नहीं कर सकते हैं यदि इसमें एक ऑटो पूरा करने का कार्य नहीं है। ऑटो-कम्प्लीट मुझे एक अधिक कुशल प्रोग्रामर बनाता है। मुझे ऑटो कम्प्लीट मोड एक्सटेंशन का पता है , लेकिन यह C ++ के साथ काम नहीं करता है।

स्वत: पूर्ण

मैं C ++ के लिए स्मार्ट और कुशल ऑटोोकम्पिशन कैसे प्राप्त कर सकता हूं?


यह प्रश्न मूल रूप से मालाबारबा द्वारा एरिया 51 प्रस्ताव पर पूछा गया था : सी ++ में बुद्धिमान ऑटो-पूरा कैसे करें?


1
इस प्रश्न पर थोड़ा विस्तार करना अच्छा होगा। इसका बहुत अधिक संभावित मूल्य है, लेकिन अभी सवाल सिर्फ शीर्षक का है।
मलाबारबा

आइरन-मोड इस समय जाने का मार्ग प्रतीत होता है।
सेवकी

जवाबों:


45

अस्वीकरण: मैं विडंबना-विधा का लेखक हूं

कंपनी-विडंबना स्क्रीनशॉट

यदि आप केवल स्मार्ट ऑटो-पूरा करना चाहते हैं, तो मैं कंपनी-विडंबना के साथ विडंबना-मोड की सिफारिश कर सकता हूं ।

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

एक अन्य उपकरण जिसे अभी तक उद्धृत नहीं किया गया है वह है emacs-ycmd


2
आपको बहुत - बहुत धन्यवाद! काश मुझे जल्द ही पता चलाirony-mode
ल्यूक

@GuillaumePapin विडंबना लिखने के लिए धन्यवाद! क्या आपके पास कोई टाइमिंग बेंचमार्क उपलब्ध होगा? मैंने देखा है कि clang_codeCompleteAtएक पार्स टीयू (लेकिन बिना बदलाव किए) के साथ कॉल करने में 3-5 सेकंड लगते हैं। इससे irony-modeतेज है?
प्रधान

1
विडंबना libclang / clang_codeCompleteAt का उपयोग करती है, इसलिए आपको इससे बेहतर समय नहीं मिलेगा। संदर्भ के आधार पर 3-5 सेकंड बहुत अधिक हो सकते हैं (उदाहरण के लिए वैश्विक स्कोप पर पूर्णता अन्य स्कोप की तुलना में बहुत अधिक समय लेती है)। आप हाल ही में किए गए कुछ समयों पर एक नज़र डाल सकते हैं: github.com/Sarcasm/irony-mode/issues/131#issuecomment-60008803
गिलोय पापिन

संबंधित, भविष्य के पाठकों के लिए: github.com/Sarcasm/irony-mode/issues/140
सीन एलाड

विडंबना-विधा और एमएसीएस- ycmd की भूमिकाएं कैसे तुलना करती हैं? क्या वे एक दूसरे के विकल्प हैं? यह दोनों का उपयोग करने के लिए कभी समझ में आएगा?
प्रिक्सोलिटिक

23

मेरे गाइड की जाँच करें । यह C / C ++ में ऑटो-पूर्ति के लिए कई तरीकों को सूचीबद्ध करता है।

वे विकल्प हैं:

  • लोहड़ी का उपयोग करना । अत्यधिक अनुशंसित है, क्योंकि यह अन्य समाधानों की तुलना में क्लैंग और सेटअप करने में आसान है।

  • Emacs से बिल्ट-इन पार्सर का उपयोग करना। यह सबसे अच्छा ऑटो पूर्ण है जिसे आप Emacs parser, Semantic के भीतर से प्राप्त कर सकते हैं, लेकिन यह लिनक्स कर्नेल जैसे बड़े प्रोजेक्ट पर धीमा होगा।

  • के company-modeसाथ पैकेज का उपयोग करना company-clang। सिस्टम के लिए कोड पूरा करने के लिए ठीक रास्ते प्रदान करता है क्योंकि इसमें स्वचालित रूप से क्लैंग से रास्ते मिल सकते हैं, लेकिन परियोजना के लिए कुछ विन्यास करना पड़ता है

  • के company-modeसाथ उपयोग कर रहा है company-gtags। यह GNU ग्लोबल से उत्पन्न टैग डेटाबेस को पूर्णता के रूप में उपयोग करता है। आप अपनी परियोजना के लिए स्थानीय स्तर पर कोड पूरा करने के लिए इसका उपयोग कर सकते हैं। यह बिल्कुल बुद्धिमान नहीं है क्योंकि यह उत्पन्न डेटाबेस के अंदर सब कुछ आपके पास फेंकता है।

  • rtagsलाइव विश्लेषण के लिए एक सर्वर प्रदान करके आगे बढ़ता है। लेकिन यह शुद्ध एलिसा समाधान के साथ तुलना करने के लिए जटिल है।


मैं इस बात से सहमत नहीं होता कि शुद्ध इमैक लिस्प समाधान की तुलना में rtags स्थापित करना अधिक जटिल है। शुद्ध एमएसीएस लिस्प समाधान आमतौर पर सेमीक / बिल्ड फ़ाइलों पर विचार नहीं करते हैं और शायद ही किसी हेडर को खोजने में सक्षम हैं । तुलना में सेटअप करने के लिए Rtags बहुत आसान है। यह अभी भी एक परियोजना के रूप में थोड़ा सा युवा है, जिसमें बहुत अच्छा परीक्षण कवरेज नहीं है।
baol

टोहो के मार्गदर्शक के लिए अच्छा: syamajala.github.io/c-ide.html
विक्टर

9

मुझे RTags + Company के साथ बड़ी सफलता मिली है ।

RTags को एक अलग डेमॉन की आवश्यकता होती है rdmजो कोड-पूरा करने, कोड-नेविगेशन और रीफैक्टरिंग के लिए क्लैंग का उपयोग करता है। rdmप्रतीकों के डेटाबेस के रूप में भी कार्य करता है, जिसका अर्थ है कि स्वतः पूर्णता किसी भी समाधान से सीधे कॉलिंग की तुलना में बहुत तेज़ है clang_codeCompleteAt

Rdm अपनी परियोजनाओं जो एक परेशानी हो सकता है के लिए संकलन झंडे के जानकारी की जरूरत है, लेकिन अगर आप से सलाह का पालन करें RTags पेज और सिमलिंक gcc-rtags-wrapper.shके लिए gcc, g++, ccऔर c++RDM स्वचालित रूप से recompile पर नए संकलन झंडे के साथ अद्यतन किया जाता।


मैं बस विडंबना-मोड से स्विच करने के लिए rtags। लगभग 15 मिनट या इसके बाद आयरनरी-मोड लगातार क्रैप करता है और काम करना बंद कर देता है। Rtags अब तक बहुत अच्छा लगता है, और इसमें यास्नीपेट के साथ क्लीनर एकीकरण है।
nenchev

6

समाधान 1: कंपनी-मोड + क्लैंग

एकमात्र समस्या यह है कि आपको कंपनी-मोड को बताने की आवश्यकता है जहां आपकी परियोजना की सी / सी ++ हेडर फ़ाइलों को खोजना है।

यदि आप cmake का उपयोग करते हैं, तो आप https://github.com/redguardtoo/cpputils-cmake को आपके लिए सेटअप करने के लिए दे सकते हैं (HINT: मैं cpputils-cmake का लेखक हूं)।

या

समाधान 2: कंपनी-मोड + ग्नू ग्लोबल

कहने के लिए और कुछ नहीं, आपको अन्य के रूप में उल्लेख किए गए ग्नू ग्लोबल क्ली टूल के साथ टैग बनाने की आवश्यकता है।


1

मैं rtags, flycheck, विडंबना और कंपनी-क्लैंग को कॉन्फ़िगर करने के लिए cmake-ide का उपयोग कर रहा हूं ।

अब आप एक ही समय में अपने बिल्ड सिस्टम और अपने पसंदीदा स्टैटिक विश्लेषण एमएसीएस प्लगइन्स को कॉन्फ़िगर कर सकते हैं !

संपादित करें: ध्यान दें कि कंपनी क्लैंग ऑटोकम्प्लीटेशन प्रदान करती है, जो कि वह सुविधा थी जिसकी आपको तलाश थी। cmake-ide भी flycheck और rtags को कॉन्फ़िगर कर सकता है, जो कई और IDE जैसी सुविधाएँ जोड़ता है।


1
कृपया बताएं कि यह कैसे C ++ ऑटोकंप्लीशन प्राप्त करने के प्रश्न का उत्तर देता है।
ड्रयू

@ ड्रू कंपनी-क्लेंग पूर्णता प्रदान करती है
एनिमेटेड

कृपया इसे अपने उत्तर में रखें। धन्यवाद।
आकर्षित किया

0

एमएक्स अर्थ-मोड

www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic

&&

टैग टेबल्स

खोजो। -नाम "*। [chCH]" -प्रिंट | etags -

www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html

etags , ctags - Emacs, vi के लिए टैग फ़ाइल जनरेट करें

manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en

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

http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di

म-। (find-tag) परिभाषा के लिए टैग नाम और& कूद का संकेत देता है

http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e

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