如何修复我的 bash 提示符太长的问题?

如何修复我的 bash 提示符太长的问题?

我有以下 bash 提示符:

YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
RESET='\e[0m'

export PS1="$GREEN[\W]$YELLOW \$(__git_ps1 \"(%s) \")$RESET\\$ "

它看起来像这样:

在此处输入图片描述

这正是我想要的。但是,当我输入很长的一行时,它根本不会中断该行,而是从行首覆盖当前行。当发生这种情况并按下退格键时,该行中的所有内容都会消失。我该如何解决这个问题?

答案1

您忘记包装 的值了$RESET

重置='\[\e[0m\]

Bash 必须知道提示符的长度,才能使自动换行正常工作,并且不是\[和之间\]被计算。

答案2

更加便携的使用tput

fgred="$(tput setaf 1)"
fggreen="$(tput setaf 2)"
fgyellow="$(tput setaf 3)"
fgblue="$(tput setaf 4)"
fgpurple="$(tput setaf 5)"
fgcyan="$(tput setaf 6)"
fgwhite="$(tput setaf 7)"

bgred="$(tput setab 1)"
bggreen="$(tput setab 2)"
bgyellow="$(tput setab 3)"
bgblue="$(tput setab 4)"
bgpurple="$(tput setab 5)"
bgcyan="$(tput setab 6)"
bgwhite="$(tput setab 7)"

bold="$(tput bold)"
underline="$(tput smul)"
reset="$(tput sgr0)"

export PS1="${fggreen}[\W]${fgyellow} \$(__git_ps1 \"(%s) \")${reset}\\$ "

相关内容