
私の中にカラーヒントを設定しました.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
。シェルにはfish
tmuxにカラーヒントがあります。 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
m
SGR 0とSGR 33を考慮します。他のターミナルエミュレータは、制御シーケンスを正しく処理するために、より厳しいかまだサブパラメータサポートを実装していません。サブパラメータが33のSGR 0、通常のSGR 0(最初の数字を使用)、または単にSGR 33(最後の数字を使用)として考えることができます。
数年前でも、ターミナルエミュレータはサブパラメータをまったくサポートしていなかったため、将来的にはすべてサブパラメータを正しくサポートします。この場合、ヒントは簡単です。普遍的に間違っています。 ☺
%F{yellow}
個人的には、プロンプトのようにシーケンスを使用でき、制御シーケンスが何であるか、正しく使用する方法、空白ではないとマークする方法について心配する必要がないZシェルを好みます。
答え2
これティモックスFAQ指摘
tmux 内の TERM は、「screen」、「tmux」、または同様のもの (たとえば「tmux-256color」) でなければなりません。存在しない問題を報告しようとしないでください!
xterm-256color
とは異なりますtmux-256color
。