मैं फ़ाइलों के फ़ोल्डर में फ़ंक्शन या मैक्रो कैसे चला सकता हूं?


12

मान लीजिए कि मेरे पास एक फ़ंक्शन है, जिसका नाम है StripWhitespace

मैं फ़ाइल को खोलकर और चलाकर इसे एकल फ़ाइल पर चला सकता हूं :StripWhitespace

मैं फ़ाइलों के फ़ोल्डर के खिलाफ स्वचालित रूप से उस फ़ंक्शन को कैसे चला सकता हूं, और परिणामों को सहेज सकता हूं जैसे मैं साथ जाता हूं?


3
विवरण, कृपया!
200_success

जवाबों:


10

आप -cस्टार्टअप पर कमांड चलाने के लिए तर्क का उपयोग कर सकते हैं vim(1):

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

उदाहरण:

vim -c ':call StripWhitespace()' file1 file2

बाद में छोड़ने के लिए, जोड़ें | :wqa:

vim -c ':call StripWhitespace() | :wqa' file1 file2

1
आप एक चाहते हैं: argdo, यदि आप इसे कमांडलाइन पर कुछ फाइलों के लिए चलाते हैं
क्रिश्चियन ब्रेबेंड

19

यदि आप पहले से ही विम में हैं, तो आप तर्क सूची या बफर सूची में क्रमशः प्रत्येक आइटम पर एक कमांड निष्पादित करने के लिए :argdoया :bufdoकमांड का उपयोग कर सकते हैं।

:तर्क सूची में प्रत्येक फ़ाइल पर एक कमांड चलाने के लिए:

:argdo StripWhitespace

या बफ़र सूची में हर फ़ाइल से एक समारोह आह्वान करने के लिए:

:bufdo call StripWhitespace()

या qतर्क सूची में प्रत्येक फ़ाइल पर मैक्रो चलाने के लिए:

:argdo normal @q

तब आप सभी परिवर्तित बफ़र्स को सहेज सकते हैं :wall, या सभी को बचा सकते हैं और विम को छोड़ सकते हैं :wqall

यदि आप फ़ाइलों को लिखना चाहते हैं, तो आप एक कॉल में जोड़ सकते हैं :update, जैसे:

:argdo s/foo/bar/ge | update

विभिन्न तरीकों से आप फ़ाइलों को पहले स्थान पर प्राप्त कर सकते हैं, जिनमें शामिल हैं:

  • Vim कमांड लाइन को सप्लाय पैरामीटर: vim *(यह सभी फाइलों को तर्क सूची में जोड़ता है),
  • :argsतर्क सूची को पॉप्युलेट करने के लिए कमांड (जो वाइल्डकार्ड्स और बैकटिक एक्सप्रेशन का समर्थन करता है) का उपयोग करें , या इसमें :argaddफ़ाइलों को जोड़ने के लिए कमांड,
  • बस उन सभी के साथ मैन्युअल रूप से खोलने :e, :Exया फ़ाइल को खोलने प्लगइन।

1
मुझे यह उत्तर पसंद है क्योंकि इसमें विम को छोड़ने की आवश्यकता नहीं है, जो मेरी राय में बहुत महंगा है (मेरी कीमती बफर सूची!)। मेरे पास कुछ नोट हैं: (1) लेखन के बिना बफ़र्स को छोड़ना आवश्यक 'hidden'है; (2) : updateकमांड थोड़ा सुधार है :wक्योंकि यह केवल यह लिखता है कि कोई बदलाव किया गया है :bufdo updateया नहीं , इसलिए :argdo updateसभी संशोधित बफ़र या तर्क लिखेंगे।
tommcdo

अच्छी बात है updatehiddenजब मैं उत्तर लिख रहा था, तब मैंने इसका उल्लेख किया था, लेकिन मैंने इसके खिलाफ निर्णय लिया क्योंकि मैं इसे अधूरा नहीं करना चाहता था। हालांकि प्रतिबिंब पर, यह वहाँ होना चाहिए। मैं वर्तमान में दोनों सुझावों को शामिल करने के लिए उत्तर को अपडेट करूंगा।
रिच

@tommcdo ने केवल इसके लिए दस्तावेज़ीकरण की जाँच की: दीवार, और यह केवल परिवर्तित बफ़र्स लिखता है, इसलिए: आखिरकार बफ़डो अपडेट आवश्यक नहीं है।
रिच

के बारे में अच्छी पकड़ :wall, जिसमें बफ़र्स के माध्यम से साइकिल न चलाने और आपको जहाँ से आपने शुरू किया था, उससे दूर जाने का भी फायदा है। मुझे लगता :argdo updateहै कि अभी भी एक अलग कहानी है - शायद आप बफ़र्स को लिखना नहीं चाहते जो आपकी तर्क सूची में नहीं हैं।
tommcdo

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