बैच प्रसंस्करण के लिए EX-mode क्या है?


20

ट्यूटोरियल कहा गया है कि पूर्व मोड बैच प्रोसेसिंग के लिए है। चूँकि यह एक उपद्रव है, एक उपकरण के बजाय, मेरे लिए, मैं कुछ व्यावहारिक उदाहरण देखना चाहूंगा। इसका उपयोग कौन करता है? क्यों?

बैच प्रसंस्करण के लिए EX-mode क्या है?


@ मासी: अपने खातों को लिंक करें ताकि माइग्रेट किए गए पोस्ट माइग्रेशन के बाद आपके SU खाते से संबद्ध हो जाएं।
ग्रेग हेविगेल

जवाबों:


4

पूर्व मोड में विम (जिसे भी जाना जाता है ex) उपयोगी है जब:

  • आपको गैर-अंतःक्रियात्मक (स्क्रिप्ट के भाग के रूप में) फ़ाइलों (एकाधिक) के संपादन की आवश्यकता है।
  • आपका कनेक्शन बहुत धीमा है या स्क्रीन आपके कार्यों के बाद अपडेट नहीं की गई है।
  • मैपिंग और संक्षिप्तियाँ अक्षम हैं।
  • सामान्य कुंजी जैसे कि Escapeया Controlठीक से काम नहीं करती है।

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

Ex भी एक संपादक है (vi का प्रत्यक्ष पूर्ववर्ती) और Vim में - Ex Mode का अनुकरण होता है ex(वे अभी भी समान कोड चलाते हैं), इसलिए exvi और इसके विपरीत के कमांड मोड से प्राप्त करना संभव है । एक्स मोड ( vim -e) और बेहतर एक्स मोड है जो vi संगत एक्स-मोड ( vim -E) से अधिक उन्नत कमांड के लिए अनुमति देता है । देखें: एक्स मोड और बेहतर एक्स मोड के बीच क्या अंतर है?

पूर्व संपादकों के एक परिवार की जड़ है: संपादित करें, पूर्व और vi। एक्स एड का एक सुपर सेट है, जिसमें सबसे उल्लेखनीय विस्तार एक प्रदर्शन संपादन सुविधा है। पूर्व (1)


उदाहरण 1

यहां आपकी फ़ाइल 127को बदलने और आउटपुट प्रिंट करने 128का सरल उदाहरण है hosts:

ex -s +%s/127/128/g +%p +q! /etc/hosts

के बराबर है:

sed s/127/128/g /etc/hosts

अधिक उन्नत समाधान के लिए, आपके पास vim कमांड के साथ फाइल हो सकती है और इसे I / O पुनर्निर्देशन के लिए अधिक क्लासिक दृष्टिकोण द्वारा उपयोग किया जा सकता है:

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

उदाहरण 2

कुछ कार्यों को करने के लिए आप विम प्लग का भी उपयोग कर सकते हैं।

उदाहरण के लिए निम्न एक-लाइनर मानक प्लगइन्स में से एक का उपयोग करके अपनी स्रोत कोड फ़ाइल को html में बदल देगा:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

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


उदाहरण 3

या RPM विनिर्देश से कुछ वास्तविक लाइव उदाहरण :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

उदाहरण 4

निम्न स्क्रिप्ट उदाहरण साइट के HTML को डाउनलोड करके एक नई HTML फ़ाइल बनाएगी और उसके शरीर को ऑटो-जेनरेट किए गए 20x20 टेबल द्वारा यादृच्छिक संख्याओं के साथ प्रतिस्थापित करेगी:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

उपयोग:

ex -s table.html < table.vim

यह कर्ल के साथ सिस्टम की तरह * निक्स पर काम करेगा। -Vस्क्रिप्ट को एक्शन में देखने के लिए जोड़ें ।

और ज्यादा उदाहरण:


यह सभी देखें:


22

एक्स-मोड ज्यादातर एक ही कार्रवाई को कई फाइलों पर करने के लिए है।

