zsh修改提示符,顯示路徑每一級的首字母,使用者和前一命令返回值
前提:使用了 oh-my-zsh
,我的主題是預設主題 robbyrussell,我按照這個主題來講解,使用其他主題請修改對應的 theme 檔案。
顯示路徑每一級的首字母和最後一級目錄的全名
預設主題只顯示路徑最後一級名字,其他的一些主題可能顯示完整路徑,但那太長了。我只發現主題 fishy 是這樣顯示的,這也和 fish 命令列相同。
修改方法:
vim ~/.oh-my-zsh/themes/robbyrussell.zsh-theme
新增一個函式
_fishy_collapsed_wd() {
local i pwd
pwd=("${(s:/:)PWD/#$HOME/~}")
if (( $#pwd > 1 )); then
for i in {1..$(($#pwd-1))}; do
if [[ "$pwd[$i]" = .* ]]; then
pwd[$i]="${${pwd[$i]}[1,2]}"
else
pwd[$i]="${${pwd[$i]}[1]}"
fi
done
fi
echo "${(j:/:)pwd}"
}
在 PROMPT 那一行,把表示目錄的 %c
(其他主題可能是 %C
,%~
,%2
等)改成 $(_fishy_collapsed_wd)
,重啟 zsh 即可。
顯示使用者
在 PROMPT 前適當加上 %{$fg_bold[blue]%}${USER}
即可。左邊的是在設定顏色。
顯示上一條命令返回值
這個預設主題,當返回值為 0 時箭頭為綠色,非 0 時為紅色,我想讓他非 0 時顯示返回值。
解決方案:PROMPT 適當位置加上 %?
,記得不要寫成 $?
因為後者只顯示第一個數字(好像是這樣,我沒仔細查過)。
我的 zsh 主題配置和效果
~/.oh-my-zsh/themes/robbyrussell.zsh-theme
if [ `id -u` -eq 0 ];then
PROMPT="%(?:%{$fg_bold[red]%}root %{$fg_bold[green]%}➜ :%{$fg_bold[red]%}root %{$fg_bold[red]%}%? ➜ )"
else
PROMPT="%(?:%{$fg_bold[blue]%}${USER} %{$fg_bold[green]%}➜ :%{$fg_bold[blue]%}${USER} %{$fg_bold[red]%}%? ➜ )"
fi
_fishy_collapsed_wd() {
local i pwd
pwd=("${(s:/:)PWD/#$HOME/~}")
if (( $#pwd > 1 )); then
for i in {1..$(($#pwd-1))}; do
if [[ "$pwd[$i]" = .* ]]; then
pwd[$i]="${${pwd[$i]}[1,2]}"
else
pwd[$i]="${${pwd[$i]}[1]}"
fi
done
fi
echo "${(j:/:)pwd}"
}
PROMPT+=' %{$fg[yellow]%}$(_fishy_collapsed_wd)%{$reset_color%} $(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[blue]%}git:(%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
效果:
root 使用者顯示為紅色: