विम (पाठ संपादक)

विम (;Vim documentation: intro: "Vim is pronounced as one word, like Jim, not vi-ai-em.  It's written with a capital, since it's a name, again like Jim." वीआई एमप्रोवेस्ड(उन्नत) का संकुचन) एक क्लोन है, जिसमें यूनिक्स के लिए बनाये गए बिल जॉय के वीआई पाठ संपादक प्रोग्राम के अतिरिक्त, अन्य विशेषताएं शामिल हैं। विम के लेखक ब्रैम मूलेनार ने विम को स्टीवी संपादक के एक पोर्ट, अमीगा के स्रोत कोड पर आधारित किया और 1991 में जनता के लिए एक संस्करण जारी किया। विम को कमांड-लाइन इंटरफ़ेस और ग्राफिकल यूजर इंटरफेस में आत्मनिर्भर एप्लिकेशन के रूप में उपयोग करने के लिए रचा गया है। विम नि:शुल्क और ओपन-सोर्स सॉफ़्टवेयर है और एक लाइसेंस के तहत जारी किया गया है जिसमें कुछ चैरिटीवेयर क्लॉज़ शामिल हैं, जो उपयोगकर्ताओं को युगांडा में बच्चों को दान करने पर विचार करने के लिए प्रोत्साहित करते हैं। 
विम का लाइसेंस ग्नू जनरल पब्लिक लाइसेंस के साथ संगत है, एक विशेष खंड के माध्यम से संशोधित प्रतियां "ग्नू जनरल पब्लिक लाइसेंस संस्करण 2 या किसी भी बाद के संस्करण" के तहत वितरण की अनुमति देता है।

अमीगा के लिए अपनी रिहाई के बाद से, क्रॉस-प्लेटफॉर्म विकास ने इसे कई अन्य प्रणालियों पर उपलब्ध कराया है। 2006 में, लिनक्स जर्नल के पाठकों के बीच इसे सबसे लोकप्रिय संपादक के रूप में चुना गया था;; ;  2015 में स्टैक ओवरफ्लो डेवलपर सर्वेक्षण ने इसे तीसरा सबसे लोकप्रिय पाठ संपादक,  और 2019 में पांचवां सबसे लोकप्रिय विकास वातावरण माना।

 इतिहास 

विम के अग्रदूत, स्टीवी, 1987 में 'अटारी एसटी' के लिए टिम थॉम्पसन द्वारा बनाया गया था और आगे टोनी एंड्रयूज  और जी.आर. (फ्रेड) वाल्टर द्वारा विकसित किया गया था।

स्टीवी पर अपने काम के आधार पर, ब्रैम मूलनेयर ने 1988 में अमिगा कंप्यूटर के लिए विम पर काम करना शुरू किया और 1991 में पहली बार सार्वजानिक तौर से जारी किया (विम संस्करण संख्या 1.14) ।

अपनी पहली रिलीज़ के समय, "वीआईएम" नाम "वीआई इमीटेशन(नकली)" के लिए एक संक्षिप्त था, लेकिन यह 1993 में "वीआई एमप्रोवेस्ड(उन्नत)" में बदल गया।

 इंटरफेस 
thumb|right|200px|चित्रमय विम जीटीके.
alt=|left|thumb|शीर्ष पर कोड (गो), खोली गई फाइलें, रजिस्टर ("क्लिपबोर्ड प्रबंधक" और मैक्रोज़ इतिहास)
वीआई की तरह, विम का इंटरफ़ेस मेनू या आइकन पर आधारित नहीं है, बल्कि टेक्स्ट यूजर इंटरफेस में दिए गए कमांड पर आधारित है; जीयूआई मोड, जीविम, आमतौर पर उपयोग किए जाने वाले कमांड के लिए मेनू और टूलबार जोड़ता है, लेकिन पूर्ण कार्यक्षमता अभी भी अपने कमांड लाइन मोड के माध्यम से व्यक्त की जाती है। वीआई (और विस्तार द्वारा विम) एक टाइपिस्ट को अपनी उंगलियों को कीबोर्ड की होम पंक्ति पर रखने की अनुमति देता है, जो एक टच टाइपिस्ट के लिए फायदेमंद हो सकता है। .

