Добавить имя ветки git в командную строку - PullRequest
19 голосов
/ 03 мая 2009

Я хотел использовать одну из функций Git-complete.bash, но не могу настроить внешний вид, который хотел бы иметь. Вот соответствующая часть моего .bash_profile:

source ~/.git-completion.bash

function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY}
$ "
}
prompt

и имя ветви не отображается.

Однако, если я заменю экспорт PS1 выше на приведенный ниже, он будет работать как положено:

export PS1='\w$(__git_ps1 "(%s)") > '

Я думаю, это проблема с апострофом / кавычками.

Как мне исправить первую версию, чтобы она заработала?

Ответы [ 2 ]

31 голосов
/ 03 мая 2009

Хитрость в том, чтобы получить право цитирования, состоит в том, чтобы получить что-нибудь в двойных кавычках, за исключением $(__git_ps1 "(%s)"), который в одинарных кавычках.

source ~/.git-completion.bash
function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}"
}
prompt

Альтернативное решение заключается в замене $( на \$( в указанном коде.

Справочная информация: выполняются две замены: сначала в export PS1="..." время, а затем, когда отображается подсказка. Вы хотите выполнять __git_ps1 каждый раз, когда отображается приглашение, поэтому вы должны убедиться, что при первой замене $(...) останется нетронутой. Итак, вы пишете либо '$(...)', либо "\$(...)". Вот две основные идеи, которые лежат в основе предложенных мной решений.

5 голосов
/ 03 мая 2009

Не уверен, но vcprompt может решить это лучше для вас?

...