2009-06-24 13 views
102

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

Btw, इस ZSH में संभव हो रहा है:

+0

इस बारे में भी उत्सुक हूं। बैश दस्तावेज के माध्यम से शिकार किया गया है, लेकिन कुछ भी नहीं मिला है। –

उत्तर

0

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

आईई: (अभी तक कोई टिप्पणी नहीं कर सकते हैं) मैं देख रहा हूँ, मुझे लगता है मैं सवाल ध्यान से पर्याप्त & संदर्भ अनदेखी पढ़ नहीं किया: एक स्क्रिप्ट कहा जाता बैश-vi कि कार्यान्वित "set -o vi; PS1='desired vi mode prompt';"


संपादित है & कमांड मोड डालने के लिए। सुनिश्चित नहीं है कि इसे कैसे सेट अप करें। आम तौर पर यह मेरे लिए कोई समस्या नहीं है क्योंकि मैं केवल संक्षिप्त संचालन के लिए कमांड मोड का उपयोग करता हूं - मैं देख सकता हूं कि यह उपयोगी क्यों होगा।

+1

नहीं, थॉमस क्या मांग रहा है अलग है। 'Set -o vi' के साथ, वह दबाते समय एक स्पष्ट रूप से अलग संकेत चाहता है, और फिर जब वह दबाता है तो मूल प्रॉम्प्ट फिर से होता है। – ephemient

19

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

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

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

0

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

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

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

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. 

तो में/etc/inputrc या ~/.inputrc (THX stooj डाल

set show-mode-in-prompt on 

:

+2

मुझे बस एएससी || सी- ["के बजाय" हिट करने के लिए और अधिक समझदारी होगी। तब आपको यह जानने की ज़रूरत नहीं है कि आपका क्या तरीका है; या अवांछित वर्ण डालें जो आपको निकालना है (या वापसी दबाएं) – wom

54

ताजा बैश 4.3 और ReadLine 6.3 तुम लोगों के लिए कुछ .. बदलाव का से है) आपके सभी रीडलाइन-सक्षम प्रोग्रामों को प्रभावित करना चाहिए;)

+0

इस पर कोई स्थिति? मैं इस तरह कुछ खोजने की कोशिश कर रहा हूं (बैश के लिए नहीं बल्कि अन्य रीडलाइन आधारित संकेतों के लिए जो मैं उपयोग करता हूं)। मैं गुगल रहा हूं और मुझे कोई अन्य अपडेट नहीं मिला है (इसके अलावा और लेख [आपने संदर्भित किया है] (http://cnswww.cns.cwru.edu/php/chet/readline/CHANGES)) –

+3

बस जोड़ना eMPee584 से - यदि आप 4.3 या उच्चतर बैश चला रहे हैं, तो अपने ~/.inputrc फ़ाइल सेट शो-मोड-इन-प्रॉम्प्ट में निम्न जोड़ें, यदि आप संपादन मोड में हैं, और आपके प्रॉम्प्ट के बहुत बाईं ओर एक + जोड़ता है : यदि आप कमांड मोड में हैं। – stooj

+3

तो यह काम करता है; क्या यह वीआई-मोड कैरेक्टर उस स्थान पर जाने के लिए एक तरीका है जहां वह संकेत देता है? यदि आपके पास मल्टी-लाइन प्रॉम्प्ट (कस्टम) है तो यह ठीक से काम नहीं करता है :) –

16

बैश 4.4/रीडलाइन 7.0 will add support for user-settable mode strings

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

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

समझौता संस्करणों आप इस तरह सामान के साथ क्या कर सकते हैं

:

enter image description here

अधिक जानकारी, स्थापित करने के तरीके सहित, शीघ्र https://github.com/calid/bash

6

बहुपंक्ति पर उपलब्ध हैं और .inputrc

Inputrc है डालने के लिए सामान्य मोड के लिएमें जोड़ने का विकल्पके रूप में eMPee584 लिखा था, लेकिन यह multiline संकेत के साथ अच्छी तरह से काम नहीं करता है।

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

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

PROMPT_COMMAND='prompt' 

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

सम्मिलित मोड:

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 _ 

Preview (Source)

+0

यदि 'vi-cmd-mode-string' या' vi-ins-mode-string 'में रंगों का उपयोग करना चाहिए, तो ये होना चाहिए '\ 1' द्वारा उपसर्ग और '\ 2' द्वारा पोस्टफिक्स्ड। [यहां] देखें (https://www.gnu.org/software/bash/manual/bash.html#Readline-Init-File)। इसके अलावा, \ \ ['और' \ ['अभी भी उत्सर्जित होना चाहिए, लेकिन आपको printf के अंदर' \\ ['और' \\] 'की आवश्यकता होगी। –

संबंधित मुद्दे