Bashがプロンプト長を正しく計算できない

Bashがプロンプト長を正しく計算できない

この問題についてGoogleでよく検索したところ、次の関連質問が見つかりました。端末プロンプトが正しくラップされません。

私の問題は、bashがプロンプトの長さを正しく計算していないため、私が次のことをしたり、ctrl履歴rをスクロールしたりすると問題が発生することです。これは基本的に(色なしで)見える様子です。

✔ name@machine ~

01:09 $

たとえば、上矢印を使用して前のコマンドをスクロールすると、特定の文字がプロンプトで停止します。

✔ name@machine ~

01:09 $m

時々、いくつかのプロンプトを上書きするなど、他の奇妙な動作が発生することがあります(再ロードすると、すべてのプロンプトが消えます)。私のヒントは次のとおりです。

GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"

GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "

私が使用するものは次のとおりですgit-bash-prompt。>https://github.com/magicmonty/bash-git-prompt>。

私がめちゃくちゃだと思うのは、別のファイルで定義された時間変数です。

Time12a="\$(date +%H:%M)"

私は試しましたが、それら\[$Time12a\]のどれも動作しないようです。私の考えでは5文字(hh:mm)を表すので、bashが誤って計算したようです。$Time12aGIT_PROMPT_END_USER$Time12a

bashはこの長さをどのように計算しますか? Bashで長さを明示的に設定できますか?答えてくれて本当にありがとう!

答え1

だから何がめちゃくちゃであるかを調べましたが、予想したものとは異なりました:)

実際、bashは \[$ResetColor\] を使って何らかの理由で一歩先の長さを計算します(bashは私のプロンプトが一歩長すぎると思います)。

この変数は、他のすべての色と一緒に「bash-git-prompt」によって定義されます(質問のgit-repoリンクを参照してください)。とにかく修正は簡単です。私は彼らの定義を私の定義に上書きしました。

ResetColor=$(tput sgr0)

安定!

(しかし、他の人がこの問題に遭遇した場合に備えて、$ COLOR = $(tput setaf X)を使用して、私の定義で使用されている他のすべての色をオーバーライドしました。ここで、COLORは希望の色で、Xはxterm-256の色です。です。

関連情報