बैश के साथ vi मोड (सेट -o vi) का उपयोग करते समय, एक प्रॉम्प्ट होना अच्छा होगा जो उस मोड पर निर्भर करता है जो आप वर्तमान में हैं (सम्मिलित करें या कमांड करें)। इस संपादन मोड का पता कैसे चलता है?
Btw, यह ZSH में संभव हो रहा है :
बैश के साथ vi मोड (सेट -o vi) का उपयोग करते समय, एक प्रॉम्प्ट होना अच्छा होगा जो उस मोड पर निर्भर करता है जो आप वर्तमान में हैं (सम्मिलित करें या कमांड करें)। इस संपादन मोड का पता कैसे चलता है?
Btw, यह ZSH में संभव हो रहा है :
जवाबों:
ताजा चटका 4.3 और रीडलाइन 6.3 आप लोगों के लिए कुछ है .. चैंज से:
4. New Features in Readline
j. New user-settable variable, show-mode-in-prompt, adds a characters to the
beginning of the prompt indicating the current editing mode.
इसलिए लगा रहे हैं
set show-mode-in-prompt on
में / etc / inputrc या ~ / .inputrc (thx stooj) को आपके सभी रीडलाइन-सक्षम कार्यक्रमों को प्रभावित करना चाहिए;)
बैश 4.4 / रीडलाइन 7.0 उपयोगकर्ता- सेटल करने योग्य मोड स्ट्रिंग्स के लिए समर्थन जोड़ देगा ।
आप बीटा संस्करणों की कोशिश कर सकते हैं, लेकिन वे इस समय थोड़ी छोटी लग रही हैं। वे अभी तक यह निर्दिष्ट करने का समर्थन नहीं करते हैं कि प्रॉम्प्ट में आप मोड संकेतक कहां चाहते हैं (जो मुझे लगता है कि हत्यारा सुविधा है)।
यदि आप इंतजार नहीं करना चाहते हैं, और थोड़ा संकलन से डरते नहीं हैं, तो मैंने बैश 4.3 और रीडलाइन 6.3 के पैच किए गए संस्करण प्रकाशित किए हैं जो इस कार्यक्षमता का समर्थन करते हैं।
पैच किए गए संस्करणों के साथ आप इस तरह से सामान कर सकते हैं:
अधिक विवरण, कैसे स्थापित करें सहित, https://github.com/calid/bash पर उपलब्ध हैं
Google सर्च करने के बाद, bash man पेज को देखें और फिर bash source कोड (lib / readline / vi_mode.c) को देखें, ऐसा लगता है कि इन्सर्ट मोड से कमांड मोड में जाने पर प्रॉम्प्ट को बदलने का कोई आसान तरीका नहीं है। ऐसा लगता है कि किसी व्यक्ति को बैश स्रोत को पैच करने के लिए यहां एक अवसर हो सकता है, हालांकि स्रोत में मोड को शुरू करने और रोकने के लिए कॉल होते हैं।
आपके पोस्ट को देखने के बाद यह मुझे bash vi मोड सेटिंग में दिलचस्पी लेने लगा। मैं vi से प्यार करता हूं और कमांड लाइन पर क्यों नहीं। हालाँकि ऐसा लग रहा है कि हमें तुरंत बदलाव के बिना इन्सर्ट मोड में है या नहीं (इसलिए कई फोरम पोस्ट्स के बारे में बताया गया है) इस पर नज़र रखना होगा कि आपके लायक क्या है, जब तक आप ईएससी को नहीं मारते तब तक आप इन्सर्ट मोड में हैं। इसे थोड़ा आसान बनाता है, लेकिन हमेशा उतना सहज नहीं है।
मैं आपके प्रश्न को ऊपर उठा रहा हूं क्योंकि मुझे यह देखने में दिलचस्पी है कि यह कहां जाता है।
.inputrc
Inputrc एक को दिखाने का विकल्प है +
डालने के लिए और :
सामान्य मोड के लिए जोड़कर set show-mode-in-prompt on
में ~/.inputrc
के रूप में eMPee584 लिखा था, लेकिन यह संकेत (बैश और ReadLine के पुराने संस्करणों के साथ) बहु के साथ अच्छी तरह से काम नहीं करता।
एक समाधान में एक एकल पंक्ति PS1
( >
), और एक फ़ंक्शन होता है जो प्रॉम्प्ट से पहले कुछ गूंजता है। यह बाश में बनाया गया है और कहा जाता है PROMPT_COMMAND
।
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
प्रिंटफ की प्रतिध्वनि में सामान्य प्रांप्ट स्ट्रिंग्स उपलब्ध नहीं हैं। -e
Interprete रंग कोड है, और इसे जोड़ने के लिए आवश्यक नहीं है \[
या \]
है, जो वैसे भी काम नहीं करता।
मोड डालें :
20:57 /home/sshbio/dotfiles/bash
+ > _
सामान्य मोड:
20:57 /home/sshbio/dotfiles/bash
: > _
टैब दबाने पर , केवल PS1 दोहराया जाता है, जो मेरे लिए समझ में आता है:
20:57 /home/sshbio/dotfiles/bash
+ > ls _
bashrc bash_profile inputrc
+ > ls _
यही मेरे अंदर है ~/.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2
मोड डालें यह नीले रंग का है।
└──[ins]
कमांड मोड यह पीले रंग का है।
└──[cmd]
नकारात्मक पक्ष यह है कि यह एक tty
अर्थ पर प्रदर्शित नहीं होता है यह केवल एक टर्मिनल एमुलेटर पर केवल रंगों पर काम करता है।
मैं BASH vi मोड के लिए भी एक संकेतक प्राप्त करने की कोशिश करता हूं, और आप सभी ने सीखा है कि यह सरल है और अभी तक इसे करने का कोई तरीका नहीं है।
मेरा वर्तमान तरीका है: हिट 'ए' जब मुझे यकीन नहीं होता कि कौन सा मोड है। यदि BASH PROMOT के बाद IF 'a' दिखाई देता है, तो मुझे लगता है कि मैं 'INSERT' मोड में हूं। फिर भी, मैंने 'रिटर्न' को हिट किया और जारी रखा। छोटी झुंझलाहट को हल करने के लिए यह मेरे लिए एक आसान तरीका है।
वैसे, मैं 'उर्फ ए =' कैल ', या खाली हिट' थोड़ा उपयोगी 'देने के लिए कुछ और।
इस छवि की तरह बहुस्तरीय संकेत के लिए
मेरा काम इस तरह है
मेरा बैश प्रॉम्प्ट
export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "
.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"
आशा है कि इससे आपको मदद मिली
.inputrc
पहले आपको यह सुनिश्चित करना चाहिए कि आप bash संस्करण चला रहे हैं 4.3
:
$ bash --version
GNU bash, version 4.4
फिर निम्न पंक्तियाँ अपने में रखें ~/.inputrc
:
#################### VIM ####################
# FOR MORE INFORMATION CHECK:
# https://wiki.archlinux.org/index.php/Readline
# TURN ON VIM (E.G. FOR READLINE)
set editing-mode vi
# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)
set show-mode-in-prompt on
# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE
# FOR THE NUMBER AFTER `\e[`:
# 0: blinking block
# 1: blinking block (default)
# 2: steady block
# 3: blinking underline
# 4: steady underline
# 5: blinking bar (xterm)
# 6: steady bar (xterm)
set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2
कमांड मोड में, कर्सर को ब्लॉक के रूप में प्रदर्शित किया जाता है।
सम्मिलित मोड में, कर्सर को ऊर्ध्वाधर बार के रूप में प्रदर्शित किया जाता है।
प्रॉम्प्ट स्वयं तो मोड के आधार पर इस तरह दिखेगा:
(cmd)$ ...
(ins)$ ...