当我在终端中时,我有一个喜欢的配色方案,但我从多个来源(本地、PuTTY、我的上网本等)通过 ssh 进入我工作的机器,并且我希望始终保持相同的配色方案。这可能吗?
我特别想要在 PuTTY 中使用它;改变 PuTTY 颜色很困难。
答案1
终端的颜色分两步确定:
- 终端中运行的程序告诉终端使用特定的颜色编号;
- 终端将每个颜色编号转换为颜色值。
Xterm 有一个转义序列更改与颜色编号关联的颜色值。我不记得PuTTY是否支持这个序列;我知道薄荷做。
set_color_value () {
printf "\\e]4;$1;$2\\a"
}
set_color_value 4 '#6495ed' # set color 4 (blue) to CornflowerBlue
这些设置在终端重置后将无法保留。您可以通过将光标配置更改序列附加到终端的重置字符串来克服此困难。
- 在使用 ncurses 的基于 terminfo 的系统上,将终端的 terminfo 设置保存到扩展名为 .terminfo 的文件中
infocmp >>~/etc/terminfo.txt
。编辑描述以更改rs1
(基本重置)顺序,例如替换rs1=\Ec
为rs1=\Ec\E]4;4;#6495ed\E\\
。对于某些程序和设置,您可能还需要更改rs2
(完全重置)。然后编译 terminfo 描述tic ~/etc/terminfo.txt
(这将写入目录下$TERMINFO
,或者~/.terminfo
如果未设置)。 - 在基于 termcap 的系统上,从 termcap 数据库获取 termcap 设置(通常为
/etc/termcap
)。更改is
(基本重置)和rs
(完全重置)序列以附加您的设置,例如:is=\Ec\Ec\E]4;4;#6495ed\E\\:
。将环境变量设置TERMCAP
为编辑的值(以 开头和结尾:
)。
现在你可以把这样的东西放在你的~/.profile
:
if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
[ "$TERM" = "xterm" ]; then
set_color_value … # set color scheme
TERMCAP=… # if necessary
fi
答案2
你正在ssh
进入只是一盒子对吗?为什么不直接PS1
在该框中设置变量来使用您想要的颜色方案?如果你将其保持为 16 种颜色,那么在任何现代设备上都不会有问题TERM
,大多数应该支持 256 色,但大多数都没有TERM=xterm-256color
开箱即用,有些傻瓜(咳嗽我的雇主咳嗽) 清理TERM
为仅字母数字。不幸的是,在你的变量中放入什么PS
,很大程度上取决于你正在使用的 shell。