मैंने vi को विकल्प सेट करने के लिए इस आदेश का उपयोग करते हुए कई डेवलपर्स को देखा है। मुझे इसका वास्तविक उपयोग कभी समझ में नहीं आया?
बैश कमांड का उपयोग करते समय, vi को स्विच करने में क्या मदद मिलती है?
मैंने vi को विकल्प सेट करने के लिए इस आदेश का उपयोग करते हुए कई डेवलपर्स को देखा है। मुझे इसका वास्तविक उपयोग कभी समझ में नहीं आया?
बैश कमांड का उपयोग करते समय, vi को स्विच करने में क्या मदद मिलती है?
जवाबों:
या तो emacs (डिफ़ॉल्ट) या vi ( set -o vi
) के लिए अपनी रीडलाइन संपादन सेट करके, आप अनिवार्य रूप से शेल और पसंद 1 के संपादक के पार अपने संपादन आदेशों का मानकीकरण कर रहे हैं ।
इस प्रकार, यदि आप शेल में एक कमांड को संपादित करना चाहते हैं तो आप उसी कमांड 2 का उपयोग करते हैं जो आप अपने टेक्स्ट एडिटर में करते हैं। इसका मतलब केवल एक कमांड सिंटैक्स को याद रखना और (यदि वह पर्याप्त लाभ नहीं था) तो संभवतः दोनों वातावरणों में आपका संपादन तेज और कम त्रुटि वाला हो जाएगा ...
आप अपने शेल इतिहास से किसी भी कमांड को खींचकर, Escapeकमांड मोड में प्रवेश करने और फिर हिट करने के लिए vi-मोड में इस संबंध का लाभ उठा सकते हैं v, जो कि आपके $ EDITOR को कमांड के साथ और अधिक जटिल संपादन के लिए भरी हुई पूरी शक्ति के साथ खोलेगा। एक बार जब आप अपनी संतुष्टि के लिए कमांड को संपादित करना समाप्त कर लेते हैं, :wqऔर कमांड को आपके शेल में वापस निष्पादित किया जाता है।
1. यह मानते हुए कि आप अपने संपादक के रूप में Emacs या Vi / m का उपयोग करते हैं।
2. या, अधिक सटीक रूप से, एक सबसेट ...
set -o vi
उन लोगों की सबसे अच्छी विशेषताओं में से एक है जिन्हें ज्यादातर लोग नहीं जानते हैं। यह विशेष रूप से सच है यदि आप एक ही कमांड को कई बार अलग-अलग तर्कों के साथ जारी करना चाहते हैं (जैसा कि कई कमांड लाइन कमांड्स)।
set -o vi
। set -o EMACS
Cx की डिफ़ॉल्ट सेटिंग के तहत , Ce एक emacs विंडो लाएगा (या $EDITOR
, अगर, सेट) जिसमें आप इसे चलाने से पहले कमांड को संपादित कर सकते हैं।
यदि आप Android के लिए ConnectBot जैसे मोबाइल SSH क्लाइंट का उपयोग कर रहे हैं, तो Vi मोड एक विशाल प्रयोज्य सुधार है।
यह संशोधक कुंजियों पर निर्भरता कम होने के कारण है।
स्मार्टफोन या टैबलेट पर वर्चुअल कीबोर्ड के साथ विम का उपयोग करना बहुत आसान है ... एंड्रॉइड यूआई में निर्मित देशी संपादन विधियों सहित कुछ और। विडंबना यह है कि एसएसएच सत्र में विम के साथ सी स्रोतों को संपादित करना आसान है, कहने के लिए, उस उद्देश्य के लिए मंच के अपने संपादन विजेट के साथ एक त्वरित संदेश।
शेल vi मोड एक समान लाभ लाता है।
यह आपको vi मोड और संचालन का उपयोग करके कमांड लाइन पर सामान संपादित करने देता है।
एक उदाहरण इसे बहुत स्पष्ट बनाने में मदद करेगा:
आप लिखें cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/
लेकिन आपको एक त्रुटि मिलती है - आपको टाइप करना चाहिए था file1.txt
नहींfile1.xt
इस विकल्प के सेट के बिना , आप ऊपर-तीर दबाते हैं और फिर बाएं तीर को दबाते हैं और इसे 35 बार दोहराते हैं, जब तक आप इसे प्राप्त नहीं करते हैं .xt
और तब आप अतिरिक्त टाइप करते हैं t
। कुल कीस्ट्रोक्स: 37 ।
साथ इस विकल्प को आप (उदाहरण के लिए) प्रेस एक बार ऊपर तीर कर सकते हैं निर्धारित करते हैं, तो आदेश मोड, 0 के लिए भागने लाइन की शुरुआत में जाने के लिए और उसके बाद /xt[return]
करने के लिए xt
और फिर आप टाइप कर सकते हैं i
डालने मोड के लिए और लापता टी टाइप करें। यह कुछ मामलों में पागलपन की तरह लग सकता है लेकिन अगर आप एक उपयोगकर्ता हैं तो ये कमांड पहले से ही बहुत अच्छी तरह से ज्ञात हैं। कुल कीस्ट्रोक्स: 9
Alt+B
s या Ctrl+Alt+]
.
Emacs मोड में भी उपयोग कर सकते हैं , इसलिए यह मेरे लिए एक मजबूत उदाहरण नहीं लगता है।
Up
, Ctrl+Alt+]
, .
, Right
, t
, Enter
= 8. Vi मोड: Up
, F
, .
, a
, t
, Enter
= 7 :)
Esc
वहाँ भी है, यह एक मृत गर्मी है।
मुझे यकीन नहीं है कि कोई प्रत्यक्ष लाभ है। मैं vi
20 से अधिक वर्षों से उपयोगकर्ता हूं । मैं screen
भी लंबे समय के लिए एक उपयोगकर्ता हूँ , और अन्य प्रोग्राम जो vi
कुंजियों का उपयोग करते हैं । मेरे लिए बैश में "vi" मोड सेट करना पसंद करना स्वाभाविक है। लेकिन मैं अपनी नौकरी में सैकड़ों सर्वरों पर भी काम करता हूं, ज्यादातर डिफ़ॉल्ट "एमएसीएस" मोड पर सेट होते हैं। इसलिए मुझे दोनों मोड का उपयोग करने की आवश्यकता है। लेकिन यह वास्तव में सिर्फ वरीयता का मामला है।
ssh
। बेशक, यह मदद नहीं करता है जब मैं एक मशीन का उपयोग कर रहा हूं स्थानीय रूप से उस पर मेरा .bashrc
सामान नहीं है ।
मुख्य लाभ आपकी कमांड लाइन का मोडल संपादन है। यदि आप विम से परिचित हैं और इसके दर्शन को पसंद करते हैं तो लाभ स्पष्ट होना चाहिए। यदि आप इसके साथ अनुभवी हैं, तो आपकी उंगली की मांसपेशियों की मेमोरी आपको बिजली की गति में अपने बैश कमांड को संपादित करेगी।
नायब : यदि आपको मोडल एडिटिंग पसंद नहीं है, तो आपको अभी भी (डिफ़ॉल्ट) एमएसीएस-मोड का लाभ उठाना सीखना चाहिए। यहां कुछ निफ्टी कीबोर्ड शॉर्टकट हैं जो किसी भी प्रक्रिया पर काम करेंगे readline
, जैसे bash
।
यदि आपको इसकी आदत है vi
, तो आप इसे अपने शेल संपादक के रूप में vi मोड पर सेट करें। यह स्पष्ट कारण होगा। दूसरा वह है जब bash
कुछ OSes में डिफ़ॉल्ट रूप से उपलब्ध नहीं है (ज्यादातर UNIX जैसे AIX, Solaris), इसलिए शेल हिस्ट्री फीचर उपलब्ध नहीं है, इसलिए शेल एडिटर को सेट करके पिछले कमांड प्राप्त करने का तरीका vi
, और Esc, Ctrl+ Kया Ctrl+L
यह आपको आसानी से vim के शॉर्टकट का उपयोग करके कमांड लाइन को नेविगेट और संपादित करने दे सकता है, जैसे कि जल्दी से एक शब्द को सही करने के लिए, एक शब्द को हटा दें।
डिफ़ॉल्ट शॉर्टकट द्वारा, जब आपको पंक्ति के अंत में जाने की आवश्यकता होती है, तो आपको Ctrl+ की आवश्यकता होती है e, जबकि set -o vi
आप बस हिट करते हैं $
, जैसे कि विम में।
शायद पार्टी के लिए देर हो चुकी है, लेकिन मेरे लिए vi मोड का उपयोग करना इंटरेक्टिव स्क्रैप बनाते समय अधिक होता है .. उदाहरण के लिए
for i in `ls | grep -v gz`
do
echo $i
gzip $i
done
जो बहुत जटिल हो सकता है उसका एक बहुत ही सरल उदाहरण है, जो ESCkvआपको एक vi सत्र में डालता है जहां आप स्क्रिप्ट को संशोधित कर सकते हैं, और फिर :wq
यह चलता है।
vi
मोड में बैश का उपयोग करने का एक अच्छा उदाहरण हो सकता है, लेकिन यह बैश कोड का एक बुरा उदाहरण है। (1) आउटपुट ls
को इनपुट से किसी अन्य प्रकार के प्रसंस्करण के रूप में उपयोग करना एक बुरा विचार है। (2) $(…)
कमांड प्रतिस्थापन के लिए सिंटैक्स व्यापक रूप से `…`
सिंटैक्स की तुलना में अधिक पठनीय माना जाता है । (3) आपको हमेशा शेल वेरिएबल्स को उद्धृत करना चाहिए जब तक कि आपके पास एक अच्छा कारण नहीं है, और आपको यकीन है कि आप जानते हैं कि आप क्या कर रहे हैं।