विम में नौसिखियों के लिए एक अंतर्निहित ट्यूटोरियल है जिसे विमट्यूटोर कहा जाता है। यह आमतौर पर विम के साथ इंस्टॉल होता है, लेकिन यह एक अलग निष्पादन योग्य के रूप में मौजूद है और इसे शेल कमांड के साथ चलाया जा सकता है। विम उपयोगकर्ताओं के लिए एक उपयोगकर्ता पुस्तिका भी है जो विम की विशेषताओं और अक्सर पूछे जाने वाले प्रश्न का विवरण है। यह उपयोगकर्ता पुस्तिका विम के भीतर से पढ़ा जा सकता है, या ऑनलाइन पाया जा सकता है।Vim help files at vimhelp.org

विम में एक अंतर्निहित मदद सुविधा (उपयोग: :help कमांड) है जो उपयोगकर्ताओं को कमांड और सुविधाओं के माध्यम से खोज और नेविगेट करने की अनुमति देती है।
alt=|thumb|डिस्क पर फ़ाइलों के बिना डिस्क के अंदर (ग्रेप) खोजें, प्लगइन्स के बिना

 मोड 

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

thumb|नीचे दिए गए इतिहास को जोड़ता है: हम हर कमांड को संपादित कर सकते हैं और/या फिर इसे चला सकते हैं

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

कई प्लगइन्स उपलब्ध हैं जो विम में नई कार्यक्षमता को बढ़ाते हैं या जोड़ते हैं, जैसे लिंटर, गिट के साथ एकीकरण, सीएसएस से रंग दिखाना। इन जटिल स्क्रिप्ट्स को आमतौर पर विम की आंतरिक स्क्रिप्टिंग भाषा, विमस्क्रिप्ट (जिसे 'विम एल' के रूप में भी जाना जाता है) में लिखा जाता है, लेकिन अन्य भाषाओं में भी लिखा जा सकता है।
alt=Vim editing JavaScript, with installed plugin GitGutter: pluses at the left shows new lines (according to information from Git).|thumb| विम संपादन जावास्क्रिप्ट, स्थापित प्लगइन GitGutter के साथ: बाईं ओर प्लस नई लाइनें दिखाता है (Git से जानकारी के अनुसार)।
जटिल स्क्रिप्ट और अनुकूलन को एक साथ जोड़ने वाली परियोजनाएं हैं और इसका उद्देश्य विम को एक विशिष्ट कार्य के लिए टूल में बदलना या उसके व्यवहार में एक प्रमुख स्वाद जोड़ना है। उदाहरणों में क्रीम शामिल है, जो विम को एक क्लिक-टू-टाइप संपादक या 'विम आउटलाइनर' की तरह व्यवहार करता है, जो यूनिक्स जैसी प्रणालियों के उपयोगकर्ताओं के लिए एक आरामदायक आउटलाइनर प्रदान करता है।

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

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

विम स्क्रिप्ट फ़ाइलों को सादे पाठ के रूप में संग्रहीत किया जाता है, अन्य कोड के समान, और फ़ाइल नाम एक्सटेंशन आमतौर पर है .vim। इसका एक उल्लेखनीय अपवाद विम फ़ाइल का कॉन्फिग है, .vimrc।

 उदाहरण 
" यह विम स्क्रिप्ट में एक सरल प्रोग्राम है
echo "Hello, world!"

" यह विम स्क्रिप्ट में एक सरल लूप है
let i = 1
while i < 5
  echo "count is" i
  let i += 1
endwhile
unlet i

 उपलब्धता 

जबकि वीआई मूल रूप से केवल यूनिक्स ऑपरेटिंग सिस्टम पर उपलब्ध था, Vim को AmigaOS (प्रारंभिक लक्ष्य प्लेटफॉर्म), MiNT, BeOS, डॉस, विंडोज़ एन.टी., OS/2, OS/390, MorphOS, OpenVMS, QNX, RISC OS, लिनक्स, BSD, Classic Mac OS":help sys-file-list" से शुरू होने वाले कई प्रचालन तंत्र में पोर्ट किया गया है।
इसके अलावा, विम को Apple macOS की हर कॉपी के साथ शिप किया जाता है।

विम के स्वतंत्र पोर्ट एंड्रॉइड और आईओएस दोनों के लिए उपलब्ध हैं।

 संदर्भ