【发布时间】:2013-07-19 11:23:18
【问题描述】:
到目前为止,我一直很想从 bash 切换到 zsh。 只有一个问题,我对我的提示很挑剔。我用 终端一整天,我花了很长时间才得到提示 以我想要的方式看待和表现。顺便说一句,我把它放在一起 来自不同的来源和一些我自己的东西,它可能包含 错误或未正确编写代码。我只想知道是否有人 知道我可以粘贴到我的 zshrc 中的代码,它会给我 完全相同的提示。
我真正喜欢的两个功能是可变长度工作目录 如果 pwd 太长并且目录分隔符斜线具有 与目录名称不同的颜色。此提示还设置了动态终端标题。
由于某些声誉,我无法发布图片 或其他东西,但这里是代码。
my_prompt()
{
local NONE="\[\033[0m\]"
local COLOR1="\[\033[0;30m\]"
local COLOR2="\[\033[0;31m\]"
local COLOR3="\[\033[0;32m\]"
local COLOR4="\[\033[0;33m\]"
local COLOR5="\[\033[0;34m\]"
local COLOR6="\[\033[0;35m\]"
local COLOR7="\[\033[0;36m\]"
local COLOR8="\[\033[0;37m\]"
local COLOR9="\[\033[1;30m\]"
local COLOR10="\[\033[1;31m\]"
local COLOR11="\[\033[1;32m\]"
local COLOR12="\[\033[1;33m\]"
local COLOR13="\[\033[1;34m\]"
local COLOR14="\[\033[1;35m\]"
local COLOR15="\[\033[1;36m\]"
local COLOR16="\[\033[1;37m\]"
# How many characters of the $PWD should be kept
local PWDLEN=55
## Indicate that there has been dir truncation
local TRUNC=".."
local DIR=${PWD##*/}
PWDLEN=$(( ( PWDLEN < ${#DIR} ) ? ${#DIR} : PWDLEN ))
TITLE_PWD=${PWD/#$HOME/\~/}
local pwdoffset=$(( ${#TITLE_PWD} - PWDLEN ))
if [ ${pwdoffset} -gt "0" ]
then
TITLE_PWD=${TITLE_PWD:$pwdoffset:$PWDLEN}
TITLE_PWD=${TRUNC}/${TITLE_PWD#*/}
fi
local DIR_SEP_COLOR=$COLOR10
local DIR_COLOR=$COLOR5
local HOSTNAME_COLOR=$COLOR5
local AT_COLOR=$COLOR10
local USER_COLOR=$COLOR5
IN=$TITLE_PWD
arr=$(echo $IN | tr "/" "\n")
unset NEWDIR
for x in $arr
do
if [ "$x" == "~" ]
then
NEWDIR="$NEWDIR$DIR_COLOR$x"
else
NEWDIR="$NEWDIR$DIR_SEP_COLOR/$DIR_COLOR$x"
fi
done
TITLEBAR='\[\033]0;\u@\h:${TITLE_PWD}\007\]'
MYPS1="${USER_COLOR}\u${AT_COLOR}@${HOSTNAME_COLOR}${HOSTNAME}$DIR_SEP_COLOR:${DIR_COLOR}${NEWDIR}${NONE}"
PS1="${TITLEBAR}${MYPS1}${COLOR12}»${NONE} "
}
PROMPT_COMMAND=my_prompt
另一件事是我不喜欢做类似的事情
echo \`pwd` | grep "/"
获得不同颜色的斜线,因为我也希望能够更改目录名称的颜色
编辑和回答:
感谢西蒙特的回答。我认为您对我无法进行搜索的批评正是我开始所需的一记耳光和动力:) 基本上我使用了链接号 2 multi color path in prompt
开始。我想出了以下,它并不完美(即随机颜色......) 但它是一个很好的起始模板。 以下是我当前的 .zshrc :
prompt_working_dir() {
# How many characters of the $PWD should be kept
local PWDLEN=55
## Indicate that there has been dir truncation
local TRUNC=".."
local DIR=${PWD##*/}
local PWDLEN=$(( ( PWDLEN < ${#DIR} ) ? ${#DIR} : PWDLEN ))
local TITLE_PWD=${PWD/#$HOME/\~/}
local pwdoffset=$(( ${#TITLE_PWD} - PWDLEN ))
if [ ${pwdoffset} -gt "0" ]
then
TITLE_PWD=${TITLE_PWD:$pwdoffset:$PWDLEN}
TITLE_PWD=${TRUNC}/${TITLE_PWD#*/}
fi
IN=$TITLE_PWD
arr=(${(s:/:)IN})
unset NEWDIR
if [ "$arr[1]" "==" "~" ]
then
NEWDIR="%{$fg[blue]%}$arr[1]"
#delete 1st element
arr[1]=()
for x in $arr
do
NEWDIR="${NEWDIR}%{$fg_bold[cyan]%}/%{$reset_color%}%{$fg[blue]%}$x"
done
elif [ "$arr[1]" "==" ".." ]
then
NEWDIR="%{$fg[blue]%}$x%{$fg_bold[cyan]%}/"
#delete 1st element
arr[1]=()
for x in $arr
do
NEWDIR="${NEWDIR}%{$reset_color%}%{$fg[blue]%}$x%{$fg_bold[cyan]%}/"
done
else
for x in $arr
do
NEWDIR="${NEWDIR}%{$fg_bold[cyan]%}/%{$reset_color%}%{$fg[blue]%}$x"
done
fi
echo "${NEWDIR}"
unset PWDLEN
unset TRUNC
unset DIR
unset PWDLEN
unset TITLE_PWD
unset pwdoffset
unset IN
unset arr
}
setopt PROMPT_SUBST
autoload -U colors && colors
# set window title to user@host %directory-----------
precmd () {print -Pn "\e]0;%n@%M: %~\a"}
SEP=":"
PROMPT='%{$fg[blue]%}%m%{$reset_color%}'\
'%{$fg_bold[cyan]%}@%{$reset_color%}'\
'%{$fg[blue]%}%n%{$reset_color%}'\
'%{$fg_bold[cyan]%}$SEP%{$reset_color%}'\
'$(prompt_working_dir)%{$reset_color%}'\
'%{$fg_bold[cyan]%}»%{$reset_color%} '
【问题讨论】:
-
我想出的上述答案是错误的,从那时起我想出了一个正确的答案,但我添加了其他超出此问题范围的内容。只是警告要谨慎使用上述代码