मैं टर्मिनल रिड्रा समस्याओं को पैदा किए बिना अपने ज़ेडटी प्रॉम्प्ट में एक नई रूपरेखा कैसे बना सकता हूं?


13

मैं अपने zsh प्रॉम्प्ट के साथ एक मामूली (लेकिन कष्टप्रद) समस्या को ठीक करने की कोशिश कर रहा हूं। मैं जो समस्या देख रहा हूं वह यह है कि जब मैं GUI OS वातावरण में टर्मिनल का उपयोग कर रहा हूं (उदाहरण के लिए, OS X 10.7.2 पर टर्मिनल.app या iTerm 2) और टर्मिनल विंडो का आकार बदल देता है, तो टर्मिनल अतिरिक्त संकेतों के साथ फिर से तैयार हो जाता है। ।

मैंने इस मुद्दे को एक साफ .zshrc पर पुन: प्रस्तुत किया है जिसमें निम्नलिखित शामिल हैं:

export PROMPT=">
"

स्पष्ट होने के लिए, यह एक दो-लाइन फ़ाइल है। स्ट्रिंग में एक शाब्दिक न्यूलाइन है, जिसे मैंने कई ( कथित तौर पर पुरानी ) जगहों पर पढ़ा है । यह तब तक काम करता है जब तक कि मैं टर्मिनल विंडो को आकार नहीं देता, जिस बिंदु पर मैं डुप्लिकेट प्रॉम्प्ट स्ट्रिंग्स के साथ समाप्त होता हूं। उदाहरण के लिए यदि मैं एक नई विंडो खोलता हूं, तो मैं देखता हूं ( *अपने कर्सर के लिए प्लेसहोल्डर का उपयोग किया जा रहा है):

Last login: Wed Jan 25 19:05:06 on ttys000
>
*

फिर जब मैं विंडो को आकार देता हूं, तो इसे छोटा बनाता है, मैं इसके साथ समाप्त होता हूं:

Last login: Wed Jan 25 19:05:06 on ttys000
>
>
>
>
*

अतिरिक्त शीघ्र प्रिंटआउट की संख्या मोटे तौर पर आनुपातिक लगती है कि मैं खिड़की के आकार को कितना बदलूं - आमतौर पर लंबवत। अगर मैं प्रॉम्प्ट स्ट्रिंग से नई लाइन हटाता हूं, तो समस्या दूर हो जाती है।

मैंने विभिन्न चीजों की कोशिश की है, जैसे $(print ">\n"), या newline को लपेटने की कोशिश कर रहा है %{%}। मैं मान रहा हूँ कि इस तथ्य के साथ क्या करना है कि newline भ्रमित करता है कि जो कुछ भी wrt खींच रहा है वह वास्तव में संकेत स्ट्रिंग कितनी देर तक है, या कुछ और है। क्या यह समस्या ठीक है या मुझे बस इसके साथ रहना है?

जवाबों:


13

यह समस्या इस कारण से है कि कैसे ZSH ने प्रॉजेक्ट्स को आकार बदलने पर फिर से छाप दिया और मुझे पहले भी परेशान किया। इसका समाधान यह है कि $PROMPTसिंगल-लाइन बनायें और प्रेडम का उपयोग करके प्रॉम्प्ट की पहली लाइन प्रिंट करें।

तो आपके उदाहरण में बस यही होगा:

precmd() { print ">" }
export PROMPT=""

या प्रिंट स्टेटमेंट में शीघ्र विस्तार के साथ अधिक परिष्कृत उदाहरण के लिए -rPमापदंडों का उपयोग करें :

precmd() { print -rP "%~" }
export PROMPT="%# "

यदि आपके पास एक से अधिक पूर्व-पंजीकृत हैं तो आपको उपयोग करने की आवश्यकता है add-zsh-hook precmd(देखें man zshcontrib)।


1
खुद की तरह के newbies के लिए, आप देख सकते हैं कि -rP का क्या मतलब है यहां: cs.elte.hu/zsh-manual/zsh_17.html । ऐसा प्रतीत होता है कि printZSH- विशिष्ट कमांड है, और Googling "linux प्रिंट" आपको बहुत अच्छे परिणाम नहीं देता है।
मिकवेट

printzsh का हिस्सा है। आप इसके लिए मदद देख सकते हैं man zshbuiltins। बैश का अपना समकक्ष है, लेकिन मुझे यकीन नहीं है कि वे संगत हैं।
जिम स्टीवर्ट

11

इस जैसे किसी और के बारे में क्या राय है:

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"

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