tmux färbt die PS1-Eingabeaufforderung nicht ein


11

Ich habe vor kurzem beschlossen, meine PS1-Variable zu ändern, um einige hübsche Solarized-Farben für mein Terminal-Sehvergnügen aufzunehmen. Wenn Sie nicht in einer tmux-Sitzung sind, ist alles großartig! Regenbogen, Ponys, Einhörner und eine unterscheidbare Aufforderung! Cool!

Das Problem liegt jedoch bei tmux. Ich habe überprüft, dass der Wert von PS1 so ist, wie ich es erwartet habe, und der gleiche wie der, wenn tmux nicht läuft, nämlich \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

Alle meine Aliase usw. in meinem .bash_profile funktionieren ebenfalls wie erwartet. tmux zeigt auch Farben ohne Zwischenfälle an, echo -ne "\033[1;33m hi"wie erwartet gls --color.

Die aktuell relevante Zeile in meinem .bash_profile lautet export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]", obwohl ich ursprünglich ein Skript in einer .bash_prompt-Datei bezogen habe, um einige Bedingungen usw. zu behandeln. Ich habe versucht, zur einfacheren Version zurückzukehren.

Durch Ausführen bashwird die Eingabeaufforderung eingefärbt, muss jedoch in jedem Bereich ausgeführt werden. export PS1=[that long string I've already posted]wird nicht.

Meine .tmux.conf lautet wie folgt:

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

Relevante Teile von .bash_profile:

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

Ich verwende macOS Sierra, iTerm 2, ich habe sowohl die aktuelle Homebrew-Version von Bash als auch die System-Bash (derzeit wird Homebrew verwendet), tmux 2.4, ausprobiert.

Ich habe auch touch testing_touch_from_bash_profilein meinem .bash_profile während einer tmux-Sitzung mit zwei Fenstern platziert, einen Bereich getötet, einen Bereich geöffnet und überprüft, ob die Datei tatsächlich erstellt wurde.

echo $TERMkehrt zurück xterm-256color.

Ich habe sichergestellt, dass beim Beenden von tmux zum Testen von Einstellungsänderungen tmux beendet wurde und dass derzeit kein tmux-Prozess auf dem System über ausgeführt wird ps -ax | grep tmux.

Seltsamerweise ändert die Beschaffung des Skripts .bash_prompt auch die Farbe, solange ich dies in jedem tmux-Bereich tue.

Ich habe mir /programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w angesehen und versucht, das Flag --login nach dem Bash-Aufruf in der ersten Zeile hinzuzufügen meiner .tmux.conf. Wenn Sie tmux mit starten, tmux new bashwird das erste Fenster eingefärbt, nachfolgende Fenster jedoch nicht.

Die Variable $ PS1 wird für scheinbar alle Aspekte außer dem Färben eines der Felder berücksichtigt.

Hat jemand irgendwelche Ideen?


Versuchen Sie einfache Anführungszeichen
Kevin

5
Die von PS1Ihnen veröffentlichte Einstellung enthält keinen Befehl zum Ändern der Farben. Veröffentlichen Sie eine aktuelle Einstellung, die außerhalb von tmux funktioniert. Außerdem sollten Sie setzen PS1in .bashrc, nicht in .bash_profile: .bash_profilemöglicherweise nicht ausgeführt werden, und die Einstellungen möglicherweise überschrieben später sein.
Gilles 'SO - hör auf böse zu sein'

Antworten:


3

Deine PS1 gibt mir auch Schwarz-Weiß-Ausgabe.

Wenn ich jedoch zu meinem zurückschalte, bekomme ich Farbe, sodass Sie in der Lage sein sollten, die Unterschiede herauszufinden, die ich verwende

$ 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 ist eine Bash-Funktion, die ich habe:

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

Deine gegen meine:

Geben Sie hier die Bildbeschreibung ein

Dies funktioniert unter OSX und Ubuntu genauso


8

Meine Lösung für dieses Problem war das Einstellen

force_color_prompt=yes

in meinem .bashrc. Jetzt hat meine tmux-Eingabeaufforderung Farbe.


Ich bin mir nicht sicher, warum sich dies in tmux anders verhält als außerhalb, aber das hat auch für mich den Trick getan.
Matt Lacey

Mit der Tinte sollten Sie tmuxFolgendes angeben: Sie müssen den Befehl ausführen und dann innerhalb einer tmux-Sitzung ausführen source ~/.bashrc. Sie müssen dies in jedem Panel tun.
evaristegd

Danke, diese Arbeit für mich auch auf Ubuntu 18.04 Gnome-Terminal.
Intijk

0

Auf meinem Computer besteht die Lösung darin, hinzuzufügen

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

zu ~/.tmux.conf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.