क्या मैं एनबीएसपी को सामान्य स्थान पर स्वचालित रूप से परिवर्तित करने के लिए बैश / रीडलाइन कॉन्फ़िगर कर सकता हूं?


10

मैं फ़िनिश कीबोर्ड लेआउट का उपयोग कर रहा हूं, जो AltGr+ Spaceको नॉन-ब्रेकिंग स्पेस (NBSP, U + 00A0) के लिए मैप करता है । मैं सामान्य रूप से इससे खुश हूं, लेकिन मुझे लगता है कि मैं अक्सर गलती से एनबीएसपी को पाइप के बाद सामान्य स्थान के बजाय |"प्रतीक" ( फिनिश कीबोर्ड लेआउट के साथ AltGr+ लिखा हुआ <) के बजाय बैश कमांड लाइन का उपयोग करते हुए लिखता हूं । मुझे लगता है कि यह इस तथ्य के कारण है कि मुझे AltGrपाइप को टाइप करते समय पकड़ना होगा और अंतरिक्ष से टकराने से पहले इसे जारी करना होगा। और जब मैं AltGrकमांड लाइन पर अदृश्य टाइपो के साथ समाप्त होने के लिए बुरा समय रखता हूं और जैसे त्रुटि संदेश

 grep: command not found

जो देखने में काफी समान है

grep: command not found

जो इस मुद्दे को पहली बार नोटिस करना थोड़ा कठिन बनाता है।

मुझे पता है कि मैं कर सकते हैं NBSP को निष्क्रिय लेकिन मैं इसे अक्षम पसंद करेंगे (होने AltGr+ Spaceकेवल पाइप चरित्र के बाद नियमित रूप से अंतरिक्ष का निर्माण करने के लिए), या कि अगर, संभव नहीं है हमेशा बैश कमांड लाइन या पर readlineस्तर। क्या बैश के स्रोत कोड , readlineया मेरे टर्मिनल एमुलेटर ( gnome-terminal) को संशोधित किए बिना ऐसा करने का कोई सरल तरीका है ?

एनबीएसपी को कॉन्फ़िगर करने के लिए एक और अच्छा समाधान यह होगा कि कमांड लाइन पर किसी तरह दिखाई दे, उदाहरण के लिए केवल रेंडर करने के लिए एक और चरित्र (यू + 2423 ) के साथ प्रतिस्थापित किया जाता है ।


@ मिठाई को वास्तव में एक इनाम की आवश्यकता नहीं है। मैंने सिर्फ समस्या को मारा और इसके बारे में एक प्रश्न लिखा। बाद में मुझे नीचे दिए गए उत्तर का पता लगाने के लिए Google खोज के माध्यम से पर्याप्त पास मिला। मैं अभी भी सभी मामलों के लिए चरित्र को अक्षम करने के बजाय NBSP को दृश्यमान बनाने के लिए उत्तर की तलाश कर रहा हूं। मुझे लगता है कि मैं एनबीएसपी को रीडलाइन स्तर पर देखना चाहूंगा ताकि डेटा स्ट्रिंग्स में एनबीएसपी होने पर सभी टर्मिनल आउटपुट गड़बड़ न हो।
मिकको रेंटालिनेन

@MikkoRantalainen क्या आप बता सकते हैं कि आप अभी भी अधिक स्पष्ट रूप से याद कर रहे हैं? चूँकि आपको पात्रों के मानचित्र बनाने का तरीका मिला, इसलिए " ":␣पर्याप्त नहीं है? आपको और क्या चाहिए?
टेराडॉन

@dertert मुझे एक सुविधा पसंद आएगी जहाँ मैं कमांड लाइन पर NBSP लिख सकता था और प्राप्त कर सकता था echo a␣bलेकिन परिणामी आउटपुट लाइन आउटपुट में echo a bवास्तविक NBSP के साथ थी । जैसे, मुझे लगता है कि इसे रीडलाइन स्तर पर किया जाना चाहिए (अर्थात कमांड लाइन संपादक हमेशा दृश्य चरित्र प्रदर्शित करता है, लेकिन टर्मिनल एमुलेटर संपादक प्रदर्शन और आउटपुट डिस्प्ले के बीच के अंतर को नहीं जान सकता है और इसलिए टर्मिनल एमुलेटर प्रतिपादन के लिए दृश्य प्रतिस्थापन नहीं कर सकता है )।
मिक्को रेंटालीनें

