我的 .zshrc 中有這段代碼:
autoload -U colors && colors
function change_color() {
if [[ "$?" = 0 ]]; then
return "green"
else
return "red"
fi
}
PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]% %{$fg[$changecolor]%}?%b "
但是,?無論我做什么,角色都會保持白色。
uj5u.com熱心網友回復:
作為一個函式,你需要呼叫它,而不是把它擴展為一個變數。使用命令替換來做到這一點:
PS1="...%{$fg[\$(changecolor)]%}?%b "
但是,在這個提示中有很多類似的bash東西,您可以用更簡單、更強大zsh的功能來替換它們。首先,%F可用于直接更改顏色,無需使用存盤在陣列中的轉義碼。(與原始轉義碼不同,并且與其他 -zsh定義的轉義序列不同,%F{...}不需要包裝在%{...%}.)第二,根據最后的退出狀態是否為 0,有專門用于生成一個值或另一個值的提示轉義。
PS1='%B%F{red}[%F{yellow}%n%F{green}@%F{blue}%M '
PS1 ='%F{magenta}%~%F{red}] %(?.%F{green}.%F{red})?%b%f '
%(?.FOO.BAR)FOO如果最后一個命令成功,則擴展為,BAR否則。%f無論前面的%F代碼如何,都將顏色恢復為默認值。
%(...)事實上,它比僅僅測驗退出代碼更通用。?只是大約 20 個可測驗條件之一。舉個愚蠢的例子,假設你的生日是在 1 月 18 日。這是在你生日的時候在提示符中放一個蛋糕的一種逃避方式。
%(0D.%(18d.??.).)
有關提示轉義碼的更多資訊,請參見man zshmisc。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411858.html
標籤:
上一篇:決議linux顏色控制序列
