tmux não colore o prompt do PS1

tmux não colore o prompt do PS1

Recentemente, decidi alterar minha variável PS1 para acomodar algumas lindas cores Solarizadas para o prazer de visualização do meu terminal. Quando não está em uma sessão tmux, tudo está ótimo! Arco-íris, pôneis, unicórnios e uma dica distinguível! Legal!

O problema está dentro do tmux, no entanto. Verifiquei que o valor de PS1 é o que espero que seja e o mesmo que é quando o tmux não está em execução, ou seja \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\], .

Todos os meus aliases, etc. no meu .bash_profile também estão funcionando conforme o esperado. tmux também está exibindo cores sem incidentes, pois echo -ne "\033[1;33m hi"se comporta conforme o esperado gls --color.

A linha atual relevante em meu .bash_profile é export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]", embora originalmente eu estivesse fornecendo um script localizado em um arquivo .bash_prompt para lidar com algumas condicionais, etc.

A execução bashfará com que o prompt fique colorido, mas deve ser feito em cada painel. export PS1=[that long string I've already posted]não vou.

Meu .tmux.conf é o seguinte:

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}"

Partes relevantes de .bash_profile:

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

Estou usando o macOS Sierra, iTerm 2, tentei a versão homebrew atual do bash e o bash do sistema (atualmente está usando o homebrew), tmux 2.4.

Também coloquei touch testing_touch_from_bash_profileno meu .bash_profile enquanto estava em uma sessão tmux com dois painéis, matei um painel, abri um painel e verifiquei se o arquivo foi de fato criado.

echo $TERMretorna xterm-256color.

Eu garanti que, ao sair do tmux para testar as alterações nas configurações, saí do tmux e que nenhum processo tmux está em execução no sistema via ps -ax | grep tmux.

Estranhamente, o fornecimento do script .bash_prompt também altera a cor, desde que eu faça isso em cada painel do tmux.

eu olheihttps://stackoverflow.com/questions/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-we tentei adicionar o sinalizador --login após a chamada do bash na primeira linha do meu .tmux.conf. Iniciar o tmux tmux new bashfará com que o primeiro painel seja colorido, mas os painéis subsequentes não.

A variável $PS1 está sendo homenageada aparentemente em todos os aspectos, exceto na coloração de qualquer um dos campos.

Alguém tem alguma ideia?

Responder1

Na minha máquina a solução é adicionar

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

para ~/.tmux.conf.

Responder2

Minha solução para esse problema foi definir

force_color_prompt=yes

no meu .bashrc. Agora meu prompt do tmux tem cor.

Responder3

Seu PS1 também me oferece saída em preto e branco.

No entanto, voltar para o meu me dá cor, então você deve ser capaz de descobrir a diferença, eu uso

$ 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 é uma função bash que tenho, que é:

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

Seu versus meu:

insira a descrição da imagem aqui

Isso funciona da mesma forma no OSX e no Ubuntu

Responder4

Eu tive esse problema ao trabalhar no Ubuntu 20.04.

EnquantoA resposta de Pankifuncionou para mim, sempre especificava source ~/.bashrcsempre que fazia loginTmuxshell seguindoevaristegdcomentário de.

Veja como eu consertei:

Primeiramente, crie um arquivo chamado .tmuxno diretório inicial da sua máquina, que é ~/.tmux.conf.

Em seguida, coloque a configuração que deseja usar paraTmuxdentro dele e salve-o. Para mim a configuração que eu precisava era a mesma doTela GNUpacote que vem por padrão com o Ubuntu usa, então copiei o conteúdo do ~/.bashrcarquivo para o ~/.tmux.confarquivo. Desta forma, se eu tiver que editar alguma das configurações doTmux, eu não mexeria com aquele para oTela GNU.

Observação: você pode pular esta etapa e apenas usar o ~/.bashrcarquivo se não se importar com a separação de interesses.

Em seguida, adicione o arquivo ao arquivo ~/.bash_profile, ~/.bash_logine ~/.profile. Deve ser adicionado no final do arquivo:

source "$HOME/.tmux.conf"

OU

source "$HOME/.bashrc"

Aqui está um exemplo:

# ~/.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"

Observação: o ~/.bash_profilearquivo tem a primeira precedência, depois o ~/.bash_loginarquivo como a segunda precedência e, em seguida, o ~/.profilearquivo como a última precedência.

Isso é tudo.

Eu espero que isso ajude

informação relacionada