कहते हैं कि आपके पास 25 .html फाइलें हैं:

<a href="/superuser//home.html"> ...

उनमें से हर एक को खोलने के बजाय, आप पूर्व-मोड का उपयोग करके इसे बदल सकते हैं index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
एक पूर्ण और अधिक कविता - कार्यान्वयन होगा for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
intuited

6

हाल ही में 7.3 के रूप में जो लगातार पूर्ववत समर्थन के रूप में, पूर्व मोड और vim बैच प्रसंस्करण के अन्य रूपों अन्य गैर-विम तरीकों से बेहतर है, क्योंकि यह पूर्ववत इतिहास को बंद नहीं करेगा।

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


2
यह काफी दूर की कौड़ी लगती है, लेकिन यह सुनिश्चित करने के लिए उचित और चतुर है! +1
टार्च जूल

1

यह बैच प्रोसेसिंग के बारे में आपके प्रश्न का उत्तर नहीं देता है, लेकिन एक्स-मोड क्या है, यह समझाने का एक और तरीका है। आप जानते हैं कि आप कैसे दबाते हैं:कमांड-लाइन मोड में जाने और कमांड दर्ज करने के लिए? अच्छी तरह से पूर्व मोड भी आपको एक ही कमांड दर्ज करने की सुविधा देता है, सिवाय इसके कि आप एक कमांड दर्ज करने के बाद विम को नहीं छोड़ते हैं, यह एक्स मोड में रहता है और आप दूसरी कमांड दर्ज कर सकते हैं। तो यह एक आरईपीएल (पढ़ें, मूल्यांकन, प्रिंट, लूप) की तरह है, लेकिन प्रिंट के बिना (इसलिए सिर्फ एक आरईएल ...)। मुझे लगता है कि आप इस तरह के REL बाद में क्यों चाहते हैं। इसीलिए इसे एक्स मोड कहा जाता है, यह आपको एक्स कमांड को दर्ज करने देता है, जो कि कमांड-लाइन मोड भी यही काम करता है, यह आपको एक्स कमांड में प्रवेश करने देता है। इसे समझाने का दूसरा तरीका यह है कि यह आपको प्रवेश करने देता है और तुरंत Vimscript / VimL कोड निष्पादित करता है। Vimscript / VimL एक ऐसी भाषा है जिसका उपयोग आप Vim plugins को लिखने के लिए कर सकते हैं। यह वह भाषा भी है जिसका उपयोग आप अपने कॉन्फ़िग (proably .vimrc) फ़ाइल में लिखने के लिए करते हैं। यह वह भाषा भी है जिसका उपयोग आप कमांड लाइन मोड या एक्स-मोड से एक्स कमांड दर्ज करते समय करते हैं। तो उस दृष्टिकोण से, एक्स-मोड को विम आरईएल के रूप में देखा जा सकता है। आप एक विम REL क्यों चाहते हैं? उसी कारण से लोग अन्य भाषाओं के लिए REPLs पसंद करते हैं। वे कोड को डीबग करने या भाषा के साथ प्रयोग करने के लिए वास्तव में सहायक हो सकते हैं, यह देखने के लिए कि चीजें कैसे काम करती हैं, खासकर यदि आप विम्ल में प्लगइन्स लिख रहे हैं या अपनी कॉन्फ़िगरेशन फ़ाइल को अत्यधिक कस्टमाइज़ कर रहे हैं (जिसका अर्थ होगा कि आप एसआरपी प्रिंसिपल का उल्लंघन कर रहे हैं और इसे तोड़ देना चाहिए प्लग-इन)।


एक्स-मोड की उपयोगिता दिखाने के लिए वीडियो के रूप में कुछ उदाहरण प्राप्त करना बहुत अच्छा होगा। मुझे इसका एहसास कभी नहीं हुआ क्योंकि मैं लिनक्स विंडो मैनेजर और वीआईएम के विजुअल मोड का उपयोग कर सकता हूं:!python
Léo Léopold Hertz ert
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.