1
रीडलाइन स्तर पर इसे हल करना वास्तव में अच्छा है, लेकिन टर्मिनल में vim / emacs / etc में शेल स्क्रिप्ट लिखते समय आपको एक ही समस्या आ सकती है। देखें bugzilla.gnome.org/show_bug.cgi?id=788673 GNOME टर्मिनल शायद ही NBSP चरित्र सहित प्रकाश डाला स्ट्रिंग मैचों के लिए अवधारणा पैच की एक काम सबूत के लिए। (हाँ, मुझे पता है कि आपने कहा था कि आप किसी भी स्रोत कोड को संशोधित नहीं करना चाहते ...)
उदाहरण

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

जवाबों:


9

यह readlineस्तर पर दो अलग-अलग तरीकों से किया जा सकता है।

विधि 1

निम्नलिखित डालें .inputrc(इसके लिए कॉन्फ़िगरेशन फ़ाइल readline):

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map NBSP to regular space (left part has NBSP in quotes, right part has space)
" ":" "

यदि मार्कडाउन ऊपर गड़बड़ करता है, तो आपको एनबीएसपी को कोलोन के बाईं ओर उद्धरणों में रखना होगा जैसा कि टिप्पणी में बताया गया है। यह नियमित स्थान के साथ इनपुट स्ट्रीम पर एनबीएसपी की किसी भी घटना को मैप करेगा।

विधि 2

निम्नलिखित में डालें .inputrc:

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map "pipe + NBSP" to "pipe + regular space" (left part has NBSP in quotes)
"| ":"| "
set keyseq-timeout 250

विचार मुख्य अनुक्रम {पाइप द्वारा एनबीएसपी} के बाद {पाइप द्वारा अंतरिक्ष के बाद} को मैप करने के लिए है। यदि आप 250 ms (ऊपर विन्यास योग्य) के भीतर अनुक्रम टाइप करते हैं तो यह काम करता है। हालाँकि, जब तक समय समाप्त हो जाता है, तब तक पाइप का प्रतीक केवल टाइप करने से कुछ भी आउटपुट नहीं होगा। और यदि आप अनुक्रम को बहुत धीमी गति से टाइप करते हैं, तो फिक्स लागू नहीं किया जाएगा। यह भी ध्यान दें कि टाइमआउट वैश्विक है इसलिए यदि आप किसी अन्य क्रम का उपयोग करने का इरादा रखते हैं, तो आपको सबसे लंबा अनुक्रम टाइप करने में सक्षम होने के लिए पर्याप्त समय निर्धारित करना होगा। (वर्ण रेखा टाइप करने की अनुमति देने के लिए रीडलाइन लाइब्रेरी पर्याप्त चतुर नहीं है और बाद में वर्ण अनुक्रम से मेल खाने के बाद पहले से ही दिखाई देने वाले वर्णों को बदल देता है।)


0

इस समस्या से निपटने के लिए एक उत्कृष्ट लेख है:

मैं grepत्रुटि संदेशों के साथ प्राथमिक चिंता को संबोधित करने का प्रयास कर रहा हूं और एनबीएसपी को execकमांड का उपयोग करके कुछ अधिक दिखाई दे रहा हूं । मुझे सिंटैक्स डाउन पैट अभी तक नहीं मिला है:

exec 2> >(tr $'\xa0' $'\x43' >&2) 

विचार इस आदेश के लिए है, ~/.bashrcइसलिए यह स्वचालित रूप से gnome-terminalखुलने के साथ लोड होता है । लेकिन जैसा कि मैंने कहा कि यह अभी तक काम नहीं कर रहा है ...


1
यह केवल त्रुटि संदेशों से निपटेगा। मुझे लगता है मैं संपादन कर रहा हूँ, जबकि कमांड लाइन क्योंकि मैं की तरह कुछ लिख रहा हो सकता है समस्या को पकड़ने के लिए पसंद करेंगे perl -i -npe 's/MARKER/4 KB/'और मैं गलती से जो NBSP पर्ची 4और K। ओह, समस्या एक फ़ाइल में संग्रहीत हो जाती है, लेकिन मुझे कोई त्रुटि नहीं मिलती है और मैंने जो कमांड लाइन लिखी है वह सही लगती है।
मिक्को Rantalainen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.