行被覆盖而不是继续在同一行

行被覆盖而不是继续在同一行

我在使用 bash 提示符时遇到了问题。当我输入的命令长度超出屏幕宽度时,它会继续在同一行上执行并覆盖我所写的内容,然后再继续执行第二行。

这是我的 PS1:

PS1="\$(git_prompt) ${BIWhite}\W${Color_Off} → "

变量

BIWhite='\e[1;97m'
Color_Off='\e[0m'

然后是 git_prompt 的脚本:

git_prompt() {
local g="$(__gitdir)"
if [ -n "$g" ]; then
    local MINUTES_SINCE_LAST_COMMIT=`minutes_since_last_commit`
    if [ "$MINUTES_SINCE_LAST_COMMIT" -gt 30 ]; then
        local COLOR=${BRed}
    elif [ "$MINUTES_SINCE_LAST_COMMIT" -gt 10 ]; then
        local COLOR=${BIYellow}
    else
        local COLOR=${BGreen}
    fi
    local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)m${Color_Off}"
    # The __git_ps1 function inserts the current git branch where %s is
    local GIT_PROMPT=`__git_ps1 "(%s|${SINCE_LAST_COMMIT})"`
    echo ${GIT_PROMPT}
fi}

感谢大家的帮助!谢谢!

答案1

不移动光标的字符必须包含在 PS1 中的\[和之间\],否则 bash 会认为提示比实际的要长。并且由于此变量的使用方式,您无法让函数发出彩色文本,因为您无法正确转义它。

http://mywiki.wooledge.org/BashFAQ/053了解更多解释。

相关内容