क्या विम के लिए कोई स्वतः पूर्णता प्लगइन्स हैं?


12

क्या विम के लिए एक स्वतः पूर्णता प्लगइन है? मेरे लिए यहां क्या विकल्प हैं?

फिलहाल मैं AutoComplPop का उपयोग कर रहा हूं , लेकिन इसका स्निपमेट के साथ बुरा एकीकरण है जिसका उपयोग मैं रूबी फाइलों (यहां तक ​​कि <100 लाइनों) पर धीमा और मृत करता हूं।

मैंने कुछ अन्य प्लगइन्स देखे हैं, लेकिन वे कम से कम एक वर्ष से अधिक समय से मृत हैं। तो, कोई विचार?


1
ACP यहाँ बहुत अच्छी तरह से काम करता है और मुझे SnipMate से कोई समस्या नहीं है। वहाँ एक सेटिंग है ( let g:acp_behaviorSnipmateLength=-1देखें :help autocomplpop) आप अपने .vimrc में जोड़ने वाले हैं, क्या आपने इसे जोड़ा है?
रोमेनिल

जवाबों:


16

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

सबसे पहले, आपको समझना चाहिए कि विम एक पाठ संपादक है, न कि एक कोड संपादक। कोड एडिटर, IDES, Jetbrains सुइट जैसे टूल, विजुअल स्टूडियो कोड, एक्लिप्स आदि उपकरण हैं।

Vim मौलिक रूप से "स्वतः पूर्ण" कोड को सही ढंग से नहीं कर सकता है। स्वतः पूर्णता को आपके स्रोत कोड को आत्मसात करने और एएसटी का विश्लेषण करने की आवश्यकता होती है। विचार करें कि विम 8 2016 में रिलीज़ होने तक अतुल्यकालिक संचालन नहीं कर सकता था, इसलिए विम प्लग में किसी भी प्रकार के कोड आत्मनिरीक्षण सॉफ़्टवेयर को चलाने की कोशिश एक बुरा सपना होगा। यह ऐसा करने के लिए विम पारिस्थितिकी तंत्र के इतिहास में बेक किया गया है। और वे सभी जो ऐसा करने की कोशिश करते हैं, जैसे टर्न फॉर विम, वास्तव में उपयोग करने के लिए बुरे सपने हैं।

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

