Нет разрыва строки с цветной веткой git в приглашении bash [дубликат]

На этот вопрос уже есть ответ здесь:

Я добавил функцию в свой .bashrc , чтобы проанализировать ветку git, в которой я сейчас работаю, и отобразить ее в моем bash-приглашении в соответствии с несколькими учебные пособия по этой теме. Мой фрагмент кода выглядит так:

parse_git_branch() { 
   BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
   if [ "$BRANCH" != "" ]; then
      echo -e "[\e[1;31m⎇ $BRANCH\e[1;37m]"
   else
      echo "╼"
   fi
}
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[1;37m\]┌[\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;32m\]\H\[\033[1;37m\]] [\w]\n└$(parse_git_branch) \[\033[00m\]'

else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Как и ожидалось, текущая ветка git отображается красным цветом, если она есть: скриншот

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

Проблема исчезнет, ​​если я не использую флаг -e для echo в parse_git_branch , но я нужно, чтобы он окрасил ветку в красный цвет.

Есть идеи, как это исправить?

Все остальные решения, которые я нашел при поиске в Google, просто выводят либо цветную ветку git, либо ничего, поэтому они не совсем работают для меня, так как я хочу, чтобы она распечатывала ветку git, если она есть , а если нет выведите этот -символ белым цветом.

-1
задан 21 March 2018 в 17:35

1 ответ

Перенесите цветные последовательности в Escape readline как так:

echo -e "[\001\e[1;31m\002⎇ $BRANCH\001\e[1;37m\002]"

Escape readline \001 в начале непечатаемой последовательности, и \002 в конце. Они эквивалентны \[ и \], соответственно, в строке PS1.

Источник: ответ archemiro на подсказке удара и отзывающихся эхом цветах в функции - Переполнение стека

0
ответ дан 30 October 2019 в 05:29

Другие вопросы по тегам:

Похожие вопросы: