13

端末に色を付けるための次のコードがあります。

export PS1="\e[1;30m\][\e[\e[1;30m\]\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \e[1;30m\]]\n[\[ \e[1;31m\]\T\[\e[0m\]\e[1;30m\] ] > \e[37m\]"

しかし、私には 1 つの問題があります。テキストが新しい行にある場合、最初の行が上書きされます。

例:

4

1 に答える 1

19

bash がプロンプトが占有する画面スペース (したがって、実際のコマンド ラインの開始位置) を把握するには、プロンプトの非印刷部分を で囲む必要があります\[...\]。ほとんどの場合、これは のようなエスケープ シーケンスを のよう\e[1;30mに記述する必要があることを意味し\[\e[1;30m\]ます。プロンプトにいくつか\[の とがあり\]ますが、それらは間違った場所にあり、bash を非常に混乱させています。あなたのものと同じくらい複雑なプロンプトの印刷部分と非印刷部分をすべて見つけるのは簡単ではありませんが、これでうまくいくと思います:

export PS1='\[\e[1;30m[\e[\e[1;30m\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \[\e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]'
于 2013-01-08T23:16:57.517 に答える