PS1线与git当前分支和颜色

这是我目前的PS1

export PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' 

我怎样才能以不同的颜色显示当前分支?

你可以用下面的颜色来包装你想要的部分:

\e[0;32m – 设置颜色(在这种情况下为绿色)

\e[m – 将颜色设置回默认值

例如,这会将提示设置为当前path的最后一个标记(绿色),接着是默认颜色$

 export PS1='\e[0;32m\w\e[m $' 

其他颜色也可用。 看看这篇文章在彩色化下的全面select。

这里是部分(不包括ruby):

 function color_my_prompt { local __user_and_host="\[\033[01;32m\]\u@\h" local __cur_location="\[\033[01;34m\]\w" local __git_branch_color="\[\033[31m\]" #local __git_branch="\`ruby -e \"print (%x{git branch 2> /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '(\1) ')\"\`" local __git_branch='`git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ /`' local __prompt_tail="\[\033[35m\]$" local __last_color="\[\033[00m\]" export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color " } color_my_prompt 

看起来像这样(用我自己的terminal调色板):

彩色提示

另外,看到这个和这个 arcticle

这是我的PS1线:

 \n\[\e[1;37m\]|-- \[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]--|\[\e[0;39m\]\n$ 

替代文字

 function pc { [ -d .git ] && git name-rev --name-only @ } PS1='\e];\s\a\n\e[33m\w \e[36m$(pc)\e[m\n$ ' 

PS1

资源

这是我的PS1解决scheme

在小说主题的Mac上看起来很棒。 对不起,我的缩进一点点。 砍它,直到你喜欢它。

 function we_are_in_git_work_tree { git rev-parse --is-inside-work-tree &> /dev/null } function parse_git_branch { if we_are_in_git_work_tree then local BR=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD 2> /dev/null) if [ "$BR" == HEAD ] then local NM=$(git name-rev --name-only HEAD 2> /dev/null) if [ "$NM" != undefined ] then echo -n "@$NM" else git rev-parse --short HEAD 2> /dev/null fi else echo -n $BR fi fi } function parse_git_status { if we_are_in_git_work_tree then local ST=$(git status --short 2> /dev/null) if [ -n "$ST" ] then echo -n " + " else echo -n " - " fi fi } function pwd_depth_limit_2 { if [ "$PWD" = "$HOME" ] then echo -n "~" else pwd | sed -e "s|.*/\(.*/.*\)|\1|" fi } COLBROWN="\[\033[1;33m\]" COLRED="\[\033[1;31m\]" COLCLEAR="\[\033[0m\]" # export all these for subshells export -f parse_git_branch parse_git_status we_are_in_git_work_tree pwd_depth_limit_2 export PS1="$COLRED<$COLBROWN \$(pwd_depth_limit_2)$COLRED\$(parse_git_status)$COLBROWN\$(parse_git_branch) $COLRED>$COLCLEAR " export TERM="xterm-color" 

如果您在分支机构签出,则会获得分行名称。

如果你在一个刚刚开始的git项目中,你只要得到'@'

如果你是无头的,你会得到一个相对于某个分支或标签的好名字,在名字前面有一个“@”。

如果你是无头的,而不是一个分支或标签的祖先,你只需要短的SHA1。

另外,红色的“ – ”表示干净的工作目录和索引,红色的“+”表示相反的意思。

_C

我超级强大的多行Linux提示符!

把它放在.bashrc或者更好的地方:把它保存在/ etc / bash-prompt中,然后从你的.bashrc中获取它。
使用tput应该是做颜色的正确方法。

 #!/bin/bash set_prompt() { local last_cmd=$? local txtreset='$(tput sgr0)' local txtbold='$(tput bold)' local txtblack='$(tput setaf 0)' local txtred='$(tput setaf 1)' local txtgreen='$(tput setaf 2)' local txtyellow='$(tput setaf 3)' local txtblue='$(tput setaf 4)' local txtpurple='$(tput setaf 5)' local txtcyan='$(tput setaf 6)' local txtwhite='$(tput setaf 7)' # unicode "✗" local fancyx='\342\234\227' # unicode "✓" local checkmark='\342\234\223' # Line 1: Full date + full time (24h) # Line 2: current path PS1="\[$txtbold\]\[$txtwhite\]\n\D{%A %d %B %Y %H:%M:%S}\n\[$txtgreen\]\w\n" # User color: red for root, yellow for others if [[ $EUID == 0 ]]; then PS1+="\[$txtred\]" else PS1+="\[$txtyellow\]" fi # Line 3: user@host PS1+="\u\[$txtwhite\]@\h\n" # Line 4: a red "✗" or a green "✓" and the error number if [[ $last_cmd == 0 ]]; then PS1+="\[$txtgreen\]$checkmark \[$txtwhite\](0)" else PS1+="\[$txtred\]$fancyx \[$txtwhite\]($last_cmd)" fi # Line 4: green git branch PS1+="\[$txtgreen\]$(__git_ps1 ' (%s)')\[$txtwhite\]" # Line 4: good old prompt, $ for user, # for root PS1+=" \\$ " } PROMPT_COMMAND='set_prompt' 

只需用适当的参数调用input。 请参阅tput(1)terminfo(5)手册页。

看看liquidprompt:

https://github.com/nojhan/liquidprompt

可能对您的要求太重,但您可以通过设置closuresfunction

LP_ENABLE_...=0

请参阅上面的文档。

这是一个Windows / cygwin / bash解决scheme。
将以下内容添加到〜/ .bashrc文件中。
xxx是你的本地Git仓库的位置。

 GetBranch() { cat /cygdrive/c/xxx/.git/HEAD | sed 's+^ref: refs/heads/++' } export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[36m\]\$(GetBranch) \[\e[33m\]\w \[\e[0m\] \n\$ " 

这是我的

 export PS1="\n\[\033[1;30m\][$$:$PPID - \j:\!\[\033[1;30m\]]\[\033[0;36m\] \T \ \[\033[1;30m\][\[\033[1;34m\]\u@\H\[\033[1;30m\]:\[\033[0;37m\]${SSH_TTY:-o} \ \[\033[0;32m\]+${SHLVL}\[\033[1;30m\]] \[\033[1;37m\]\w\[\033[0;37m\]\[\033[1;34m\]\$(__git_ps1 \" (%s)\") \[\033[0;37m\] \n\$ " 

对于更复杂的git状态,你可以使用一些更大的脚本

对于我的Mac与Homebrew主题,这工作得很好。 完全debugging,非常快速,完全独立

 # Color prompt for git reset=$(tput sgr0) boldgreen=$(tput setaf 2)$(tput bold) cyan=$(tput sgr0)$(tput setaf 6) boldred=$(tput setaf 1)$(tput bold) boldwhite=$(tput setaf 7)$(tput bold) boldyellow=$(tput setaf 3)$(tput bold) PARENCLR=$'\001\e[0;36m\002' BRANCHCLR=$'\001\e[1;33m\002' alias branchname="git branch 2>/dev/null | sed -ne 's/^* \(.*\)/ ${PARENCLR}(${BRANCHCLR}\1${PARENCLR}\)/p'" GIT_STATUS='$(branchname)' PROMPT_CHAR="\$" PS1="\[$boldgreen\]\u\[$cyan\]::\[$boldred\]\h \[$cyan\]{\[$boldwhite\].../\W\[$cyan\]}\[$reset\]$GIT_STATUS\[$reset\]$PROMPT_CHAR " 

下面是它的样子: Mac + Homebrew + Color Git Prompt

如果你想拥有完整的path(或删除… /),那么只需将-W改为-w(并删除… /)即可。