बैश में vi मोड को इंगित करने के लिए कर्सर का आकार (या रंग) बदलें


30

स्पष्ट करने के लिए: मैं यह नहीं पूछ रहा हूं कि टर्मिनल के भीतर विम का उपयोग करते समय कर्सर को कैसे बदला जाए । मैं चाहता हूं कि बश के vi- मोड के भीतर इनपुट और कमांड मोड के बीच स्विच करते समय कर्सर बदल जाए:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

मुझे एक स्क्रिप्ट मिली , जो कर्सर के मोड में बदलते रंग को zsh में संभव बनाती है , लेकिन मैं केवल इस एक फीचर के लिए गोले नहीं बदलना चाहता।

क्या बैश कमांड लाइन पर कमांड और इंसर्ट मोड के बीच स्विच करने पर कर्सर को आकार बदलने का तरीका मिलता है, जैसे gvim, (या यहां तक ​​कि सिर्फ रंग)?


पुट्टी के लिए एसओ में एक ही सवाल, कोई जवाब नहीं थो :( - stackoverflow.com/questions/2393383/…
studgeek

जवाबों:


5

इन दो पंक्तियों को ~ / .inputrc में जोड़ें :

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2

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

:) यहाँ मैनुअल प्रविष्टि है: gnu.org/software/bash/manual/html_node/…
holytrousers

1
यह केवल टर्मिनलों और टर्मिनल एमुलेटर पर काम करेगा जो DECSCUSR को समझते हैं।
JdeBP

मैं जोड़ने के लिए किया था set show-mode-in-prompt onमें ~/.inputrcभी इस काम करने के लिए।
रौनक

4

यहां से नकल की गई - कमांड-लाइन एडिटिंग विम स्टाइल

bash4.3 में उपलब्ध होना चाहिए - चैंज देखें -

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash4.3 वर्तमान में rcस्टेज पर है, आपको स्रोत से संकलन किए बिना अधिकांश डिस्ट्रो के पैकेज प्राप्त करने में सक्षम होना चाहिए, हालांकि मुख्य रिपॉजिटरी में नहीं। उदाहरण के लिए। Ubuntu (amd64) यहाँ और डेबियन (प्रायोगिक रेपो) यहाँ


ध्यान दें: यदि आप कस्टम PS1 का उपयोग करते हैं, जिसमें एक नई पंक्ति वर्ण होता है, तो संकेत अपडेट नहीं किया जाएगा। यहाँ
pgericson

@pgericson यह एक कस्टम PS1 के साथ काम करने के लिए लगता है, जो मेरे लिए 4.4.12 bash पर एक नई पंक्ति में है।
ड्युबिस्टकोमिशिन

2

मुझे एक वास्तविक समाधान नहीं मिला है, लेकिन शायद यह आपको (या किसी और को) बेहतर खोजने में मदद कर सकता है।

आपको एक स्क्रिप्ट बनानी होगी (जैसे kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

और इसे अपने PS1 में जोड़ने के बाद, कुछ इस तरह:

export PS1="\u@\h \$(kmtest.sh)> "

लेकिन जैसा कि मैंने कहा, यह वह नहीं है जो आप चाहते हैं, क्योंकि यह एक cr के बाद कर्सर का रंग बदलता है। सौभाग्य

जीबी


क्या यह वास्तव में आपके लिए काम करता है? यह मेरे लिए सही नहीं रहा; यह सिर्फ कर्सर को लाल कर दिया। मुझे नहीं लगता कि kmtest.sh को हर बार जब मैं सम्मिलित करता हूं और कमांड मोड के बीच स्विच करता हूं। ऐसा लगता है कि यह केवल प्रॉम्प्ट के निर्माण पर चलाया जाएगा।
जोकेन

1

ऐसा लगता है कि हैकिंग रीडलाइन के माध्यम से इसे करने का एक तरीका हो सकता है। शायद हम इसे मुख्यधारा में लाने के लिए जोर दे सकें?

यहाँ इतने पर मेरा जवाब है https://stackoverflow.com/a/12201092/255961 अगर मैं अधिक जानकारी प्राप्त जो मैं अद्यतन करेगा।


1

हालांकि यह बिल्कुल वैसा नहीं है जैसा आप चाहते हैं (डायनेमिक रूप से कर्सर को बदलना), 4.4 / रीडलाइन 7.0 को डायनामिक रूप से प्रॉम्प्ट बदलने के लिए समर्थन जोड़ देगा । आप सम्मिलित / आदेश मोड के लिए कस्टम मोड संकेतक निर्दिष्ट करने में सक्षम होंगे (यह अलग है तो वर्तमान show-mode-in-promptविकल्प जो उपयोग करने के लिए हार्डकोड है +और :)।

दुर्भाग्य से ये संस्करण वर्तमान में बीटा में हैं और अभी तक सभी बगों को इस्त्री नहीं किया गया है। वे यह भी निर्दिष्ट करने की क्षमता को याद नहीं कर रहे हैं कि शीघ्र में आप मोड संकेतक को कहां चाहते हैं।

अंतरिम में मैं पर बैश 4.3 / ReadLine 6.3 का समझौता संस्करण प्रकाशित किया है GitHub इस कार्यक्षमता के साथ।


0

जब मैं Gvim से कंसोल Vim में संक्रमण कर रहा था, तब मैंने AskUbuntu पर कुछ समय पहले एक ही सवाल पूछा था।

मुझे एक उत्तर मिला लेकिन इसमें गनोम टर्मिनल सेटिंग्स टॉगल करना शामिल था, और ये सेटिंग्स टर्मिनलों पर लागू थीं। इस प्रकार, सूक्ति टर्मिनल कर्सर के लिए कई बार गलत स्थिति में फंसना संभव था।

मुझे अभी भी दिलचस्पी है कि क्या आप एक संतोषजनक समाधान प्राप्त करते हैं, लेकिन समय के साथ मैंने कर्सर में मोड राज्य की जानकारी की कमी को समायोजित किया है। शायद मैं अधिक बार प्रेस से बच जाता हूं (उदाहरण के लिए, escमैं कमांड-मोड में हूं, esc iयह सुनिश्चित करने के लिए कि मैं सम्मिलित मोड में हूं); शायद मैं स्क्रीन के नीचे प्रदर्शित अवस्था को देखता हूं; शायद मैंने सिर्फ विधा को आंतरिक रूप दिया है।


3
बस स्पष्ट करने के लिए, आप सवाल यह है कि मेरा जैसा नहीं है। आपने पूछा कि कंसोल पर Vim के भीतर कर्सर कैसे बदलें। यह अच्छी तरह से विम विकी पर प्रलेखित है । मैं यह जानना चाहता हूं कि बाश के वि-मोड में यह कैसे करना है
जोकेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.