bash $ PS1のカラーコードがtmuxでは機能しません。

bash $ PS1のカラーコードがtmuxでは機能しません。

私の中にカラーヒントを設定しました.bash_profile

export PS1="\[\033[0:33m\]testprompt@\h\[\033[00m\] "

tmuxの外部では、カラープロンプトの読み値が表示されますtestprompt@hostname

tmux セッション内でテキストは設定されますが、プロンプトには色はありません。他のプログラムでは色が正常に出力されます。

次の位置にカラー端子が設定されています.tmux.conf

set -g default-terminal "xterm-256color"

macOSでデフォルトの端末を使用しています。 BashとtmuxはHomebrewパッケージマネージャの最新バージョンです。 tmux は、内部と外部で同じバージョンの bash を実行します。

次の環境変数は、tmuxの内部と外部で同じです。

$ echo $PS1
\[\033[0:33m\]testprompt@\h\[\033[00m\]`
$ echo $TERM
xterm-256color
$ echo $SHELL
/usr/local/bin/bash
$ echo $BASH_VERSION
4.4.23(1)-release

ls -la色は、などのtmuxの他のコマンドとよく合いますgit log。シェルにはfishtmuxにカラーヒントがあります。 tmuxで新しいインスタンスを再度開くと、bash違いはありません。それでも色はありません。.bash_profile読み取りと$PS1設定。ヒントの色は、画面とtmuxの外側の「生」のbashでは機能しますが、tmuxでは機能しません。私は何を見逃していますか?

ベストアンサー1

TERM端末タイプが誤って仮定するのではなく、常に端末タイプと一致するように環境変数を設定する必要があるのは事実ですが、環境変数はプロンプトシーケンスに含まれるリテラルコントロールとは関係がないため、実際にはxterm-*質問には関係ありません。TERM

問題は、制御シーケンスでパラメータではなくサブパラメータを使用していることです。パラメータは;ECMA-48:1991§5.4.2で指定されているようにセミコロンで区切られています。サブパラメータは:ITU-T T.416:1993§13.1.8で指定されているようにコロンで区切られています。

外部端末エミュレータは、子引数を引数として処理するbodgeを使用して子引数を処理するエミュレータの1つです。したがって、CSI 0 : 3 3 mSGR 0とSGR 33を考慮します。他のターミナルエミュレータは、制御シーケンスを正しく処理するために、より厳しいかまだサブパラメータサポートを実装していません。サブパラメータが33のSGR 0、通常のSGR 0(最初の数字を使用)、または単にSGR 33(最後の数字を使用)として考えることができます。

数年前でも、ターミナルエミュレータはサブパラメータをまったくサポートしていなかったため、将来的にはすべてサブパラメータを正しくサポートします。この場合、ヒントは簡単です。普遍的に間違っています。 ☺

%F{yellow}個人的には、プロンプトのようにシーケンスを使用でき、制御シーケンスが何であるか、正しく使用する方法、空白ではないとマークする方法について心配する必要がないZシェルを好みます。

おすすめ記事