tmuxがPS1プロンプトに色を割り当てない

tmuxがPS1プロンプトに色を割り当てない

私は最近、端末を見て楽しむために素晴らしいSolarized色に対応するためにPS1変数を変更することにしました。 tmuxセッションではないときは、すべてがうまくいきます!虹、ポニー、ユニコーン、そしてユニークなヒント!クール!

しかし、問題はtmuxにあります。 PS1の値が正確に私が期待した値で、tmuxが実行されていないときと同じかどうか、つまり\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]

私の.bash_profileのすべてのエイリアスなども期待どおりに実行されます。 tmuxは色を正常に表示し、echo -ne "\033[1;33m hi"期待どおりに機能しますgls --color

私の.bash_profileの現在の関連行はですexport PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]"。もともと、いくつかの条件などを処理するために.bash_promptファイルからスクリプトをインポートしていましたが。もっとシンプルなバージョンに戻ってみました。

実行するとbashプロンプトの色が表示されますが、各ウィンドウで実行する必要があります。export PS1=[that long string I've already posted]しないでしょう。

私の.tmux.confは次のようになります。

set-option -g default-command "reattach-to-user-namespace -l /usr/local/bin/bash"
set -g default-terminal "xterm-256color"
set-window-option -g automatic-rename on
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

.bash_profile 関連部分:

export TERM="xterm-256color"
if which tmux >/dev/null 2>&1; then
    test -z "$TMUX" && (tmux attach || tmux new-session)
fi

私はmacOS Sierra、iTerm 2を使用していますが、現在のホームブルーバージョンのbashとシステムbash(現在のホームブルーバージョンを使用)tmux 2.4の両方を試してみました。

また、touch testing_touch_from_bash_profile2つのウィンドウを持つtmuxセッションに.bash_profileを配置し、1つのウィンドウを終了して1つを開き、ファイルが実際に作成されたことを確認しました。

echo $TERM返品xterm-256color

設定変更をテストするためにtmuxを終了すると、tmuxを終了し、現在のtmuxプロセスがps -ax | grep tmux

奇妙なことは、.bash_promptスクリプトをインポートすると、すべてのtmuxウィンドウでこれを行うたびに色も変わることです。

私は見たことがないhttps://stackoverflow.com/questions/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-wそして、.tmux.confの最初の行でbash呼び出しの後に--loginフラグを追加してみてください。 tmux を起動すると、tmux new bash最初のウィンドウは色調化されますが、後続のウィンドウは色調化されません。

$PS1変数は、フィールドの色を除くすべての部分で尊重されているようです。

誰にもアイデアがありますか?

答え1

私のコンピュータにソリューションを追加することでした。

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

到着する~/.tmux.conf

答え2

この問題に対する私の解決策は次のとおりです。

force_color_prompt=yes

私の.bashrc。今私のtmuxプロンプトに色があります。

答え3

PS1は白黒出力も提供します。

しかし、私に戻すと色が表示されるので、私が使用した違いを見つけることができます。

$ echo $PS1
\[\033[01;31m\]\t \[\033[01;32m\]durrantm \[\033[02;36m\]\h \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"` \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$

git_branchは私のbash機能です。

git_branch () { 
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

あなたと私のもの:

ここに画像の説明を入力してください。

これはOSXとUbuntuでも同じように機能します。

答え4

Ubuntu 20.04の使用中にこの問題が発生しました。

しかし、バンキーの答えsource ~/.bashrc私のために働いたが、ログインするたびに常に特定する自分自身を見つけました。マルチプレクサシェルは次のとおりです。評価済みのコメント。

私が解決した方法は次のとおりです。:

.tmuxまず~/.tmux.conf

次に、使用したい設定を入力してください。マルチプレクサ入れて保存してください。私には次の構成が必要でした。GNU画面Ubuntuはデフォルトでパッケージを使用するので、ファイルの内容を~/.bashrcその~/.tmux.confファイルにコピーしました。これにより、構成を編集する必要がある場合マルチプレクサ、私はこれを操作しませんGNU画面

ノート~/.bashrc:興味の分離に興味がない場合は、この手順をスキップしてこのファイルを使用してください。

~/.bash_profile次に、ファイルを~/.bash_loginファイルに追加します~/.profile。ファイルの下部に以下を追加する必要があります。

source "$HOME/.tmux.conf"

または

source "$HOME/.bashrc"

例は次のとおりです。

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

source "$HOME/.tmux.conf"

ノート~/.bash_profileファイルが最初、~/.bash_loginファイルが2番目、ファイル~/.profileが最後です。

それはすべてです。

これが役に立つことを願っています

関連情報