同じ行に継続するのではなく、行が上書きされます

同じ行に継続するのではなく、行が上書きされます

bash プロンプトに問題があります。画面の幅を超える長さのコマンドを入力すると、同じ行に継続され、書き込んだ内容が上書きされ、その後 2 行目に継続されます。

これは私の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詳しい説明については。

関連情報