web-dev-qa-db-ja.com

bashの色プロンプトがgit出力を台無しにする

シェルプロンプトが色付けされるように.bashrcをexport PS1="\033[1;33m\u@\h: \w>\033[0m"を含めるように変更しましたが、\033がgit出力(少なくともlogとdiff)を台無しにしているようです。 ESC[33mcommit long-commit-number ESC[mのようなものが表示されます。

\e[の代わりに\033[も試しましたが、それでもESC[33mが表示されます。これを回避しながら、シェルプロンプトの色を維持する方法はありますか?

2

プロンプト設定は正しくありませんが、gitの問題とはまったく関係ありません。

行編集を機能させる(つまり、プロンプトが印刷された後のカーソルの位置を知る)には、bashはプロンプトの幅を正確に知る必要があります。考えられるすべての端末固有のエスケープシーケンスを認識できるわけではないため、プロンプトの特定の部分が表示されないことを明示的に通知する必要があります。それらは\[および\]コードで囲まれている必要があります。例えば:

PS1="\[\033[1;33m\]\u@\h: \w>\[\033[m\]"

これを行わないと、1行より長いコマンドを入力すると、2行目が最初の行を上書きしたり、その他の不具合が発生したりすることがよくあります。

ただし、これはgitには影響しません。 git logESC[33mを出力する理由は、git自体がその行を黄色で表示することを望んでいるためです。カラーオプションcolor.uiが有効になっています。黄色の代わりに「ESC」という単語を参照する理由は、$ PAGERがシーケンスを認識しないためです。 (人間が読めるテキストではなく)バイナリデータを含むファイルを読んでいると見なします。

デフォルトのlessページャーを$ PAGERとして使用している場合、$LESS変数にいくつかのカスタムオプションを追加した可能性がありますそして色を許可するものを忘れてしまいました。 -R。通常、gitはページャーの実行時に内部的に$LESSを設定しますが、その変数を自分で設定した場合、gitはそれに触れず、-Rを追加する必要があります。

export LESS="R"

export LESS="e M q R F X z -3"

...またはそれらの線に沿った何か。

4
user1686