带有 Git 当前分支和颜色的 PS1行

这是我现在的 PS1:

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

如何以不同颜色显示当前分支?

103005 次浏览

只需使用适当的参数调用 tput

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

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

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

例如,这会将提示设置为当前路径的最后一个标记(绿色) ,后面跟着默认颜色的 $:

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

其他颜色也可以。看看 这篇文章在着色下的一个全面的替代清单。

这是我的 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$

alt text

对于更复杂的 Git 状态,可以使用 更大的剧本

下面是一部分一部分(不包括 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

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

Colored prompt

此外,请参阅 这个这个文章。

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解决方案。

在小说主题的 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"

如果您在某个分支机构办理了退房手续,那么您将得到该分支机构的名称。

如果您处于一个 just init’d Git 项目中,那么只会得到“@”。

如果没有 headless,那么相对于某个分支或标记,您会得到一个不错的人名,名字前面有一个“@”。

如果您是无头的,而不是某个分支或标记的祖先,那么您只能得到简短的 SHA1。

此外,红色的’-’表示一个干净的工作目录和索引,红色的’+’表示相反。

这是一个 Windows/Cygwin/Bash 解决方案。

将以下内容添加到 ~/.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\$ "

看看流动性提示:

Https://github.com/nojhan/liquidprompt

也许对于您的需求来说有点太重了,但是您可以通过设置关闭特性

LP_ENABLE_...=0

请参阅上面页面的文档。

这是我的

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\$ "

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

将它放在. bashrc 或者更好的文件中: 将它保存在/etc/bash-time 中,并从. 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'

对于我的苹果电脑,这个主题的家酿,这真的很好。完全调试,非常快,完全自给自足。 奖励: 聪明到只显示一个 git 分支作为提示的一部分,当你实际上是 进去一个 git 回购!:)

# 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 + 自制 + 彩色 Git 提示

如果希望使用完整路径(或删除.../) ,那么只需将-W 更改为-w (并删除.../)。

@ cmcginty 提示符的修改版本,增加了 git解析函数,并使用略有不同的间距:

# So I know where I am in repos:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}


# Modified from:
# https://stackoverflow.com/a/4138531/2662028
export 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\]$(parse_git_branch " (%s)")\[\e[0;39m\] \[\e[1;37m\]--|\[\e[0;39m\]\n\$ '

这也在提示符中使用 \$而不是 $,这意味着当您是 root 用户时将获得 #

快速入门:

  1. 将此添加到 ~/.bashrc:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}


export PS1="\u@\h \[\e[32m\]\w \[\e[91m\]\$(parse_git_branch)\[\e[00m\]$ "
  1. 重新启动终端或源 ~/.bashrc:

enter image description here

更多细节: https://medium.com/@thucnc/how-to-show-current-git-branch-with-colors-in-bash-prompt-380d05a24745

这个 PS1会把你当前的 git 分支涂成黄色:

Export PS1 = “[033[38; 5; 11m ] u [ $(tput sgr0)]@h: [ $(tput sgr0)][033[38; 5; 6m ][ w ][ $(tput sgr0)][033[38; 5; 226m ]($(git Branch 2 >/dev/null | grep’^ *’| colrm 12))[ $(tput sgr0)] : [ $(tput sgr0)]”

为了以更具交互性的方式了解如何构建 PS1字符串(显然可以采用其他方式) ,这里提供了一个非常方便的 PS1字符串生成器的链接。巴希尔。我把它用于上面的字符串:

Http://bashrcgenerator.com/

它以一种简单的方式解决了您的问题,更一般地解决了构建定制的彩色 shell 提示符(包括当前的 git 分支)的问题

看看这个项目 信息栏