2012-02-13 27 views
5

मैं zsh में इनपुट टेक्स्ट का रंग बदलना चाहता हूं (पाठ जो मैं प्रत्येक कमांड के लिए टाइप करता हूं)। उदाहरण: [email protected]> ls ~/ में मैं मानक आउटपुट से बाहर खड़े होने के लिए पीले होने के लिए ls ~/चाहता हूं।zsh परिवर्तन प्रॉम्प्ट इनपुट रंग

मैं जानता हूँ कि मैं बैश में यह पूरा शीघ्र के अंत में

export PS1=" $BIGreen \[email protected]\h \w \$ $IYellow" 

का उपयोग कर सकते हैं, रंग पीला हो जाता है, इनपुट पाठ मैं प्रकार पीला है (परिभाषित उचित रंग चर के साथ)। और फिर

trap 'echo -ne "\e[0m"' DEBUG 

जो मेरे आदेश के आउटपुट प्रदर्शित होने पर सामान्य रूप से रंग को रीसेट करता है।

मैं इसे zsh में कैसे पूरा कर सकता हूं? वर्तमान में, मैं

PROMPT=$'{$fg[green]%}%[email protected]%{$fg[green]%}%m %# %{$fg[yellow]%}' 
.zshrc में

(अंत में पीले रंग की स्थापना), लेकिन यह काम नहीं करता है। (मैं यह भी नहीं जानता कि आदेश के बाद रंग को सफेद पर कैसे सेट करें)।

उत्तर

3

इस प्रयास करें:

PROMPT="%F{green}%[email protected]%m %# %F{yellow}" 
preexec() { echo -ne "\e[0m" } 

मैं trap उपयोग करने की कोशिश, लेकिन जैसे DEBUG/अगले शीघ्र से पहले आदेश रन के बाद जब तक ऐसा नहीं होता है यह लग रहा है, तो आदेश पीले रंग में क्रियान्वित समाप्त होता है। कमांड निष्पादित करने से पहले preexec() फ़ंक्शन को कॉल किया जाता है, ताकि आप वहां डिफ़ॉल्ट रंग को पुनर्स्थापित कर सकें।

+1

यह वही है जो मैं चाहता था! धन्यवाद। क्या आप यह समझेंगे कि यह कैसे काम करता है? साथ ही, एक चेतावनी यह है कि यह स्वत: पूर्णता के दौरान रंग बदल जाता है (उदाहरण के लिए 'ls somepath [tab] '), कम से कम मेरी सेटिंग्स के लिए (मुझे लगता है कि zsh स्वतः पूर्ण होने के दौरान एक अनियंत्रित स्लैश डालने वाला है) लेकिन यह एक बहुत मामूली शिकायत है। –

+1

मूल स्ट्रिंग में एक टाइपो था ('% F' के बजाय' # F'), लेकिन यह समस्या भी नहीं थी। मैंने अभी देखा है कि मुझे एक ही समस्या है क्योंकि आप स्वत: पूर्ण होने के बाद रंग बदल रहे हैं। 'prexec()' को खोल से निष्पादित प्रत्येक आदेश से पहले बुलाया जाता है, इस प्रकार यह रंग को रीसेट करने के लिए काम करता है। मूल रंग को पुनर्स्थापित करने के लिए आपको '% f' टैग के साथ सभी'% F' रंग परिवर्तनों को बंद करना होगा। अगर मैं इसका बेहतर समाधान समझता हूं तो मैं जवाब अपडेट कर दूंगा। –