bash 提示符中带有彩色 git 分支的无换行符

bash 提示符中带有彩色 git 分支的无换行符

根据关于此主题的几个教程,我添加了一个函数来.bashrc解析我当前正在处理的 git 分支并将其显示在我的 bash-prompt 中。我的代码片段如下所示:

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如果我不使用标志,问题就会消失echoparse_git_branch但我需要它将分支涂成红色。

有想法该怎么解决这个吗?

我在谷歌搜索时发现的所有其他解决方案都只是打印彩色的 git 分支或什么都不打印,所以它们对我来说不太适用,因为如果有 git 分支的话,我希望它打印它如果不用白色打印该字符。

答案1

将颜色序列包装在 readline 转义符中,如下所示:

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

readline 转义位于\001非打印序列的开头和\002结尾。它们分别相当于PS1 字符串中的\[和。\]

来源:archemiro 的回答bash 提示和函数内部回显颜色_bash_帮酷编程问答

相关内容