如何使用多行提示保留git_ps1呈现的颜色?

时间:2017-01-31 20:48:28

标签: git bash macos prompt

我有以下.bash_profile

#Change alias for ls to include colours
alias ls='ls -Gh'

#Enable git branch completion
source ~/git-completion.bash

#Allows git information to be visible in prompt
source ~/git-prompt.sh

GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWCOLORHINTS=1

# ANSI colors: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
CYAN="\[\033[0;36m\]"
LIGHT_GREY="\[\033[0;37m\]"
DARK_GREY="\[\033[1;30m\]"
NO_COLOUR="\[\033[0m\]"

##################################
#Configure multiline prompt
# Prompt appearance should be:
#[RED]user@host[\RED] [CYAN]working_directory[\CYAN] git_branch [COLOUR_FROM_GIT]asterix_indicator[COLOUR_FROM_GIT] ==>
#==>
##################################
#This works for a multiline prompt and no colours
PS1='\[\033[0;31m\]\u@\h\\[\033[0m\] \[\033[0;36m\]\w\[\033[0m\] $(__git_ps1 "(%s)")==> \n==>'

根据git-prompt.sh文件,我应该在设置GIT_PS1_SHOWDIRTYSTATEGIT_PS1_SHOWCOLORHINTS标志时看到颜色。如果有任何未提交的更改,我应该看到一个红色的星号。我只看到一个绿色的星号。

一旦发生这种情况,我就能得到红色的星号并保存了我的bash_profile。但是,当打开一个新终端时,我的更改已经消失。

任何想法原因:

  • 我看不到红色的星号(ANSWERED)
  • 为什么我不能在提示中使用为颜色声明的变量名称,例如$RED\u@\h$NO_COLOUR,并且必须使用ASCII值。使用变量名时,它们将呈现为字符串。
  • 我在更改后重新加载后,设置无法正确呈现 source ~\.bash_profile

我正在使用OSX Sierra。

谢谢!

编辑:我已经接近我想要的地方了: PROMPT_COMMAND='__git_ps1 "\[\033[0;31m\]\u@\h\[\033[0m\]:\[\033[0;36m\]\w\[\033[0m\]" "\\\$ "' 我暂时放弃了为颜色使用变量名称。但是,如果我尝试在此插入换行符,例如:PROMPT_COMMAND ='__ git_ps1“[\ 033 [0; 31m] \ u @ \ h [\ 033 [0m]:[\ 033 [0; 36m] \ w [\ 033 [0m]“”\\ $ \ n $“'并将'$'替换为'==>'然后它打破了git分支信息。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

  

根据git-prompt.sh文件,我应该在设置时看到颜色   GIT_PS1_SHOWDIRTYSTATEGIT_PS1_SHOWCOLORHINTS标记。

在那个文件中你可以阅读(强调我的):

  

颜色基于" git status -sb"的彩色输出。仅在将__git_ps1用于PROMPT_COMMAND或precmd 时才可用

因此,为了查看彩色提示,您需要将__git_ps1用于PROMPT_COMMAND。在脚本的顶部有一个如何执行此操作的示例:

PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'