विम में स्वतः पूर्णता


257

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

मुझे इसके बारे में पता है Ctrl+ N, Exuberant Ctags एकीकरण , Taglist , cppcomplete और OmniCppComplete । काश, इनमें से कोई भी मेरे "ऑटोकंप्लीशन काम करने का विवरण" फिट नहीं करता है:

  • Ctrl+N अच्छी तरह से (केवल) काम करता है यदि आप क्षमा करें कि कैसे वर्तनी है class, या while। ओह अच्छा।
  • Ctags आपको रूखेपन देता है लेकिन इसमें बहुत सारी कमियां हैं।
  • टैगलिस्ट सिर्फ एक सीटैग रैपर है और इस तरह, इसकी अधिकांश कमियां विरासत में मिली हैं (हालांकि यह लिस्टिंग की घोषणाओं के लिए अच्छी तरह से काम करता है )।
  • cppcomplete बस वादे के अनुसार काम नहीं करता है, और मैं यह पता नहीं लगा सकता कि मैंने क्या गलत किया है, या यदि यह "सही ढंग से" काम कर रहा है और डिजाइन द्वारा सीमाएं हैं।
  • लगता है OmniCppComplete को ठीक उसी तरह की समस्या है, जैसे कि स्वत: पूर्णता ठीक से काम नहीं करती है। इसके अतिरिक्त, tagsफ़ाइल को एक बार फिर से मैन्युअल रूप से अपडेट करने की आवश्यकता है।

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

  • सिंटेक्स जागरूकता । अधूरा वादा (लेकिन मेरे लिए वितरित नहीं), सही, गुंजाइश-जागरूक-ऑटो निम्नलिखित के पूरा होने:

    variableName.abc
    variableName->abc
    typeName::abc

    और वास्तव में, कुछ और पूरी तरह से बेकार है।

  • विन्यास । मुझे (आसानी से) निर्दिष्ट करने की आवश्यकता है कि स्रोत फाइलें कहां हैं, और इसलिए जहां स्क्रिप्ट को इसकी स्वत: पूर्ण जानकारी मिलती है। वास्तव में, मुझे अपनी निर्देशिका में एक मेकफाइल मिला है जो आवश्यक निर्दिष्ट पथों को निर्दिष्ट करता है। ग्रहण में मिली जानकारी की व्याख्या कर सकते हैं, क्यों नहीं एक विम स्क्रिप्ट भी?

  • अप-टू-डेटनेस । जैसे ही मैं अपनी फ़ाइल में कुछ बदलता हूं, मैं चाहता हूं कि ऑटो-कम्प्लीट इसको प्रतिबिंबित करे। मैं मैन्युअल रूप से ट्रिगर (या कुछ तुलनीय) नहीं करना चाहता ctags। इसके अलावा, परिवर्तन वृद्धिशील होना चाहिए , यानी जब मैंने पूरी फ़ाइल ट्री (जो बहुत बड़ी हो सकती है) को फिर से पार्स करने के लिए इसे पूरी तरह अस्वीकार्यctags कर दिया है।

क्या मैं कुछ भूल गया था? अद्यतन करने के लिए स्वतंत्र महसूस करें।

मैं काफी विन्यास और / या छेड़छाड़ के साथ सहज हूं, लेकिन मैं खरोंच से समाधान का कार्यक्रम नहीं करना चाहता हूं, और मैं विम स्क्रिप्ट को डीबग करने में अच्छा नहीं हूं।

एक अंतिम नोट, मैं वास्तव में जावा और सी # के लिए कुछ ऐसा ही चाहूंगा, लेकिन मुझे लगता है कि इसके लिए बहुत अधिक आशा है: ctagsकेवल पार्स कोड फाइलें और जावा और सी # दोनों के पास विशाल, पहले से तैयार फ्रेमवर्क हैं जिन्हें अनुक्रमित करने की आवश्यकता होगी। दुर्भाग्य से, एक आईडीई के बिना .NET विकसित करना C ++ की तुलना में PITA से भी अधिक है।


4
आपको यह सवाल पूछे हुए एक लंबा समय हो गया है, क्या आपने आखिरकार एक अच्छा पाया है? मैं पूछ रहा हूँ क्योंकि मुझे कोई स्वीकृत उत्तर नहीं दिख रहा है। व्यक्तिगत रूप से हालांकि मुझे स्वीकार करना होगा कि मैंने अपने चर / कार्यों को उपसर्ग किया। उदाहरण के लिए, वे सभी sh(मेरी लाइब्रेरी में अर्थ है) से शुरू होते हैं और उसके बाद मेरी कक्षा के संक्षिप्त नाम से। कक्षा के लिए उदाहरण के shPलिए Parser। फिर आपको केवल shPCTRL + p (या यदि आप चाहें तो CTRL + n) लिखना और हिट करना होगा और कक्षा के सदस्यों को अंतिम उपयोग से पहले (या पहली बार अगर CTRL + n तक) प्राप्त करना है
शाहबाज

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

