सेट -o vi का उपयोग करने के लाभ


55

मैंने vi को विकल्प सेट करने के लिए इस आदेश का उपयोग करते हुए कई डेवलपर्स को देखा है। मुझे इसका वास्तविक उपयोग कभी समझ में नहीं आया?

बैश कमांड का उपयोग करते समय, vi को स्विच करने में क्या मदद मिलती है?

जवाबों:


58

या तो emacs (डिफ़ॉल्ट) या vi ( set -o vi) के लिए अपनी रीडलाइन संपादन सेट करके, आप अनिवार्य रूप से शेल और पसंद 1 के संपादक के पार अपने संपादन आदेशों का मानकीकरण कर रहे हैं ।

इस प्रकार, यदि आप शेल में एक कमांड को संपादित करना चाहते हैं तो आप उसी कमांड 2 का उपयोग करते हैं जो आप अपने टेक्स्ट एडिटर में करते हैं। इसका मतलब केवल एक कमांड सिंटैक्स को याद रखना और (यदि वह पर्याप्त लाभ नहीं था) तो संभवतः दोनों वातावरणों में आपका संपादन तेज और कम त्रुटि वाला हो जाएगा ...

आप अपने शेल इतिहास से किसी भी कमांड को खींचकर, Escapeकमांड मोड में प्रवेश करने और फिर हिट करने के लिए vi-मोड में इस संबंध का लाभ उठा सकते हैं v, जो कि आपके $ EDITOR को कमांड के साथ और अधिक जटिल संपादन के लिए भरी हुई पूरी शक्ति के साथ खोलेगा। एक बार जब आप अपनी संतुष्टि के लिए कमांड को संपादित करना समाप्त कर लेते हैं, :wqऔर कमांड को आपके शेल में वापस निष्पादित किया जाता है।


1. यह मानते हुए कि आप अपने संपादक के रूप में Emacs या Vi / m का उपयोग करते हैं।
2. या, अधिक सटीक रूप से, एक सबसेट ...


1
मुझे पवित्र कब्र मिली
सत्यम

3
Esc-v ट्रिक set -o viउन लोगों की सबसे अच्छी विशेषताओं में से एक है जिन्हें ज्यादातर लोग नहीं जानते हैं। यह विशेष रूप से सच है यदि आप एक ही कमांड को कई बार अलग-अलग तर्कों के साथ जारी करना चाहते हैं (जैसा कि कई कमांड लाइन कमांड्स)।
माइकल गोल्डसेन

2
Esc-v ट्रिक वास्तव में किसी विशेष के लिए विशिष्ट नहीं है set -o viset -o EMACSCx की डिफ़ॉल्ट सेटिंग के तहत , Ce एक emacs विंडो लाएगा (या $EDITOR, अगर, सेट) जिसमें आप इसे चलाने से पहले कमांड को संपादित कर सकते हैं।
जॉन गोवर्स

8

यदि आप Android के लिए ConnectBot जैसे मोबाइल SSH क्लाइंट का उपयोग कर रहे हैं, तो Vi मोड एक विशाल प्रयोज्य सुधार है।

यह संशोधक कुंजियों पर निर्भरता कम होने के कारण है।

स्मार्टफोन या टैबलेट पर वर्चुअल कीबोर्ड के साथ विम का उपयोग करना बहुत आसान है ... एंड्रॉइड यूआई में निर्मित देशी संपादन विधियों सहित कुछ और। विडंबना यह है कि एसएसएच सत्र में विम के साथ सी स्रोतों को संपादित करना आसान है, कहने के लिए, उस उद्देश्य के लिए मंच के अपने संपादन विजेट के साथ एक त्वरित संदेश।

शेल vi मोड एक समान लाभ लाता है।


मुझे आशा है कि मेरे फोन कीबोर्ड पर vi मोड था। आप इसका उल्लेख इस तरह करते हैं जैसे कि यह पहले से मौजूद हो। मैं अपने फोन पर vi मोड कैसे प्राप्त कर सकता हूं?
मेहर

6

यह आपको 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


1
आप कुछ Alt+Bs या Ctrl+Alt+] .Emacs मोड में भी उपयोग कर सकते हैं , इसलिए यह मेरे लिए एक मजबूत उदाहरण नहीं लगता है।
मिकेल

2
के रूप में हम गोल्फ रहे देखकर: Emacs मोड: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi मोड: Up, F, ., a, t, Enter= 7 :)
मिकेल

@ मिकेल आप भूल गए कि vi मोड इन्सर्ट मोड में शुरू होता है इसलिए आपके पास Escवहाँ भी है, यह एक मृत गर्मी है।
ड्रैगन

5

