この問題について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が誤って計算したようです。$Time12a
GIT_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の色です。です。