2
क्या आपने clang_completeहाल ही में कोशिश की है ? यह libclangअब कैशिंग के साथ उपयोग कर सकता है और इस प्रकार तेज होना चाहिए।
Jan Larres

@ जान जानकारी के लिए धन्यवाद। जब मैंने आखिरी बार इसे आजमाया था, तो लिब्क्लैंग का समर्थन अभी भी स्केच था। समय मिलते ही मुझे फिर से कोशिश करनी चाहिए।
कोनराड रुडोल्फ

(रोलबैक संपादित करने का कारण: उत्पाद के नाम कोड नहीं हैं, वे संबंधित नहीं हैं formatted like this।)
कोनराड रूडोल्फ

जवाबों:


171

YouCompleteMe का प्रयास करें । यह शब्दार्थ C / C ++ / Objective-C पूर्ण करने की पेशकश करते हुए, लिबक्लांग इंटरफ़ेस के माध्यम से क्लैंग का उपयोग करता है। यह बहुत क्लैंग_कम जैसा है, लेकिन काफी तेजी से और फजी-मेल के साथ है।

उपरोक्त के अलावा, YCM C #, पायथन, गो, टाइपस्क्रिप्ट आदि के लिए सिमेंटिक पूर्णता भी प्रदान करता है। यह उन भाषाओं के लिए गैर-शब्दार्थ, पहचान-आधारित पूर्णता भी प्रदान करता है, जिसके लिए इसका सिमेंटिक समर्थन नहीं है।


69
वास्तव में, मैं इस समाधान को स्वीकार करने जा रहा हूं। अंत में एक प्लगइन जो उद्धार करता है। मैं कई दिनों से इसका उपयोग कर रहा हूं। इस प्रश्न का उत्तर देने में केवल चार साल लगे। ;-)
कोनराड रुडोल्फ

5
YouCompletMe valloric के साथ बहुत बढ़िया काम! बधाई
स्टेटिक जूल 15'13

5
बहुत बुरा YouCompleteMe विंडोज पर स्थापित करने के लिए एक पूर्ण PITA है :(
xx

2
@DrTwox रीडमे से: "YCM के पास विंडोज के लिए कोई आधिकारिक समर्थन नहीं है, लेकिन इसका मतलब यह नहीं है कि आप इसे वहां काम नहीं कर सकते। विंडोज इंस्टॉलेशन गाइड विकी पृष्ठ देखें। इसे जोड़ने के लिए स्वतंत्र महसूस करें।"
user456584

7
इस पोस्ट में उल्लेख किया जाना चाहिए कि आप लेखक हैं, क्योंकि यह बॉर्डरलाइन आत्म-प्रचार है (हालांकि मैं यह तर्क नहीं दूंगा कि यह सवाल का जवाब देता है, फिर भी आपको एक अस्वीकरण शामिल करना चाहिए)।
19ang में

36

वहाँ भी clang_complete है जो C ++ परियोजनाओं के लिए कोड पूरा करने के लिए clangसंकलक का उपयोग करता है । इस प्लगइन के लिए समस्या निवारण संकेत के साथ एक और सवाल है ।

जब तक यह परियोजना संकलित हो जाती है, तब तक प्लगइन काफी अच्छा काम करता है, लेकिन बड़ी परियोजनाओं के लिए निषेधात्मक रूप से धीमा है (क्योंकि यह टैग सूची बनाने के लिए पूर्ण संकलन का प्रयास करता है)।


clang_completeप्लगइन Cygwin और विंडोज पर अच्छी तरह से काम करता है। बड़ी परियोजनाओं के बारे में कुछ नहीं कह सकता क्योंकि मेरे पास कोई नहीं है। :)
लूमी

ऐसा लगता है कि libclang का उपयोग करते हुए clang_complete अब कैशिंग हो गया है। यह तो स्वीकृत उत्तर होना चाहिए। क्या आपने लिनक्स कर्नेल पर clang_complete की कोशिश की है? कर्नेल के लिए मैंने जो सबसे अच्छा अनुक्रमण देखा है, वह ग्रहण सीडीटी का उपयोग कर रहा है, अगर clang_complete कर्नेल को संभाल सकता है तो इसे कुछ भी पूरा करने में सक्षम होना चाहिए।
दिलकश

