OSX + iTerm2 + vim + ssh + CentOS/本机颜色配置原理小分析

前一段时间需要从本地SSH到某台云服务器查看配置文件,BOSS在我边上跟我一起找文件。找毕,BOSS说:“你这颜色看着不难受么?辨识度太低了”当时我的屏幕是这样的:

其实我也是这么认为的,这颜色太惨了。漆黑的背景,深深蓝色的标识符,实在是看不清楚。说搞就搞,网上找各种配色方案,先来一打iTerm2的配色方案,再把其中的背景图片也设置一下,先不说远端服务器的效果(因为有坑,后说),本机已经是这样的了:

一不做而不休,把本机的oh-my-zsh也在自己CentOS的腾讯云主机里搞一套,当然vim的配色也不能少,都要搞的漂漂亮亮的:

这些配色都还没什么,基本上随便选个zsh主题,选个vim主题,选个iTerm2主题,基本都可以看起来比较舒服了。(主要是自己舒服)

但是,但是!

在选iTerm2主题的时候出现了问题:有时候我选择不同的主题,为什么感觉zsh的条没有变化呢?

这简直就**尴尬了。。那岂不是意味着,那些恶心的蓝色,还会是一如即往的恶心?可这到底是为什么呢?明明用户名都是变色龙一样的了,为啥有些字死活就不动呢?百度不到靠谱的答案,只能google了。在StackOverflow上找到了一个问题,答主热心的解答了其中的原理:

There are two layers of settings/themes at work here:The terminal or terminal emulator, in your case iTerm2
Depending on the terminal only a limited color palette is supported. "Traditionally" there have been 16 colors: 8 Normal and 8 Light/Bright. They are assigned the code 0 to 7 and 8 to 15, respectively. They also have names, with the codes n and n+8 sharing the same name…

由于不是英语课,我就不在这里全文引用了。感兴趣的同学可以通过上面的链接进去看到原文。

我在这里简单介绍下答主的中心思想:

  • 终端显示总共经历了两(三)层:

    1. 应用(如:vim)/ shell:决定了显示成什么样的颜色
    2. 用户终端(如:iTerm2): 决定了怎么显示
    3. 你看到了颜色

这么说毕竟太抽象了,不妨换个说法:

  • 你上课的时候通过后桌的男生传话给最后面的女生也经历了两(三)个步骤:

    1. 你说:我爱你,
    2. 结果后桌也喜欢最后面的小女生,他知道你是在表白,就把你的表白变成了表黑,但他看不懂函数,于是他和小女生说:**说他可烦你了,还给了个公式
    3. 于是小女生看到了你后桌传过来的信息,就是这样的:***说他可烦你了,还有 

看到这一定更糊涂了吧!哈哈!其实后面的故事主要是想表示,各种各样的终端会将应用传过来的信息展示给最终用户看,但是有些终端软件已知的一组预定义颜色是可以被它替换成特定颜色的。而它本身读不懂的颜色(其实是没有替换策略的颜色)就会原封不动的传给坐在显示器前的你的。这样就可以知道,为什么有些颜色可以跟着securtCRT/iTerm2的配色而变,有些不可以了吧?

接下来再具体的展示下如何实现,以及怎么调整配色使配色万年不变或者随着终端千变万化。先看这样一条命令

print -P ‘%F{yellow}yellow %F{2}green %1Fred %F{117}light blue‘

把这条命令通过你的linux终端执行一下,就可以看到如下结果

再输入一条命令:

for a in {0..255}; printf "\x1b[48;2;255;${a};0m \x1b[0m"

可以看到如下结果:

现在可以开始我们的实验了,打开iTerm2的Colors配置页,调整当前页面的配色(选了个Batman)

可以看到结果:在蝙蝠侠的配色下,红的绿的文字被变成了不同的黄色,但是RGB颜色调出来的彩虹是没有变化的。按照这个思路,找到zsh的主题配置页,路径如下:

\~/.oh-my-zsh/themes

对其中一个固定颜色的片段进行调整,用iTerm2所能调整的颜色之一Blue定义这个片段(变化在光标处)1

用source命令生效.zshrc后看看效果:

这样就可以让zsh的配色随着iTerm2的不同主题发生变化了!

同理,大家可以看下vim的主题描述中,大量的使用了非RGB的方式来对配色进行描述。这样带来的好处是,心情变化的时候换配色很容易!

最后附上 ANSI escape code在wiki上的链接以及这些可以随终端配色变化而变化的颜色名称列表,:

  1. 参考自:

    http://stackoverflow.com/questions/689765/how-can-i-change-the-color-of-my-prompt-in-zsh-different-from-normal-text ?

