我最近决定更改我的 PS1 变量以适应一些漂亮的 Solarized 颜色,以满足我的终端观看乐趣。当不在 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_profile
具有两个窗格的 tmux 会话中放置了 .bash_profile ,杀死了一个窗格,打开了一个窗格并验证了该文件确实已创建。
echo $TERM
返回xterm-256color
。
我已确保在退出 tmux 以测试设置更改时,我已退出 tmux 并且当前没有 tmux 进程通过ps -ax | grep tmux
.
奇怪的是,只要我在每个 tmux 窗格中执行此操作,获取 .bash_prompt 脚本也会更改颜色。
我看过https://stackoverflow.com/questions/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w并尝试在 .tmux.conf 第一行的 bash 调用之后添加 --login 标志。启动 tmuxtmux 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
文件次之,~/.profile
文件最后。
就这样。
我希望这有帮助