मुझे यकीन नहीं है कि कोई प्रत्यक्ष लाभ है। मैं vi20 से अधिक वर्षों से उपयोगकर्ता हूं । मैं screenभी लंबे समय के लिए एक उपयोगकर्ता हूँ , और अन्य प्रोग्राम जो viकुंजियों का उपयोग करते हैं । मेरे लिए बैश में "vi" मोड सेट करना पसंद करना स्वाभाविक है। लेकिन मैं अपनी नौकरी में सैकड़ों सर्वरों पर भी काम करता हूं, ज्यादातर डिफ़ॉल्ट "एमएसीएस" मोड पर सेट होते हैं। इसलिए मुझे दोनों मोड का उपयोग करने की आवश्यकता है। लेकिन यह वास्तव में सिर्फ वरीयता का मामला है।


मेरे लिए इसी तरह की स्थिति - मैं विम का बहुत उपयोग करता हूं, लेकिन मैंने हमेशा पाया है कि यह डिफ़ॉल्ट एमएसीएस जैसी रीडलाइन कीज़ (जो vi सबसेट के रूप में सुविधाजनक हो सकती है) पर कुशल बनने के लिए एक लाइन स्विचिंग जोड़ने की तुलना में कम है मैं हर नई प्रणाली पर vi मोड में आता हूं।
jw013

1
मैं सैकड़ों सर्वरों पर काम नहीं करता, लेकिन जब मैं अपने bash सेटअप को अलग-अलग कंप्यूटरों के बीच समान रखने के लिए sshrc का उपयोग करता हूंssh । बेशक, यह मदद नहीं करता है जब मैं एक मशीन का उपयोग कर रहा हूं स्थानीय रूप से उस पर मेरा .bashrcसामान नहीं है ।
काइल स्ट्रैंड

4

मुख्य लाभ आपकी कमांड लाइन का मोडल संपादन है। यदि आप विम से परिचित हैं और इसके दर्शन को पसंद करते हैं तो लाभ स्पष्ट होना चाहिए। यदि आप इसके साथ अनुभवी हैं, तो आपकी उंगली की मांसपेशियों की मेमोरी आपको बिजली की गति में अपने बैश कमांड को संपादित करेगी।

नायब : यदि आपको मोडल एडिटिंग पसंद नहीं है, तो आपको अभी भी (डिफ़ॉल्ट) एमएसीएस-मोड का लाभ उठाना सीखना चाहिए। यहां कुछ निफ्टी कीबोर्ड शॉर्टकट हैं जो किसी भी प्रक्रिया पर काम करेंगे readline, जैसे bash


1

यदि आपको इसकी आदत है vi, तो आप इसे अपने शेल संपादक के रूप में vi मोड पर सेट करें। यह स्पष्ट कारण होगा। दूसरा वह है जब bashकुछ OSes में डिफ़ॉल्ट रूप से उपलब्ध नहीं है (ज्यादातर UNIX जैसे AIX, Solaris), इसलिए शेल हिस्ट्री फीचर उपलब्ध नहीं है, इसलिए शेल एडिटर को सेट करके पिछले कमांड प्राप्त करने का तरीका vi, और Esc, Ctrl+ Kया Ctrl+L


1

यह आपको आसानी से vim के शॉर्टकट का उपयोग करके कमांड लाइन को नेविगेट और संपादित करने दे सकता है, जैसे कि जल्दी से एक शब्द को सही करने के लिए, एक शब्द को हटा दें।

डिफ़ॉल्ट शॉर्टकट द्वारा, जब आपको पंक्ति के अंत में जाने की आवश्यकता होती है, तो आपको Ctrl+ की आवश्यकता होती है e, जबकि set -o viआप बस हिट करते हैं $, जैसे कि विम में।


1

शायद पार्टी के लिए देर हो चुकी है, लेकिन मेरे लिए vi मोड का उपयोग करना इंटरेक्टिव स्क्रैप बनाते समय अधिक होता है .. उदाहरण के लिए

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

जो बहुत जटिल हो सकता है उसका एक बहुत ही सरल उदाहरण है, जो ESCkvआपको एक vi सत्र में डालता है जहां आप स्क्रिप्ट को संशोधित कर सकते हैं, और फिर :wqयह चलता है।


1
यह viमोड में बैश का उपयोग करने का एक अच्छा उदाहरण हो सकता है, लेकिन यह बैश कोड का एक बुरा उदाहरण है। (1) आउटपुट lsको इनपुट से किसी अन्य प्रकार के प्रसंस्करण के रूप में उपयोग करना एक बुरा विचार है। (2) $(…)कमांड प्रतिस्थापन के लिए सिंटैक्स व्यापक रूप से `…`सिंटैक्स की तुलना में अधिक पठनीय माना जाता है । (3) आपको हमेशा शेल वेरिएबल्स को उद्धृत करना चाहिए जब तक कि आपके पास एक अच्छा कारण नहीं है, और आपको यकीन है कि आप जानते हैं कि आप क्या कर रहे हैं।
जी-मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.