2012-02-13 111 views
5

我想更改zsh中輸入文本的顏色(我爲每個命令鍵入的文本)。例如:在[email protected]> ls ~/我希望ls ~/爲黃色以從標準輸出中脫穎而出。zsh更改提示輸入顏色

我知道可以使用

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

在提示結束時的bash實現這一點,顏色設置爲黃色,輸入文本I型是黃色(與所定義的適當的顏色變量)。然後

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

當我的命令的輸出顯示時,它將顏色重置爲正常。

我該如何做到這一點zsh?目前,我有

PROMPT=$'{$fg[green]%}%[email protected]%{$fg[green]%}%m %# %{$fg[yellow]%}' 

in .zshrc(在最後設置顏色爲黃色),但它不起作用。 (我也不知道如何在命令後將顏色設置爲白色)。

回答

3

試試這個:

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

我試着用trap,但它看起來像DEBUG不前的提示下發生,直到命令運行後/,因此命令結束了黃色執行。在執行命令之前調用preexec()函數,因此您可以在那裏恢復默認顏色。

+1

這正是我想要的!謝謝。你介意解釋這是如何工作的嗎?另外需要注意的是,它在自動完成期間會自動完成顏色回覆(例如'ls somepath [tab]'),至少對於我的設置(我認爲zsh在自動完成期間插入了無色的斜線),但這是一個非常小的投訴。 – 2012-11-30 06:51:13

+1

原始字符串中有一個拼寫錯誤('#F'而不是'%F'),但這也不是問題。我只是注意到,自動完成後,我遇到了和自己顏色相同的問題。 'prexec()'在從shell執行的每個命令之前被調用,這是如何工作來重置顏色的。原來你應該用'%f'標記關閉所有'%F'顏色變化以恢復原始顏色。如果我找出更好的解決方案,我會更新答案。 – 2012-11-30 17:24:11