2010-07-10 10 views
33

मेरे पास एक फ़ोल्डर है जिसमें सैकड़ों टीटीएल (TeraTermLanguage) फ़ाइलें हैं। अब मैं इन सभी फ़ाइलों को इंडेंट करना चाहता था।फ़ोल्डर में सभी फ़ाइलों के साथ VIM में इंडेंटिंग

मैंने इंडेंटेशन के लिए teraterm.vim बनाया है और मैं वीआईएम का उपयोग करके एक फ़ाइल खोलता हूं और "gg = g" करता हूं और पूरी फ़ाइल ठीक से इंडेंट हो जाती है।

लेकिन क्या कोई तरीका है, जहां मैं फ़ोल्डर में सभी फाइलों को इंडेंट कर सकता हूं।

मैं शैल की मदद से करना चाहता था। लेकिन वीआईएम में मैं वीआईएम के तर्क के रूप में फ़ाइल इंडेंट कमांड पास नहीं कर सका।

कृपया सुझाव दें कि मैं वीआईएम में सभी फ़ाइलों के लिए इंडेंटेशन का सबसे अच्छा तरीका कौन सा कर सकता हूं।

+0

यह थोड़ा उलझन में है ... आप किस शैल का उपयोग कर रहे हैं? यदि आप बैश (और नीचे amphetamachine से उत्तर का उपयोग कर) का उपयोग कर रहे हैं, तो निम्न कार्य करना चाहिए: * .ttl * TTL में फ़ाइल के लिए; vim -s indentme.src $ फ़ाइल करें; किया – skeept

उत्तर

57

बैश कमांड लाइन से स्क्रिप्टिंग विम से बहुत आसान है vim के अंदर से विस्क्रिप्ट का उपयोग करना है (या शायद कमांड लाइन से स्क्रिप्टिंग vim के लिए एक बहुत आसान एक-लाइनर)। मैं व्यक्तिगत रूप से सभी बहु-फ़ाइल मैनिपुलेशन के लिए तर्क सूची का उपयोग करना पसंद करता हूं। उदाहरण के लिए:

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update 
  • args arglist सेट, वाइल्डकार्ड का उपयोग रन
  • | हमें एक पंक्ति
  • argdo पर कई आदेशों को चलाने की सुविधा देता है (** वर्तमान निर्देशिका के साथ ही उप निर्देशिकाओं से मेल खाएगी) निम्नलिखित प्रत्येक तर्क पर आदेश (यह दूसरे | निगल जाएगा)
  • execute अगले पाइप को निगलने से normal को रोकता है।
  • normal निम्नलिखित सामान्य मोड आदेशों रन (आप पहली जगह में साथ क्या काम कर रहे थे)
  • update:w की तरह है, लेकिन केवल बचत होती है जब बफर संशोधित किया गया है।

यह :args ... | argdo ... | update पैटर्न (जैसे खोज और %s/foo/bar/ge या वर्दी fileformat स्थापित करने या fileencoding के माध्यम से प्रतिस्थापित करें) परियोजना विस्तृत फ़ाइल हेरफेर के किसी भी प्रकार के लिए बहुत उपयोगी है।

(अन्य लोगों को एक समान पैटर्न बफर सूची और :bufdo का उपयोग कर पसंद करते हैं, लेकिन आर्ग की सूची के साथ मैं वर्तमान बफ़र्स या खोलने नई vim सत्र को समाप्त करने के बारे में चिंता करने की जरूरत नहीं है।)

+0

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

+5

यदि यह आपके रास्ते में हो रहा है, तो आप "- more--" प्रॉम्प्ट से बचने और 'स्क्रीन' के उदार एप्लिकेशन द्वारा हर स्क्रीन को स्थान पर रखने में सक्षम होना चाहिए। जैसे ': argdo चुप निष्पादन" सामान्य जीजी = जी "| मूक अपडेट ' –

+1

+1 और @ निकोलसा.विंस मैं उस टिप्पणी की सामग्री को वास्तविक उत्तर में ले जाउंगा/लेकिन यह केवल मुझे है) – CoatedMoose

11

टर्मिनल खोलें। प्रकार:

$ vim -w indentme.scr foo.c 

फिर, प्रकार वास्तव में यह (आदेश में मोड):

gg=G:wq 

यह vim बंद हो जाएगा indentme.scr नामक एक Vim स्क्रिप्ट को फ़ाइल में सभी लाइनों को इंडेंट करने की प्रक्रिया की बचत।

नोट:indentme.scr टाइप किया सभी मुख्य आदेश के रिकार्ड में शामिल होंगे, इसलिए जब आप फ़ाइल को इंडेंट किया जाता है, फ़ाइल आसपास देखने के लिए तीर कुंजियों का उपयोग समय की एक बहुत खर्च करते हैं नहीं है, क्योंकि इस का नेतृत्व करेंगे एक बहुत बड़ी लिपि के लिए और बैच ऑपरेशंस को गंभीर रूप से धीमा कर देगा।

अब, क्रम, फ़ाइल के सभी लाइनों इंडेंट करने के लिए बस के लिए निम्न आदेश टाइप में:

$ vim -s indentme.scr unindented-file.c 

विम खुले बंद फ्लैश होगा (यदि आप एक तेजी से कंप्यूटर पर हैं, और एक विशाल संपादन नहीं फ़ाइल), सभी लाइनों को इंडेंट करना, फिर फ़ाइल को जगह में सेव करना।

दुर्भाग्य से, यह एक बार में केवल एक फाइल पर काम करेंगे, लेकिन आप आसानी से कार्यक्षमता का उपयोग कर sh के for पाश पैमाने पर कर सकते हैं:

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

नोट: यह बचाने से अधिक किसी भी फाइल होगा। जब तक set bk आपके ~/.vimrc में है, तो बैकअप को सहेजने की अपेक्षा न करें।

2

मैं के बंद हो गई amphetamachine का समाधान। हालांकि, मुझे कई निर्देशिकाओं के माध्यम से रिकर्सिव खोजना होगा। यहां समाधान का उपयोग किया गया है:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \; 
0

उपर्युक्त उत्तरों से संदर्भ लेना मैं इसे पूरा करना चाहता हूं। मैं खरोंच से शुरू करूंगा ताकि एक शुरुआती समझ सके।

चरण -1 निम्न आदेश एक टर्मिनल खोलें का उपयोग करके astyle (स्वरूपण के लिए इस्तेमाल किया उपकरण) स्थापित करें। प्रकार:

sudo apt-get install astyle 

चरण -2 सुनिश्चित करें कि आप vim अपने system.Run पर स्थापित किया है निर्देशिका से नीचे दिए गए आदेशों जिसमें अपने कोड फ़ाइलों आदेश नीचे are.The एक स्क्रिप्ट है कि हम चलाना चाहते हैं पैदा करेगा रिकर्सिवली इतनी के रूप में हमारी निर्देशिका में प्रत्येक और हर फ़ाइल सुशोभित करने के लिए। (जैसा कि ऊपर जवाब में बताया गया)

vim -w indentme.scr foo.c 

चरण -3 फिर, इस टाइप वास्तव में (आदेश मोड में) और enter

:%!astyle 

चरण -4 फिर इस वास्तव में टाइप करें और प्रेस (आदेश मोड में)

:wq 

चरण -5 अंतिम रन इस रिकर्सिवली निम्न आदेश से दर्ज करें:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

आपकी सभी सीपीपी फाइलों को ठीक से स्वरूपित किया जाएगा।

संबंधित मुद्दे