リバース検索で複数行の端末プロンプトが壊れる

リバース検索で複数行の端末プロンプトが壊れる

PS1そこに入れたい場合は、どのように\n正しく設定しますか?

PS1="\[\033[38;5;132m\]\n┌─■ testing\n└─■ \[$(tput sgr0)\]"

現在の端末の前景色が実際のプロンプト色と異なるため、逆方向検索(Ctrl + R)を使用すると、線の色がPS1で指定されたプロンプト色では​​なく前景色にリセットされます。

デモ

答え1

書式が失われた行の先頭でエスケープエンコードを繰り返す必要があります。

PS1="\[\033[38;5;132m\]\n┌─■ testing\n\[\033[38;5;132m\]└─■ \[$(tput sgr0)\]"

他の行も同様の影響を受ける可能性があるため、各改行文字の後にエスケープコードを適用するのが最善です。ただし、空白行に適用する必要はありません。だからこれが私たちの結論です:

PS1="\n\[\033[38;5;132m\]┌─■ testing\n\[\033[38;5;132m\]└─■ \[$(tput sgr0)\]"

私はそれをテストし、すべてが私に効果的でした。 (私はこのような色の複数行のプロンプトをしばらく問題なく使用してきました。)

おそらくここで何が起こっているのかは、readlineが行を上書きして(したがって色をリセットして)、値の対応するPS1部分だけを使用して再描画することです。行に色を明示的に適用しないため、デフォルトの色(白など)が得られます。

関連情報