क्या zsh / टर्मिनल में गैर-टूटने योग्य स्थान को उजागर करना संभव है?


5

मैं \xA0डिबग सत्र के दौरान सामान्य स्थान से इसे अलग करने के लिए शेल आउटपुट में गैर-विराम योग्य स्थान ( ) को उजागर करने की संभावना तलाश रहा हूं । ई। जी।, मैं जैसे की आउटपुट देखना $ echo -e "[\xC2\xA0]|[ ]"चाहते हैं:

[_]|[ ]

रंग, अंडरस्कोर, यहां तक ​​कि निमिष भी ठीक है। मैं भी zshकिसी भी शेल से स्विच कर सकता हूं जहां यह पर्याप्त रूप से कॉन्फ़िगर किया जा सकता है। क्या यह कम से कम संभव है?

जवाबों:


4

यह हाइलाइटिंग शेल की तुलना में टर्मिनल एमुलेटर में आईएमएचओ को आसानी से लागू किया गया है। और एक लाभ के रूप में आप शेल से स्वतंत्र हाइलाइटिंग प्राप्त करते हैं - इसलिए यह lessआदि के साथ भी काम कर रहा है क्योंकि आप शेल को स्विच करने के साथ ठीक हैं, मुझे लगता है कि आप URxVt पर स्विच करने के साथ ठीक हैं।

पर्ल सीमाएं urxvt-perls के साथ संयोजन में URL आदि को क्लिक करने योग्य बनाना संभव है। लेकिन हम इस सुविधा का दुरुपयोग केवल गैर-तोड़ने योग्य रिक्त स्थान को रेखांकित करने के लिए कर सकते हैं।

विन्यास में किया जाता है ~/.Xdefaults:

URxvt.perl-ext:           default,matcher
URxvt.matcher.button:     2
URxvt.matcher.pattern.0:  (\\240)
URxvt.matcher.launcher.0: /bin/true
  • पंक्ति 1 उपयुक्त विस्तार को सक्रिय करती है
  • लाइन 2, हाइपरलिंक '' पर क्लिक करने के लिए मध्य माउस बटन के उपयोग को कॉन्फ़िगर करता है
  • पंक्ति 3 रेगेक्स को मैच के लिए परिभाषित करती है, यहाँ हर गैर-विराम स्थान है; A0 (hex) = 240 (oct)
  • पंक्ति 4 कार्रवाई को परिभाषित करती है, आपके मामले में आप ब्राउज़र या किसी प्रोग्राम को खोलना नहीं चाहते हैं, इसलिए /bin/trueठीक होना चाहिए

~/.Xdefaultsएक्स सर्वर को पुनरारंभ करके पुनः लोड करें (यह ओवरकिल हो सकता है, लेकिन मुझे यकीन नहीं है कि अगर xrdb ~/.Xdefaultsयह पर्याप्त है ...) और आपको कोई वांछित परिणाम मिलता है। एक आवर्धक कांच के साथ गैर-टूटने योग्य स्थानों के बीच अंतर करना भी संभव है, अंडरस्कोर (1 पिक्सेल द्वारा बदलाव पर ध्यान दें) ;):

यहाँ छवि विवरण दर्ज करें


निम्नलिखित "बैकएंड" समाधान के लिए अवधारणा का प्रमाण है । ज्ञात हो, कि यह बहुत सारी चीज़ों को तोड़ देगा, जैसे कि संवादात्मक कार्यक्रम man, lessआदि ( vimशिकायत कर रहा है लेकिन अभी भी काम कर रहा है)। इस दृष्टिकोण को एटम स्मैशर ने 16 मई 2009 को रंग zsh-usersभरने के लिए मेलिंगलिस्ट पर पोस्ट किया था । मैंने इसे आपकी आवश्यकताओं के लिए अपनाया:STDERR

# ## highlight_nbs.zsh ##

zmodload zsh/terminfo zsh/system
autoload colors is-at-least

if [[ "${terminfo[colors]}" -ge 8 ]] { colors }

highlight_nbs() {
  while sysread line
  do
    syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(highlight_nbs)

पेचीदा हिस्सा exec > >(highlight_nbs)जो highlight_nbsफ़ंक्शन के माध्यम से प्रतिस्थापित शेल के पूर्ण आउटपुट को संसाधित करता है। precmdपरिभाषा, एक रेस स्थिति से बचने के लिए आवश्यक है अन्यथा नया शीघ्र निष्पादित आदेश की वास्तविक उत्पादन से पहले छपा है।

यहाँ एक डेमो है:

यहाँ छवि विवरण दर्ज करें


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

@ मुदासोबवा: शायद आप अपने प्रश्न में अपनी आवश्यकताओं के बारे में विस्तार से बता सकते हैं। मेरे दृष्टिकोण से एक दृश्य समाधान (आप इसे कैसे कहते हैं) भी श्रेष्ठ है क्योंकि यह आपके द्वारा लॉग किए गए सिस्टम से स्वतंत्र है (ssh या क्या-क्या-कभी)। जब तक आप "अपने" कंप्यूटर के साथ काम करते हैं और urxvt आपको हाइलाइटिंग मिलते हैं। या यह दूसरा तरीका है दौर: आप विभिन्न मशीनों से एक दूरस्थ प्रणाली में प्रवेश करते हैं ?!
खसखस

हां, सामान्य तौर पर हल की जाने वाली समस्या निम्न है: मेरे पास ssh-क्लाइंट के रूप में कंप्यूटर की एक राशि है, और ssh-होस्ट का एक बंडल है। मैं रीमोट पर थोड़े "याद-जैसा" सेटअप रखना चाहूंगा।
अलेक्सी मटिहस्किन

@ मुदासोबवा: मैंने "बैकएंड" समाधान के लिए एक विचार जोड़ा। यह सही होने से बहुत दूर है, लेकिन शायद यह आपके लिए कुछ काम का है।
खसखस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.