zsh修改提示符,顯示路徑每一級的首字母,使用者和前一命令返回值

KZ25T發表於2024-06-26

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 使用者顯示為紅色:

相關文章