ट्यूटोरियल कहा गया है कि पूर्व मोड बैच प्रोसेसिंग के लिए है। चूँकि यह एक उपद्रव है, एक उपकरण के बजाय, मेरे लिए, मैं कुछ व्यावहारिक उदाहरण देखना चाहूंगा। इसका उपयोग कौन करता है? क्यों?
बैच प्रसंस्करण के लिए EX-mode क्या है?
ट्यूटोरियल कहा गया है कि पूर्व मोड बैच प्रोसेसिंग के लिए है। चूँकि यह एक उपद्रव है, एक उपकरण के बजाय, मेरे लिए, मैं कुछ व्यावहारिक उदाहरण देखना चाहूंगा। इसका उपयोग कौन करता है? क्यों?
बैच प्रसंस्करण के लिए EX-mode क्या है?
जवाबों:
पूर्व मोड में विम (जिसे भी जाना जाता है ex
) उपयोगी है जब:
फ़ाइलों को संपादित करना गैर-सहभागी है सबसे आम उपयोग और के रूप में समान तरीके से यह उपयोग करने वाले लोगों sed
और awk
, लेकिन वे कर रहे हैं और अधिक उन्मुख स्ट्रीम कर रहे हैं - वे केवल जबकि समाप्त करने के लिए शुरू से आगे फ़ाइल को पढ़ने vim
है उन्मुख बफर - आप आगे और पीछे ले सकते हैं फ़ाइल में जैसा आप चाहते हैं। दूसरी बात यह है कि वीम की रेग्युलर एक्सप्रेशन्स awk और sed के एक्सप्रेशंस की तुलना में अधिक शक्तिशाली हैं (वे कई लाइनों के साथ काम करने के लिए तैयार नहीं हैं) - उदाहरण के लिए विम कई लाइनों पर मेल कर सकता है और शून्य मैचों का समर्थन करता है।
Ex भी एक संपादक है (vi का प्रत्यक्ष पूर्ववर्ती) और Vim में - Ex Mode का अनुकरण होता है ex
(वे अभी भी समान कोड चलाते हैं), इसलिए ex
vi और इसके विपरीत के कमांड मोड से प्राप्त करना संभव है । एक्स मोड ( vim -e
) और बेहतर एक्स मोड है जो vi संगत एक्स-मोड ( vim -E
) से अधिक उन्नत कमांड के लिए अनुमति देता है । देखें: एक्स मोड और बेहतर एक्स मोड के बीच क्या अंतर है?
पूर्व संपादकों के एक परिवार की जड़ है: संपादित करें, पूर्व और vi। एक्स एड का एक सुपर सेट है, जिसमें सबसे उल्लेखनीय विस्तार एक प्रदर्शन संपादन सुविधा है। पूर्व (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
कुछ कार्यों को करने के लिए आप विम प्लग का भी उपयोग कर सकते हैं।
उदाहरण के लिए निम्न एक-लाइनर मानक प्लगइन्स में से एक का उपयोग करके अपनी स्रोत कोड फ़ाइल को html में बदल देगा:
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
यह आपके कोड (किसी समर्थित भाषा में लिखी गई) से html फ़ाइल (सिंटैक्स हाइलाइटिंग के साथ) उत्पन्न करेगा जो मुद्रण के लिए या आपकी वेबसाइट पर प्रकाशित होने के लिए तैयार है।
या 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
निम्न स्क्रिप्ट उदाहरण साइट के 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
स्क्रिप्ट को एक्शन में देखने के लिए जोड़ें ।
और ज्यादा उदाहरण:
यह सभी देखें:
एक्स-मोड ज्यादातर एक ही कार्रवाई को कई फाइलों पर करने के लिए है।
कहते हैं कि आपके पास 25 .html फाइलें हैं:
<a href="/superuser//home.html"> ...
उनमें से हर एक को खोलने के बजाय, आप पूर्व-मोड का उपयोग करके इसे बदल सकते हैं index.html
:
vim -E -s bob.html <<-EOF
:%substitute/home.html/index.html/
:update
:quit
EOF
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
।
हाल ही में 7.3 के रूप में जो लगातार पूर्ववत समर्थन के रूप में, पूर्व मोड और vim बैच प्रसंस्करण के अन्य रूपों अन्य गैर-विम तरीकों से बेहतर है, क्योंकि यह पूर्ववत इतिहास को बंद नहीं करेगा।
जोड़ने: 'लगातार पूर्ववत करें' यदि सक्षम किया गया है, तो पूर्ववत इतिहास में, संपादन संपादन सत्रों में एक फ़ाइल (एक सीमा तक) के सभी परिवर्तनों को रखता है। यदि फ़ाइल को किसी बाहरी प्रोग्राम द्वारा संपादित किया जाता है, तो चेक द्वारा पता लगाने पर विम इतिहास को रीसेट कर देगा कि यह बदल गया है। vim -E आपको एक फ़ाइल को बैच-एडिट करने की अनुमति देगा और संपादन पूर्ववत इतिहास में होगा।
यह बैच प्रोसेसिंग के बारे में आपके प्रश्न का उत्तर नहीं देता है, लेकिन एक्स-मोड क्या है, यह समझाने का एक और तरीका है। आप जानते हैं कि आप कैसे दबाते हैं:
कमांड-लाइन मोड में जाने और कमांड दर्ज करने के लिए? अच्छी तरह से पूर्व मोड भी आपको एक ही कमांड दर्ज करने की सुविधा देता है, सिवाय इसके कि आप एक कमांड दर्ज करने के बाद विम को नहीं छोड़ते हैं, यह एक्स मोड में रहता है और आप दूसरी कमांड दर्ज कर सकते हैं। तो यह एक आरईपीएल (पढ़ें, मूल्यांकन, प्रिंट, लूप) की तरह है, लेकिन प्रिंट के बिना (इसलिए सिर्फ एक आरईएल ...)। मुझे लगता है कि आप इस तरह के REL बाद में क्यों चाहते हैं। इसीलिए इसे एक्स मोड कहा जाता है, यह आपको एक्स कमांड को दर्ज करने देता है, जो कि कमांड-लाइन मोड भी यही काम करता है, यह आपको एक्स कमांड में प्रवेश करने देता है। इसे समझाने का दूसरा तरीका यह है कि यह आपको प्रवेश करने देता है और तुरंत Vimscript / VimL कोड निष्पादित करता है। Vimscript / VimL एक ऐसी भाषा है जिसका उपयोग आप Vim plugins को लिखने के लिए कर सकते हैं। यह वह भाषा भी है जिसका उपयोग आप अपने कॉन्फ़िग (proably .vimrc) फ़ाइल में लिखने के लिए करते हैं। यह वह भाषा भी है जिसका उपयोग आप कमांड लाइन मोड या एक्स-मोड से एक्स कमांड दर्ज करते समय करते हैं। तो उस दृष्टिकोण से, एक्स-मोड को विम आरईएल के रूप में देखा जा सकता है। आप एक विम REL क्यों चाहते हैं? उसी कारण से लोग अन्य भाषाओं के लिए REPLs पसंद करते हैं। वे कोड को डीबग करने या भाषा के साथ प्रयोग करने के लिए वास्तव में सहायक हो सकते हैं, यह देखने के लिए कि चीजें कैसे काम करती हैं, खासकर यदि आप विम्ल में प्लगइन्स लिख रहे हैं या अपनी कॉन्फ़िगरेशन फ़ाइल को अत्यधिक कस्टमाइज़ कर रहे हैं (जिसका अर्थ होगा कि आप एसआरपी प्रिंसिपल का उल्लंघन कर रहे हैं और इसे तोड़ देना चाहिए प्लग-इन)।
:!python