我试图在vim
内screen
内部gterm
处理screen
的语法高亮显示(256色)。
一开始工作得很好。我在“开头”的意思是,在我开始vim
之后,输入hi Comment ctermfg=68
,颜色看起来很好,并且有256种颜色。
但过了一会儿(我不确切知道多长时间),颜色会自动变回外观,好像只有8种(或16种)颜色。
例如,在此之后,如果我输入命令
vim
在vim
内,评论似乎是“纯粹的”绿色;但是,如果我打开另一个attrcolor b ".I"
defbce "on"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term xterm-256color
外部屏幕(在同一个终端中),则使用相同的命令,注释看起来是“黄色”绿色。
以下是与color:
相关的.screenrc设置screen
运行python脚本显示所有颜色后,我发现这可能是屏幕本身的问题,与vim无关。
我所做的是,在有问题的putty
会话中,这个脚本提供256种颜色,但其中许多实际上是相同的;但是,当我使用相同配置启动新的屏幕会话时,此脚本会提供256种颜色,这些颜色彼此不同。
编辑:
昨晚我使用screen
连接到我的Linux计算机(位于我的办公室,并且始终打开),然后打开了一个screen
会话,其中包含多个窗口。昨晚的颜色是正确的。然后在我睡觉之前,我分开了putty
会话并关闭了screen
。
现在早上当我再次在putty
附加screen
会话时,颜色会崩溃:它们看起来好像只有8种颜色。
putty
之外的颜色很好(但仍然在vim
)。
编辑:
三年后,在我提出这个问题之后,今天我看到了类似的问题。问题是screen
可以在screen
之外显示256种颜色,vim
可以使用测试脚本显示256种颜色,但screen
无法显示任何颜色(只能显示)在.screenrc
内显示黑白)。就像对自己的说明一样,这是我正在使用的hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c"
shell "bash"
startup_message off
vbell off
altscreen on
attrcolor b ".I"
defbce "on"
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term screen-256color
文件
export TERM=xterm-256color
在接受的答案中已经提到了问题的解决方案,即我需要包括
.bashrc
{{1}}中的。
答案 0 :(得分:86)
将TERM
设置为xterm-256color
中的.bashrc
,并将term screen-256color
放入.screenrc
。
这就是为什么会中断:gnome-terminal,screen,tmux,bash,putty和vim已经所有写入以智能处理256种颜色,但你需要尽早正确设置点。在termcapinfo
中使用.screenrc
实际上是一种胶带解决方案!
如果你的TERM
设置正确,它会发出信号暗示你处于256色模式,这意味着它也会在256色模式下运行得很好。
所以,在.bashrc
,export TERM=xterm-256color
。 [1]
在.screenrc
中,使用screen-256color
代替TERM
而不是xterm-256color
,并删除其他内容!
在PuTTy配置中,使用putty-256color
。
您可以下载termcap条目文件,并将它们放在~/.terminfo/s
和~/.terminfo/p
中,如果您的框默认没有它们。
脚注
[1]在TERM
中将xterm-256color
设置为.bashrc
可能有点冒昧,特别是如果您在多台计算机上使用相同的.bashrc
。我发现以下代码段非常有效:
case "$TERM" in
*-256color)
alias ssh='TERM=${TERM%-256color} ssh'
;;
*)
POTENTIAL_TERM=${TERM}-256color
POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM
# better to check $(toe -a | awk '{print $1}') maybe?
BOX_TERMINFO_DIR=/usr/share/terminfo
[[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
export TERM=$POTENTIAL_TERM
HOME_TERMINFO_DIR=$HOME/.terminfo
[[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
export TERM=$POTENTIAL_TERM
;;
esac
ssh的alias
是一种防御措施,可以防止我们尝试在不一定支持它的远程计算机上打开256色终端。主要部分是等式的另一半;它检查相应的terminfo条目是否存在,如果存在则设置它。
答案 1 :(得分:15)
Max有一个很好的答案,但我实际上必须 ./configure --enable-colors256
重新安装屏幕,以确保config.h
文件具有{{1在我的机器上默认不是这样的。然后,我发现其他设置不是必需的,只要我确保我的#define COLORS256 1
设置为TERM
。
答案 2 :(得分:1)
在最新版本的屏幕(v4.99.0)中,无需在term screen-256color
中使用.screenrc
。即使没有此设置,屏幕内外的Vim颜色也完全相同。
注1:我已经在Mac OS High Sierra 10.13.4和Ubuntu 16.04上测试了此功能。
可以使用获取最新版本的屏幕
git clone https://git.savannah.gnu.org/git/screen.git
。
注2:与某些以前的版本不同,configuring这个版本的屏幕不需要使用--enable-colors256
选项
注意3:要成功完成此配置,您需要具有PAM支持。在ubuntu中,您可以使用sudo apt-get install libpam0g-dev
注4:在执行sudo
时,您需要在Ubuntu上拥有make install
访问权限,因为此步骤使用chown
。