clang_complete मेरे द्वारा उपयोग किए जाने वाला सबसे अच्छा विम प्लगइन है।
Cromulent

1
@Cromulent आह, YouCompleteMe की जाँच करें, यह बहुत बेहतर है।
कोनराड रुडोल्फ

@KonradRudolph धन्यवाद। मैं इसे देख लूँगा।
12

7

अनुरोध के अनुसार, यहां वह टिप्पणी है जो मैंने पहले दी थी:

कृपया एक नज़र इसे देखिये:

यदि आप एक MacOSX पर मोनोडेवलप का उपयोग करना चाहते हैं तो इस लिंक से आपको मदद मिलेगी

सौभाग्य और खुश कोडिंग।


OmniCompletion लिंक टूटा हुआ है
dotoree

1
मेरा सुझाव है कि github.com/nosami/OmniSharpServer आप के साथ YouCompleteMe C # के लिए, जैसा कि ऊपर सुझाया गया है
rafee

6

मैंने अभी प्रोजेक्ट एक्क्लिम को एक और प्रश्न में जोड़ा है । यह कम से कम जावा एकीकरण के लिए काफी आशाजनक लगता है।


क्या आपने इसका परीक्षण किया है? दिलचस्प लगता है।
पचाने

@Pacane: नहीं। मुझे महीनों में जावा का उपयोग नहीं करना पड़ा है और प्रयोग करने के लिए खाली समय नहीं है।
कोनराड रूडोल्फ

1
एक्लिम जावा के लिए एक महान समाधान प्रतीत होता है, हालांकि ग्रहण अभी भी एक बिना सिर के सेटअप में लोड करने के लिए एक जानवर बना हुआ है
द्रुपद पंचाल

2
Java के लिए, आप Vrapper का उपयोग कर सकते हैं । मुझे लगता है कि यह आमतौर पर शानदार ऑटो-समापन के साथ ठीक है। सामयिक पाठ-भारी संपादन के लिए, मैं एक बाहरी उपकरण के रूप में वास्तविक विम लॉन्च कर सकता हूं।
kizzx2


2

क्या आप कुछ ऐसी चीज की तलाश कर रहे हैं, जो आपको पसंद है?

insevim मुद्दे को संबोधित करता है।

यहाँ स्क्रीनशॉट के लिए लिंक


2
यह वही होगा जो मैं देख रहा हूँ, हाँ। दुर्भाग्य से, यह केवल विंडोज पर चलता है (मैं ओएस एक्स का उपयोग कर रहा हूं)। इसके अलावा, अंतिम अद्यतन 2003 के आसपास किया गया लगता है। :-(
कोनराड रूडोल्फ

अच्छी तरह से आप स्रोत कोड प्राप्त कर सकते हैं :) यदि ऐसा नहीं है, तो केवल एक चीज जिसके बारे में मैं सोच सकता हूं, वह है ऑम्निकोमेप्शन .. या इस पर एक नज़र डालें: ankitjain.org/blog/2007/06/30/integrating-vim-with-monodevelop .net सामान के लिए कम से कम ..
रिक टोक्यो

रिक, कृपया अपनी टिप्पणी दो अलग-अलग उत्तरों के रूप में प्रदान करें, वे अमूल्य हैं, और मैं उनका उचित सम्मान करना चाहूंगा! उस ने कहा, MonoDevelop OS X के तहत अब तक अनुपयोगी है, और मैं वर्तमान में OmniCppComplete में देख रहा हूं।
कोनराड रुडोल्फ

Lol यह केवल विंडोज़ है! :( आपको ऐसी विंडो पर क्यों चाहिए जहां u VS है। मैं लिनक्स पर एक समाधान की तलाश कर रहा हूं।
Nils

निल्स: सभी के पास विजुअल स्टूडियो तक पहुंच नहीं है, बहुत से लोगों के पास vi कौशल है जो वे विंडोज वातावरण में लागू करना चाहते हैं। लिनक्स के लिए एक बंदरगाह था, लेकिन वर्तमान में यह नीचे है। किसी भी मामले में, आप क्या हासिल करने की कोशिश कर रहे हैं? क्या आप सुनिश्चित हैं कि आपको केवल डिफ़ॉल्ट ऑटो-पूर्ण फ़ंक्शन की आवश्यकता नहीं है? linux.org/docs/ldp/howto/C-editing-with-VIM-HOWTO/…
Ric Tokyo

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