时间: 2024-10-19 04:12:59

OSX + iTerm2 + vim + ssh + CentOS/本机颜色配置原理小分析的相关文章

CentOS虚机Ip配置

前提:虚机网络配置选择NAT 1.查看本虚机的Ip,地址是多少,点击vm编辑-虚拟网络编辑器 2.选择VMnet8, 点击Nat设置 3.记住这些地址 4.进入系统,进入文件  vi /etc/sysconfig/network-scripts/ifcfg-eth0  修改其中的配置,和刚刚配置的一致 DEVICE=eno[数字] // 这是网卡的名称 NAME=eno[数字] ONBOOT=yes // 是否随着开机自启动 BOOTPROTO=static // static表示固定ip地址,

在虚拟机里安装centos 6.4和centos 5.8里配置vim 7.4安装过程

下是centos 6.4里安装vim配置操作命令 [BEGIN] 2014/5/13 星期二 上午 10:08:54 [[email protected] ~]# rpm -qa | grep vim [[email protected] ~]# yum remove vim vim-enhanced vim-common vim-minimal [[email protected] ~]# wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2

window用ssh连接本机虚拟机中的ubuntu

@window用ssh连接本机虚拟机中的ubuntu 主机和虚拟机间通信,需将2台机器的IP地址设为同一网段. 1.设置虚拟机: 虚拟机–> 设置–> Hardware –> Network Adapter,在网络连接处设置为 “桥接:直接连接到物理网络”,“NAT:使用已共享的主机IP地址”处打勾. 2.window和虚拟机下ubuntu的IP地址设为同一网段Ubuntu配置和修改IP地址请看本博客相关文章Ubuntu配置和修改IP地址 3.互ping下,判断windows与linux

ssh实现多机互信

ssh(secure shell安全外壳协议)SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台.SSH在正确使用时可弥补网络中的漏洞.SSH客户端适用于多种平台.几乎所有UNIX平台-包括HP-UX.Linux.AIX.Solaris.Digital UNIX.Irix,以及其他平台,都可运行SSH. 目的:实

CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)

服务器系统环境:CentOS 6.3 客户端系统环境:Windows 7 ultimate(x86)sp1 简体中文旗舰版 ※  本文档描述了如何在Linux服务器配置Apache.Mysql.PHP5 LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl.PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和

centos 安装glassfish4.0 配置jdbc连接mysql

版本glassfish-4.0.zip 1.解压,拷贝到指定安装路径 unzip glassfish-4.0.zip  cp cp glassfish4 /usr/local/ -rf 2.设置glassfish环境变量 vim  /etc/profile export GLASSFISH_HOME=/usr/local/glassfish4 export PATH=.:$PATH:$JAVAHOME/bin:$MYSQLHOME/bin:$GLASSFISH_HOME/bin source /

解决克隆centos虚拟机后ip配置失败的问题

第一步:切换到root用户 #su - 第二步:修改hosts文件 #vi  /etc/hosts 192.168.1.63  datanode63 --多余的内容删除 第三步:修改主机名: #vi  /etc/sysconfig/network 将HOSTNAME修改为:datanode63 NETWORKING=yes HOSTNAME=datanode63 第四步:修改网卡配置  保最后一条网站并网站名称(NAME="eth0")修改为:eth0,其它信息删除 将ATTR(add

Linux学习之CentOS 7----网卡的配置

[正文] Linux系统版本:Centos 6.5 Linux系统版本:Centos 7 前面,我们使用远程工具SecureCRT,通过“ifconfig eth0 + 具体的ip地址”命令给linux配了IP地址(参考本人博客:远程登录管理工具SecureCRT的使用 ),但是这样配置的问题在于: 只能临时生效,一旦重启,需要重新配置: 只能配置ip地址和子网掩码,可以连接内网,是无法连接外网的. 如果想要连接外网,ip地址.子网掩码.网关.DNS缺一不可.今天来讲,如何真正的给CentOS配

virtualbox创建虚机后配置网络上网

一般来说常用的会配置两个网卡:(两个网卡应该在安装虚拟机之前就设置好) 1.NAT网络: 用于上外网: 2.host-only: 用于ssh连接,可以被其他人远程访问. 前提: 如图:在virtualbox下设置全局的网络 操作步骤:   1 -->  全局设定 --> 2 --> 3 -- > 4 --> OK. 首先用于上网的NAT网络配置如下: 一般网卡的路径为:vi /etc/sysconfig/network-scripts/ifcfg-eth0      # vi