多路复用器

多路复用器

多路复用器

我跟着在 tmux 中使用 256 种颜色:

  • 我有alias tmux='TERM=xterm-256color tmux'~/.bashrc
  • 并且set-option -g default-terminal "screen-256color"也在~/.tmux.conf

konsole

$ echo $TERM
xterm

tmux

$ echo $TERM
screen-256color

颜色仍然不起作用tmux

boris@vasilisa:~$ PROMPT_GREEN=`tput setf 2`
boris@vasilisa:~$ PROMPT_RED=`tput setf 4`
boris@vasilisa:~$ PROMPT_BLACK=`tput setf 8`
boris@vasilisa:~$ PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

结果是黑白颜色提示。亦无色带ls

屏幕

我有force_color_prompt=yes~/.bashrc.仍然:

boris@vasilisa:~$ PROMPT_GREEN=`tput setf 2`
boris@vasilisa:~$ PROMPT_RED=`tput setf 4`
boris@vasilisa:~$ PROMPT_BLACK=`tput setf 8`
boris@vasilisa:~$ PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

不会使提示变得丰富多彩。但与tmux--相比,ls列出带有颜色的文件。

所以

我想tput setf只是不应该与终端多路复用器一起使用?

编辑

我必须更改setfsetaf,并且还更改颜色代码:

PROMPT_BLACK=`tput setaf 0`
PROMPT_RED=`tput setaf 1`
PROMPT_GREEN=`tput setaf 2`
PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

我不需要别名tmux,设置

设置选项-g 默认终端“screen-256color”

~/.tmux.conf足够了。

所以我把

# colorful prompt
PROMPT_BLACK=`tput setaf 0`
PROMPT_RED=`tput setaf 1`
PROMPT_GREEN=`tput setaf 2`
PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto --group-directories-first'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# man pages with color!
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

# enable colors:
force_color_prompt=yes

在两者中:~/.bashrc~/.bash_login然后颜色在 中起作用tmux

答案1

正如您完全正确地猜测的那样,在( ) terminfosetf条目的上下文中设置前景色的功能不正确。您应该使用(使用 ANSI 转义设置前景色)。xterm-256colorscreen-256colorsetaf

$ echo $TERM
screen-256color

$ infocmp -1 | grep setf
$ infocmp -1 | grep setaf
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,

笔记:

  1. 您不需要这样做alias tmux='TERM=xterm-256color tmux',请确保您的终端模拟器在启动时报告正确的值TERM=xterm-256color
  2. 如果 (1) 为真,那么tmux将在其中正确设置您的TERMto screen-256color,如果您在 Linux 控制台上运行,它也会正确设置它screen.linux,可能存在您需要操作它的情况,但通常不需要

答案2

对我有用的是将以下几行放入我的 .bashrc 文件中:

    if [ "x$DISPLAY" != "x" ]
    then
        export HAS_256_COLORS=yes
        alias tmux="tmux -2"
        if [ "$TERM" = "xterm" ]
        then
            export TERM=xterm-256color
        fi
    else
        if [ "$TERM" == "xterm" ] || [ "$TERM" == "xterm-256color" ]
        then
            export HAS_256_COLORS=yes
            alias tmux="tmux -2"
        fi
    fi

    if [ "$TERM" = "screen" ] && [ "$HAS_256_COLORS" = "yes" ]
    then
        export TERM=screen-256color
    fi

让我知道这是否有帮助。


请注意,该解决方案基于此邮政

相关内容