2008-11-01 16 views
9

में सामान्य कार्य स्क्रिप्टिंग विम (घर और काम पर) का उपयोग करते समय, मैं अक्सर बार-बार इसी तरह की चीजें करता हूं। उदाहरण के लिए, मैं एसएसवी पाठ का एक गुच्छा एसक्यूएल आवेषण की श्रृंखला में बदल सकता हूं। मैं वर्षों से विम का उपयोग कर रहा हूं, लेकिन हाल ही में मैंने गंभीरता से यह सोचने की कोशिश की है कि मैं इसका उपयोग करते समय अपनी उत्पादकता में सुधार कैसे कर सकता हूं।विम

मेरा प्रश्न है .. क्या आमतौर पर प्रयुक्त आदेश या कमांड अनुक्रमों को स्टोर करने के लिए कोई अच्छा तरीका (या सही तरीका) है? और उन्हें निष्पादित करने का सबसे अच्छा तरीका कैसा है? लाइव सत्र पर एक ही स्क्रिप्ट का उपयोग करने और कुछ फ़ाइल के विरुद्ध कमांड लाइन पर भी सक्षम होना अच्छा होगा।

मुझे उम्मीद है कि मैं उन्हें एक .vim फ़ाइल में संग्रहीत कर सकता हूं ताकि मैं उन्हें उपयोग करने के लिए सहकर्मियों (जो विम के साथ कुशल नहीं हैं) को सौंप सकूं।

उत्तर

13

उदाहरण के लिए आप this की तरह, .vim फ़ाइलों में अपने सामान्य कार्य मैक्रो स्टोर कर सकते हैं, और फिर आप उन्हें आदेश साथ लोड कर सकते हैं: तो file.vim

Here आप उपयोगी मैक्रो की एक गुच्छा पा सकते हैं , भी मैं क्ष रजिस्टर में आप अच्छी तरह से जानने के लिए उपयोगी क्षmacro recording आदेश की सलाह देते हैं, यह बहुत बहुत शक्तिशाली है ...

क्ष आदेश के साथ बनाया मैक्रो एक रजिस्टर में जमा हो जाती, qq भंडार मैक्रो , तो जब आप टी समाप्त करते हैं वह रिकॉर्डिंग आप "qp के साथ मैक्रो पेस्ट कर सकते हैं और इसे सहेज सकते हैं, बाद में आप इसे मैक्रो को एक रजिस्टर में यंक कर सकते हैं यानी: " qY, मैक्रोज़ केवल टेक्स्ट हैं और याद रखें कि आप किसी भी रजिस्टर का उपयोग कर सकते हैं क्यू के बजाय। वहाँ क्ष मैक्रो के भंडारण के लिए एक विम स्क्रिप्ट है:

marvim : Macro Persistent Storage and Shareable Repository for VIM

इसके अलावा Vim Scripting Language को एक बार देख ले।

+0

इसका उत्तर आपके किसी एक लिंक में दिया जा सकता है, लेकिन क्या एक बार रिकॉर्ड किए जाने पर qq मैक्रोज़ संग्रहीत किए जा सकते हैं? मैंने हमेशा उनका इस्तेमाल किया है, लेकिन मुझे नहीं पता था कि वे सत्रों में बने रह सकते हैं या नहीं। –

+0

q कमांड के साथ बनाए गए मैक्रोज़ को एक रजिस्टर में संग्रहीत किया जाता है, qq q रजिस्टर में मैक्रो स्टोर करता है, इसलिए जब आप रिकॉर्डिंग समाप्त करते हैं तो आप "क्यूपी" को सहेजकर इसे मैक्रो पेस्ट कर सकते हैं, बाद में आप इसे आसानी से लोड कर सकते हैं मैक्रो टेक्स्ट को yanking, "qY याद है कि आप q के बजाय किसी भी रजिस्टर का उपयोग कर सकते हैं ... – CMS

2

आप अपने .vimrc में कमांड अनुक्रमों को स्टोर कर सकते हैं और उन्हें :map कमांड के साथ एक बाध्यकारी असाइन कर सकते हैं। उदाहरण के लिए:

echo >>~/.vimrc ":map ,c :%s/,/','/g<CR>:%s/^/('/g<CR>:%s/$/'),/g<CR>" 

जब दबाने ",c" एक जीवित सत्र में इस अपनी CSV एक सम्मिलित बयान के एक हिस्से में दाखिल परिवर्तित कर देंगे।

कमांड लाइन है कि संपादन के बहुत ही टुकड़े के माध्यम से एक फाइल करने के लिए लागू किया जा सकता है (यह, ऊपर लिख देगा पहले बैकअप के लिए सुनिश्चित हो) पर:

vim file.txt -c ':normal ,c | :x' 

एक बेहतर तरीका हो सकती है, लेकिन यह काम करता है।

1