ये आपके विकल्प हैं, जिनमें से मैंने सभी की कोशिश की है:

  • दो उपयोगी कुंजीपटल शॉर्टकट हैं Ctrl- nहै, जो केवल वर्तमान बफ़र्स के आधार पर एक शब्द भी स्वतः पूर्ण कर आप खुले (कोई कोड आत्मनिरीक्षण) है, और Ctrl- xCtrl- lजो कोड की एक पूरी लाइन स्वत: पूर्ण होगा यदि आप एक डुप्लिकेट करना चाहते हैं। आप शायद जानते हैं Ctrl- xCtrl- f, जो वर्तमान सहित, पथ सहित एक फ़ाइल नाम को स्वतः पूर्ण करेगा :pwdपैटर्न: पूर्ण करता है, तो आप के साथ खोज नहीं है प्लगइन हल्का उपयोगी हो सकता है /\v

  • Vim में निर्मित " Omnicompletion " ने इसे ट्रिगर किया Ctrl- x, Ctrl- o(यह वही है जो Vim लेखक आपको हर बार टाइप करना चाहते हैं), साथ ही साथ भाषा विशेष प्लगइन्स का एक गुच्छा , यदि वे मौजूद हैं। आप यह देख सकते :echo &omnifuncहैं कि आपके पास अपनी पसंद की फ़ाइल में विम द्वारा पहले से ही स्थापित किया गया है या नहीं।

  • टाइप करने पर ऊपर दिए गए Omnicompletion मेनू को स्वतः खोलने के लिए AutoComplPop

  • SuperTab जो आपको TabVim के बिल्ट इन ट्रिगर को दबाने की सुविधा देता है ।

  • NeoComplCache जो कीवर्ड पूर्णता है (यह कैसे बनाया गया विम से अलग है निर्दिष्ट नहीं है), एक जटिल .vimrcसेटअप, और स्निपेट पूरा करने के लिए NeoSnippet है

  • का एक राक्षस संयोजन exuberant-ctagsऔर DoctorJS(एक मोज़िला परियोजना है कि एक साल के लिए मौत हो चुकी है), TagBar और एक thingy देसी टैग फ़ाइलों से निकालने पूरा करने।

  • SnipMate , स्निपेट्स के साथ एक मूल टैग पूरा करने का प्लगइन, और अपने आप यह पता लगाना कि स्निपेट कैसे जोड़ना है, क्योंकि यह थोड़ा मुश्किल है।

  • UltiSnips के साथ - साथ UltiSnips-Snippets जो उपरोक्त स्निपेट्स से अलग हैं ।

  • विम के लिए टर्न , एक होनहार पुस्तकालय जो सही आटोक्लेम प्राप्त करने के लिए वास्तविक कोड आत्मनिरीक्षण करता है। हालांकि यह छोटी है, बहुत धीमी है, इसमें मेमोरी लीक है जो विम को दुर्घटनाग्रस्त कर देगा, और संभवतः परित्याग है।

  • YouCompleteMe , स्निपेट पूरा करने के लिए एक घरेलू-विकसित फ़ंक्शन के साथ-साथ पृष्ठभूमि में एक सर्वर चलाने वाले पूर्ण-रूप में फ़ज़ी है ।

  • एक्लिम - पृष्ठभूमि में एक एक्लिप्स सर्वर चलाने का एक नेक प्रयास और विम को बताएं कि यह मक्खी पर आत्मनिरीक्षण करता है। यह टर्न के बारे में भी काम करता है।

  • अंत में, Closetag या delimitMate या स्वतः या एक देसी bananagram टाइपिंग पर स्वचालित रूप से टैग की ऑटो समापन और कोष्ठक के लिए।

इस सूची में लगभग हर प्लगइन इस सूची में लगभग हर दूसरे प्लगइन के साथ संघर्ष करेगा।

YouCompleteMe पैक का नेता प्रतीत होता है , लेकिन मैं इसे टैग पूर्णता के साथ ठीक से काम करने में सक्षम नहीं कर पाया, और इसका कोड-आत्मनिरीक्षण पूरा होने में अभी तक शक्तिशाली साबित नहीं हुआ है।

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

एक आईडीई का नकारात्मक पहलू यह है कि आपके हाथों में अब विम की शक्ति नहीं होगी। मैंने एक एकल आईडीई का उपयोग नहीं किया है जिसमें एक स्वीकार्य विम मोड है।

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


6

यहाँ एक अच्छा है: YouCompleteMe

YouCompleteMe जो ड्रॉपडाउन मेनू को आपके टाइप करते ही दिखाई देता है, और यह फ़ज़ी सिलेक्शन का समर्थन करता है, इसलिए यदि आपके पास कोई पहचानकर्ता है partition_finderऔर आप ptfC ++ फ़ाइल को संपादित करते समय कुछ ऐसा टाइप करते हैं, तो ड्रॉपडाउन सुझाव सूची में दोनों शामिल होंगे printfऔर partition_finderक्योंकि उनके पास एक ही अक्षर हैं इसी क्रम में। यदि आपके पास एक चर है myBrain, तो आप टाइप कर सकते हैं brnऔर यह सुझाव देगा कि। YouCompleteMe पिछले उपयोग आवृत्ति के आधार पर सुझावों को भी प्राथमिकता देता है।



2

मैं neosnippet के साथ necomplecache बाहर की कोशिश कर रहा हूँ मुझे लगता है कि यह बेहतर एकीकरण होगा क्योंकि दोनों एक ही व्यक्ति द्वारा लिखे गए हैं


