bash - विभिन्न वीआई संपादन मोड के लिए अलग-अलग बाश प्रॉम्प्ट?




prompt (4)

बैश के साथ vi मोड (set -o vi) का उपयोग करते समय, यह एक अच्छा संकेत होना अच्छा होगा जो उस मोड पर निर्भर करता है जिसमें आप वर्तमान में हैं (सम्मिलित करें या कमांड)। इस संपादन मोड को कैसे पता चलता है?

बीटीडब्ल्यू, यह ZSH में संभव प्रतीत होता है:


.inputrc प्रॉम्प्ट और .inputrc

इनपुट में एक + डालने के लिए एक विकल्प दिखाने का विकल्प होता है : सामान्य मोड के लिए, ~/.inputrc रूप में ~/.inputrc में set show-mode-in-prompt on जोड़कर, लेकिन यह मल्टीलाइन प्रॉम्प्ट के साथ अच्छी तरह से काम नहीं करता है।

एक समाधान में एक पंक्ति PS1 ( > ) है, और एक फ़ंक्शन जो प्रॉम्प्ट से पहले कुछ गूंजता है। इसे बैश में बनाया गया है और PROMPT_COMMAND कहा जाता है।

function prompt {
    PS1=' > '
    echo -e "$(date +%R)  $PWD"
}

PROMPT_COMMAND='prompt' 

सामान्य प्रॉम्प्ट स्ट्रिंग printf की गूंज में उपलब्ध नहीं हैं। रंग कोडों को समझना है, और \[ या \] जोड़ने के लिए जरूरी नहीं है, जो वैसे भी काम नहीं करता है।

सम्मिलित करें मोड:

20:57   /home/sshbio/dotfiles/bash
+ > _

सामान्य मोड:

20:57   /home/sshbio/dotfiles/bash
: > _

टैब दबाकर , केवल पीएस 1 दोहराया जाता है, जो मेरे लिए समझ में आता है:

20:57   /home/sshbio/dotfiles/bash
+ > ls _
bashrc      bash_profile     inputrc
+ > ls _

(Source)


Google को खोजने के बाद, बैश मैन पेज को देखकर और फिर बैश स्रोत कोड (lib / readline / vi_mode.c) को देखकर ऐसा लगता है कि सम्मिलित मोड से कमांड मोड में जाने पर प्रॉम्प्ट को बदलने का कोई आसान तरीका नहीं है। ऐसा लगता है कि किसी के लिए बैश स्रोत को पैच करने का अवसर हो सकता है, हालांकि स्रोत में मोड शुरू करने और रोकने के लिए कॉल हैं।

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

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


बैश 4.4 / रीडलाइन 7.0 उपयोगकर्ता- सेटटेबल मोड स्ट्रिंग्स के लिए समर्थन जोड़ देगा

आप बीटा संस्करणों को आजमा सकते हैं, लेकिन इस समय वे थोड़ी छोटी लग रही हैं। वे अभी भी निर्दिष्ट करने का समर्थन नहीं करते हैं कि संकेत में जहां आप मोड संकेतक होना चाहते हैं (जो मुझे लगता है कि हत्यारा सुविधा है)।

यदि आप प्रतीक्षा नहीं करना चाहते हैं, और थोड़ा संकलन से डरते नहीं हैं, तो मैंने बैश 4.3 के पैच किए गए संस्करण प्रकाशित किए हैं और इस कार्यक्षमता का समर्थन करने वाले जिथब को 6.3 को रेखांकित किया है।

पैच किए गए संस्करणों के साथ आप इस तरह की चीजें कर सकते हैं:

इंस्टॉल करने के तरीके सहित अधिक जानकारी https://github.com/calid/bash पर उपलब्ध हैं


मैं बाश वी मोड के लिए संकेतक प्राप्त करने का प्रयास करता हूं, और आप सभी ने यह सीखा सरल है और इसे अभी तक करने का कोई तरीका नहीं है।

मेरा वर्तमान दृष्टिकोण है: 'ए' दबाएं जब मुझे यकीन न हो कि कौन सा मोड है। अगर 'ए' बाश प्रोमोट के बाद प्रकट होता है, तो मैं सीखता हूं कि मैं 'इंसर्ट' मोड में हूं। फिर, मैंने 'वापसी' मारा और जारी रखा। छोटे परेशानियों को हल करने के लिए यह एक आसान तरीका है।

वैसे, मैं 'al' a = 'cal', या खाली हिट 'ए' थोड़ा उपयोगीता देने के लिए कुछ और करता हूं।





prompt