व्यक्तिगत रूप से, और शायद कुछ हद तक क्योंकि मैं विम अस्तित्व से पहले यूनिक्स का उपयोग कर रहा था (हेक, यूनिक्स I का पहला संस्करण "vi" नहीं था - लेकिन यह एक और कहानी है), मैं आमतौर पर ' शेल स्क्रिप्ट '(या, अधिक संभावना है, एक पर्ल स्क्रिप्ट) परिवर्तन करने के लिए। सीएसवी डेटा को आईएनएसईआरटी में परिवर्तित करने के लिए, पूर्ण सामान्यता में उद्धरण/गैर-उद्धरण और एम्बेडेड कॉमा से निपटना गन्दा है - मैं शायद सही पार्सिंग की गारंटी के लिए टेक्स्ट :: CSV_XS के साथ एक पर्ल स्क्रिप्ट का उपयोग करना चाहता हूं। मैं उस पाठ को उस पाठ की सीमा पर चलाऊंगा जिसे बदलने की आवश्यकता है।

इसका एक लाभ केंद्रित टूल दृष्टिकोण है - एक उपकरण एक नौकरी सही करता है। मेरी निजी बिन निर्देशिका में इसमें 300 या अधिक स्क्रिप्ट और प्रोग्राम हैं; आरसीएस निर्देशिका में 500 से अधिक स्क्रिप्ट हैं।

यह कहना नहीं है कि विम में स्क्रिप्टिंग खराब है। मैं जटिल मैनिप्ल्यूशन लिखने के लिए (अधिक या कम) जटिल नक्शा कमांड का उपयोग करता हूं, अक्सर जब मुझे फ़ाइलों के सूट में एक ही बदलाव करना होता है, और जब मुझे नहीं लगता कि यह एक स्क्रिप्ट बनाने के लायक होगा काम। हालांकि, अगर मुझे लगता है कि मुझे एक से अधिक बार परिवर्तन की आवश्यकता हो सकती है, तो मैं इसे स्क्रिप्ट करूंगा। उदाहरण के लिए, जीसीसी ने ऑब्जेक्ट फाइलों में अप्रयुक्त स्थिर तारों को एम्बेड न करने के बारे में अपरिपक्वता (लगभग 2005) प्राप्त करना शुरू किया - जिसका मतलब था कि मेरी संस्करण नियंत्रण जानकारी दिखाई नहीं दे रही थी। इसलिए, वर्षों की अवधि में, जैसे ही मैं स्रोत फ़ाइलों को संपादित करता हूं, मैंने एक स्थिर (निश्चित) नाम से सार्वजनिक नाम में बदल दिया है - अनिच्छा से, लेकिन जरूरी AFAIAC। मेरे पास एक स्क्रिप्ट है जो मेरे लिए संपादित करती है, इसलिए जब मुझे किसी फ़ाइल में परिवर्तन करने की आवश्यकता होती है, तो मैं ऐसा करने के लिए उस स्क्रिप्ट को चलाता हूं। मेरे पास एक और स्क्रिप्ट है जो कॉपीराइट जानकारी अपडेट करती है; मुझे हर बार पहली बार किसी दिए गए वर्ष में एक फ़ाइल को संशोधित करने की आवश्यकता है। हाँ, मैं शायद इसे विम में कुछ के रूप में दूर कर सकता हूं - मैं सोच रहा था कि अलग लिपि बेहतर है, कम से कम नहीं क्योंकि अगर मैं किसी अन्य संपादक पर स्विच करता हूं, तो भी मैं स्क्रिप्ट का उपयोग कर सकता हूं।

+1

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

3

मैं q/@ का उपयोग अक्सर मैक्रो को रिकॉर्ड/रीप्ले करने के लिए करता हूं।

अगला चरण 3 या कम पूर्व आदेशों जैसे कुछ लिखने की कोशिश कर रहा है।

यदि कुछ इतना जटिल है कि न तो मैक्रो और न ही एक छोटा पूर्व अनुक्रम पर्याप्त नहीं होगा, तो मैं इसे इसके बजाय एक पर्ल स्क्रिप्ट के रूप में लिखता हूं। विम स्क्रिप्ट भाषा मेरे स्वाद के लिए, भव्य चीजों को करने की कोशिश करने के लिए बहुत सीमित है। (हालांकि विम 7 ने पाइथन से चीजों का एक गुच्छा उधार लेते हुए उस सम्मान में बहुत बढ़िया कदम उठाए हैं।)

ध्यान दें कि @ कुछ बहुत आसान करता है: यह एक रजिस्टर की सामग्री लेता है और उन्हें दोहराता है जैसे आपने उन्हें टाइप किया था सामान्य मोड में। इसी तरह q बस आपके द्वारा नामित रजिस्टर में टाइप किए गए अनुक्रम को रिकॉर्ड करता है। ये स्वयं-वही रजिस्ट्रार हैं जिनका उपयोग आप यांकिंग/डालने के लिए करते हैं - जिसका अर्थ है कि आप सीधे एक फ़ाइल (.vimrc किसी को भी) में रिकॉर्ड किए गए अनुक्रम को पेस्ट कर सकते हैं या फ़ाइल से कमांड का अनुक्रम जोड़ सकते हैं और इसे फिर से चला सकते हैं (ताकि आप इसे रख सकें ~/my-vim-macros.txt या कुछ में उनमें से एक गुच्छा)।