1

मेरा मानना ​​है कि विम का एक बिल्ट-इन ओम्नीकॉमल्ट है। डालने मोड में ctrl+x,ctrl+o

अन्यथा आप सम्मिलित मोड से कीवर्ड पूर्णता के साथ कर सकते हैं ctrl+n। जब आप इसे लागू करते हैं तो यह आपको एक ड्रॉपडाउन देगा जो आपके द्वारा संपादित की जा रही फ़ाइल में पाए गए शब्दों के संभावित मिलानों को प्रदर्शित करता है, साथ ही आपके द्वारा खोली गई अन्य फ़ाइलों से भी पाया जाता है। ctrl+nविकल्पों के माध्यम से साइकिल चलाने के लिए रखें । जब आप अपने इच्छित शब्द पर आते हैं, तो बस सामान्य की तरह लिखना जारी रखें।

यदि आप मनचाहा शब्द नहीं पाते हैं, ctrl+nतो अंततः सूची से बाहर हो जाएगा और आप टाइपिंग रख सकते हैं, या आप हिट कर सकते हैं ESCऔर फिर अपमानजनक शब्द की शुरुआत करने के bcwलिए जा सकते हैं और जो आप चाहते थे उसके लिए आर्ड को लटका सकते हैं।bcw


विम का बनाया हुआ एक चूसने लगता है। जब भी मैं <cx> <co> दबाता हूं तो यह सिर्फ "पैटर्न नहीं मिला" कहता है। हालांकि, अगर मैं <cn> दबाता हूं, तो शब्द टाइप किए जाने के ठीक नीचे एक पूर्णता दिखाई देती है। क्या यह वही चीज है? क्या बिना शार्टकट दबाए स्वत: पूर्ण ड्रॉप डाउन बनाने का कोई तरीका है?
trusktr

मुझे ऐसे प्लगइन के बारे में पता नहीं है, जो बिना किसी बातचीत के स्वत: पूर्ण पॉप बनाता है, क्षमा करें :( <c-x><c-o>केवल उन चीजों के लिए काम करता है जो विम को स्पष्ट रूप से बताया गया है कि कैसे समर्थन किया जाए। डिफ़ॉल्ट रूप से मुझे लगता है कि यह केवल कुछ छोटी चीजें कर सकता है, और सामान। सीएसएस पूरा होने की तरह, लेकिन अगर आप ग्रहण की तरह कुछ चाहते हैं, तो विम प्लग की एक जोड़ी है जो आपके लिए प्रदान करने की कोशिश करते हैं।
कॉनरैडडाइन

1
मुझे YouCompleteMe नामक vim के लिए एक प्लगइन मिला, जो ड्रॉपडाउन मेनू को आपके जैसे ही दिखाई देता है, और यह फ़ज़ी चयन का समर्थन करता है, इसलिए यदि मेरे पास कोई पहचानकर्ता है partition_finderऔर मुझे ptfC ++ फ़ाइल संपादित करते समय कुछ पसंद है , तो ड्रॉपडाउन मेनू दोनों का सुझाव देगा printfऔर partition_finderक्योंकि वे एक ही क्रम में एक ही अक्षर होते हैं। यदि मेरे पास एक चर है myBrain, तो मैं टाइप कर सकता हूं brnऔर यह दिखाई देगा। YouCompleteMe पिछले उपयोग आवृत्ति के आधार पर सुझावों को भी प्राथमिकता देता है। इसे यहां देखें: valloric.github.io/YouCompleteMe
trusktr

1

मैंने मूल AutoComplPop से एक नया प्लगइन SimpleAutoComplPop लिया है। हालांकि, मैं रूबी या स्निपमेट से परिचित नहीं हूं, आपके पास एक कोशिश हो सकती है और मुझे कुछ प्रतिक्रियाएं मिलने की खुशी है :)

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