【问题标题】:how to migrate my bash prompt to zsh如何将我的 bash 提示符迁移到 zsh
【发布时间】: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%} '

【问题讨论】:

  • 我想出的上述答案是错误的,从那时起我想出了一个正确的答案,但我添加了其他超出此问题范围的内容。只是警告要谨慎使用上述代码

标签: bash zsh prompt


【解决方案1】:
  1. Use colors
  2. 有关路径截断,请查看this。关于他的作品的相当详细的讨论(我在提示中使用了类似的东西)。
  3. 颜色目录名称不同:阅读this answer,它解决了类似的问题(我想:我不太确定你在问什么)。
  4. 更改终端标题:阅读this,以及(2)中的链接。

您还应该阅读Stackoverflow Help Page,特别是链接的部分。如果您遇到问题,请编辑您的问题以包含您尝试过的内容您的问题是什么

很多关于 Stackoverflow 的问题,以及超级用户:(Example) 和 Unix.SX (Example)。有很多让你开始。

【讨论】:

  • 不要使用colors%F{color}/%K{color} 令牌在“提示序列的扩展”部分中描述。这些标记的优点是您可以阅读echo $PS1 并且需要更少的字符来输入。那里还描述了包括路径在内的所有其他标记(但不包括更改终端标题)。请注意,对于某些用例,%~%/ 的内置路径截断就足够了(例如,%3~ 用于路径的最后三个组件,%-3~ 用于第一个组件)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
相关资源
最近更新 更多