这个 bash 提示有什么问题?

这个 bash 提示有什么问题?

我在文件中使用以下条目~/.bashrc来为提示着色并显示 git 存储库的当前分支:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

这几乎可以正常工作,除了当我使用 bash 历史记录(向上箭头键几次)时,命令行变为“缩进”(仅提示符的第一个字符保持不变),并且可见的是:

usemmand

当我的用户名是user并且命令是时command

答案1

\[并且\]只应在命令提示符的部分中使用不要前进光标,尽管有实际文本。如果__git_ps1产生任何可见的输出,那么这将使您的命令行不同步。

答案2

这是正确的版本:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

答案3

任何遇到过此问题的人,下面是对我有用的示例:

前:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

后:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

注意周围的所有'\\[\\]'颜色。

相关内容