यह एक पुराना सवाल है, लेकिन मैं इसे हर बार फिर से वापस आने की उम्मीद के साथ देखता रहता हूं, यह सोचकर कि एक दिन मुझे विम में सही ऑटोकंप्लीशन देने के लिए प्लगइन्स का सही संयोजन मिलेगा। खोज जारी है, लेकिन यह सभी अनुसंधान है जो मैंने कई वर्षों में किया है।
सबसे पहले, आपको समझना चाहिए कि विम एक पाठ संपादक है, न कि एक कोड संपादक। कोड एडिटर, 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 पैक का नेता प्रतीत होता है , लेकिन मैं इसे टैग पूर्णता के साथ ठीक से काम करने में सक्षम नहीं कर पाया, और इसका कोड-आत्मनिरीक्षण पूरा होने में अभी तक शक्तिशाली साबित नहीं हुआ है।
मेरी निजी राय है कि विम ऑटोकंप्लीमेंट दुनिया की वर्तमान स्थिति खराब है। छोटी परियोजनाओं के लिए आप उपरोक्त समाधानों में से एक का उपयोग करके ठीक हो सकते हैं। यदि आप एक साधारण एपीआई के साथ काम कर रहे हैं, तो आप ज्यादातर अपने सिर में रख सकते हैं, गैर-कोड-आत्मनिरीक्षण पूरा करना संभवतः ठीक होगा। यदि आप एक बड़ी परियोजना के साथ काम कर रहे हैं, या प्रोग्रामिंग करते समय प्रकार की सुरक्षा के लाभ की आवश्यकता है, तो एक पूर्ण आईडीई ( एक्लिप्स , विजुअल स्टूडियो , वेबस्टॉर्म ) आपको विम की तुलना में बहुत बेहतर सूट करने वाला है।
एक आईडीई का नकारात्मक पहलू यह है कि आपके हाथों में अब विम की शक्ति नहीं होगी। मैंने एक एकल आईडीई का उपयोग नहीं किया है जिसमें एक स्वीकार्य विम मोड है।
विम के पास अप्रकाशित सी-लाइक भाषाओं के प्रति एक मध्यम भाषा पूर्वाग्रह है, और अन्यथा यह अपेक्षा है कि किसी भी भाषा विशिष्ट सुविधाओं को प्लगइन्स के रूप में उपयोगकर्ताओं द्वारा जोड़ा जाएगा। दुर्भाग्यवश, इससे स्प्लिटेड ऑटोकंप्लीमेंट इकोसिस्टम पैदा हो गया। कुछ विकल्प सभ्य हैं, लेकिन कुछ भी सही नहीं है, और शायद ही कभी एक बहुसंख्यक नेता / सर्वोत्तम प्रथा है।
let g:acp_behaviorSnipmateLength=-1
देखें:help autocomplpop
) आप अपने .vimrc में जोड़ने वाले हैं, क्या आपने इसे जोड़ा है?