我想要tmux
自动选择256色模式,即有一个环境变量
TERM=tmux-256color
里面 tmux
当环境变量
TERM=xterm-256color
已设置外部。
默认行为
256色终端仿真器
当前的行为是tmux
在任何情况下都选择 8 色模式:使用支持 256 色的终端模拟器,即 Gnome Terminal 或 xterm,并确保它支持 256 色
echo $TERM; tput colors
# xterm-256colors
# 256
然后开始tmux
。默认tmux
会切换为8种颜色:
echo $TERM; tput colors
# screen
# 8
8色终端仿真器
如果您切换到 8 色终端,即/dev/tty2
按 Ctrl+Alt+F2 切换到,您将得到
echo $TERM; tput colors
# linux
# 8
和里面tmux
一样旧
echo $TERM; tput colors
# screen
# 8
强制 256 色模式
我可以强制tmux
选择256色模式通过添加以下内容~/.tmux.conf
set -s default-terminal "tmux-256color"
然而,这也适用于如果外部终端仿真器一开始就不支持256色。这不是我想要的。
自适应256色模式
有一个问题和一个常问问题在 GitHub 上,声明设置其中之一(人们报告相互矛盾的参数)
set -ga terminal-overrides ",xterm-256color*:Tc"
set -sa terminal-overrides ",xterm-256color*:Tc"
set -ga terminal-overrides ",*256col*:Tc"
set -sa terminal-overrides ",*256col*:Tc"
应该tmux
选择终端的颜色模式,但它们都不适用于我的安装(Arch 上的 tmux 3.0)。
是否有一种明确的方法可以tmux
根据当前终端仿真器支持的颜色来选择 8 种颜色或 256 种颜色?
答案1
这并不是 tmux 本身可以完全为您做的事情,因为它无法更改已经运行的程序上的 TERM,例如,如果您从带有 xterm-256color 的终端分离并重新连接到带有 xterm 的终端。
不过,您可以自己做。客户端的术语以 client_termname 格式提供。因此,您可以将类似的内容放入 PS1 或 .profile 或其他内容中:
if [ -n "$TMUX" ]; then
T=$(tmux display -p '#{client_termname}')
case "$T" in
*-256color)
export TERM=tmux-256color
;;
*)
export TERM=tmux
;;
esac
fi
显然,如果您在未附加的会话中创建窗格(client_termname 将为空),则默认为 tmux;如果您有一个会话附加到多个客户端,则默认为最近使用的客户端中的 TERM。
如果您不想像这样在 shell 中执行此操作,则可以使用客户端附加挂钩来更改默认终端 - 但这仅适用于新窗格,而不适用于现有窗格。
另一种选择是始终使用 tmux-256color 运行,并在外部终端无法执行 256 色时让 tmux 将颜色向下转换。
关于 Tc 的常见问题解答中的所有内容都是关于 RGB 颜色(真彩色),而不是您所询问的内容。