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


32

कुछ संपादक (जैसे कि विंडोज़ पर विजुअल स्टूडियो) C ++ ऑटोकंप्लीशन करते हैं जो C ++ को समझते हैं। उदाहरण के लिए, दिया गया:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

दृश्य स्टूडियो में ऑटो-कम्पलीट को केवल एक विधि के बारे में std::vector<int>पता होता है जो कि i से शुरू होता है insert

क्या यह इस तरह के ऑटोकॉमप्लेक्शन को विम में प्राप्त करना संभव है?


3
YouCompleteMe प्लगइन स्वत: पूर्ण करने के मामले में सीख सकते हैं, और सी परिवार भाषाओं को समझ सकते हैं।
अलक्षेंद्र

@alxndr डॉक्यूमेंटेशन मेरे लिए उलझाने के लिए उलझाने वाला केस था। और जैसे ही मैंने इसके साथ शुरुआत की, YCM सर्वर क्रैश हो गया!
अभिनव गौनियाल

YCM मेरे लिए अपेक्षाकृत अच्छी तरह से काम करता है, जब तक कि मेरे पास टेम्पलेट भारी (बूस्ट) न हो, जहां यह सिस्टम में लॉउड के लुट्स जोड़ता है। मेरा सेटअप इस बीच एक गड़बड़ है, YCM भागों को निकालने के लिए कठिन ...
johannes

@yo 'यह प्रश्न C ++ के साथ विम का उपयोग करने के लिए काफी विशिष्ट है। इसके लिए समाधान शायद उन लोगों पर लागू नहीं होंगे जो विम का उपयोग पर्ल (और इसके विपरीत) लिखने के लिए करते हैं। तो c ++ मुझे ठीक लगता है; लेकिन निश्चित रूप से वीआई और विम मेटा उस पर चर्चा करने के लिए सही जगह है।
derobert

2
@AbhinavGauniyal उन समस्याओं के समान है जो मैंने YCM का उपयोग करने से पहले देखी है। आप किस सिस्टम पर हैं? OSX के लिए देखने के लिए यहाँ । मैं मैकविम का उपयोग नहीं कर रहा हूं, लेकिन मैंने होमब्रेक के साथ सीएमके स्थापित किया। फिर मैं cdYCM प्लगइन डायरेक्टरी ( ~/.vim/bundleमेरे लिए) को एड करता हूं , और दौड़ता हूं ./install --clang-completer
bsmith89

जवाबों:


28

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

लोग आपको YouCompleteMe का सुझाव दे सकते हैं, लेकिन ईमानदार होने के लिए, यह जो कहता है, उसके लिए यह प्लगइन बहुत फूला हुआ है, और इसे स्थापित करने के लिए बहुत अधिक चरणों की आवश्यकता है। मैंने इसे कई मौकों पर वीम सेगफॉल्ट भी किया था। मैं clang_complete के साथ खुश नहीं हो सकता।

यह तब होता है जब मैं टाइप करता हूं v.:बजना: पूर्ण


4
माना। मुझे वाईसीएम (उल्लिखित सेगफॉल्ट सहित) के साथ बहुत सारी समस्याएं हैं। और कॉन्फ़िगरेशन के घंटों के बाद भी, मैंने इसे पूरी तरह से काम नहीं किया।
चार्ल्सएल

1
मेरे पास YCM सर्वर कई बार दुर्घटनाग्रस्त हो गया था, clang_complete की प्रतीक्षा कर रहा है, यहां अन्य उपयोगकर्ताओं के लिए प्रासंगिक जानकारी है: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abvav Gauniyal

1
मेरे पास उल्टा था। YCM ने ठीक काम किया (भले ही इसे स्थापित करने के लिए PITA था) लेकिन
क्लैंग

क्या आप यह सब छिपा सकते हैं ताकि आप अपने कोड को कुछ पंक्तियों के नीचे देख सकें?
मैट सी

@ मैथ्यू कोलियट, क्या छिपाना? पॉपअप मेनू? कोड में कुछ खास नहीं है। यह सिर्फ return 0उस पॉपअप मेनू के नीचे है।
अक्षय

8

YouCompleteMe ( लिंक ) प्लगइन मेरे लिए बहुत अच्छा रहा है। यह स्वत: पूर्ण सुविधा प्रदान करने के लिए libclang का उपयोग करता है, सटीक समापन प्रदान करता है।

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


3

YouCompleteMe स्थापित करने के लिए उतना कठिन नहीं है, और यह मेरे लिए काफी स्थिर रहा है, मैंने वर्षों पहले clang_complete से YouCompleteMe पर माइग्रेट किया है। एक बात मैं सहमत हूं, यह वास्तव में एक विशाल प्रतिबद्ध इतिहास, कई आंतरिक निर्भरता और कई भाषाओं के लिए समर्थन के साथ फूला हुआ है, जिसकी आप परवाह नहीं कर सकते हैं लेकिन फिर भी इसके संबंधित सबमॉड्यूल का क्लोनिंग समाप्त हो जाएगा। यह, YouComplemeMe के साथ एक मुद्दा है, फिर भी .... यह काम करता है।

मैंने C ++ को बेहतर समर्थन देने के लिए विशेष उद्देश्य के साथ एक कांटा पर काम किया है , आप इस gif को दिखा सकते हैं:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

यह नई पैरामीटर जानकारी का लाभ उठाता है जो क्लैंग प्रदान करने में सक्षम है, आप मेरे इस लेख से इसके बारे में अधिक जान सकते हैं: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/


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