我希望tmux
自动选择256个颜色模式,即有一个环境变量。
TERM=tmux-256color
在环境变量时 tmux
内
TERM=xterm-256color
在外部设置为。
当前的行为是tmux
在任何情况下都选择8种颜色模式:使用支持256种颜色的终端模拟器,即Gnome终端或xterm,并确保它支持256种颜色。
echo $TERM; tput colors
# xterm-256colors
# 256
然后启动tmux
。默认情况下,tmux
将切换到8种颜色:
echo $TERM; tput colors
# screen
# 8
如果您切换到一个8色终端,即通过按Ctrl+Alt+F2切换到Ctrl+Alt+F2,您将得到
echo $TERM; tput colors
# linux
# 8
在tmux
里面也是老样子
echo $TERM; tput colors
# screen
# 8
通过将以下内容添加到我可以强迫tmux
选择256颜色模式中来实现~/.tmux.conf
set -s default-terminal "tmux-256color"
但是,如果<#>outer终端模拟器一开始不支持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上使用tmux3.0)。
根据当前终端仿真器支持的内容,是否有明确的方法让tmux
选择8种或256种颜色?
发布于 2019-11-27 20:39:21
这实际上并不是tmux完全可以为您所做的事情,因为它不能更改已经在运行的程序的术语,例如,如果您从带有xTer-256颜色的终端中分离出来,然后重新连接到带有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,如果您将一个会话附加到多个客户端,则为来自最近使用的客户端的术语。
如果您不想在shell中这样做,可以使用客户端附加的钩子来更改默认终端,但这只适用于新窗格,而不适用于现有窗格。
另一种选择是始终使用tmux-256颜色运行,并让tmux在外部终端不能处理256种颜色时将颜色翻译下来。
所有常见问题中关于Tc的东西都是关于RGB颜色(真正的颜色),而不是你要问的东西。
https://unix.stackexchange.com/questions/554432
复制相似问题