zsh修改提示符,显示路径每一级的首字母,用户和前一命令返回值

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 用户显示为红色:

posted @ 2024-06-26 21:10  KZ25T  阅读(49)  评论(0编辑  收藏  举报