Vim色彩配置相关的问题
终于把我的工作环境配置的算是点满意了,同时也对这个颜色配置这个东西的理解上了个阶梯。于是记录一下备忘。
首先发现一个问题,字体的颜色显示结果很可能是跟终端有关系的。比如,同样的配置文件,用putty链接主机的显示效果和在桌面上用terminal上打开的效果完全不同。
这里就不讨论putty的问题了,由于色彩效果太差,如果有需要远程登录的以后会用VNC来解决,putty就做个简单配置连接算了,不作为主要编辑方式了。
下面提到的是桌面上的cterm方案,目前在debian上使用感觉比较满意。
首先是终端的配色,默认系统颜色是白底黑字,看上去有些过于晃眼。我喜欢比较暗淡一些的颜色。其实bg=黑色,前景色用墨绿色是个很好的方案。但是有个问题:因为一般不同的文件会有不同的颜色来显示,而普通文件一般用白色。在我系统上默认的可执行文件的颜色是绿色系的,所以如果普通文件也用绿色会分不太清。因此我最终采用的配色方案问:背景色为:#2D2D2D,前景色为:#BBBBBB。 就是深灰色底色,浅灰色前景。效果还不错。
之后是vim的配置。以前多次想搞明白怎么改vim的色彩以满足自己需求,这次终于略有小成了。
首先是搞个local的文件夹。vim的系统文件在vim里叫做$VIMRUNTIME,在Linux下面一般是/usr/share/vim/vim72。 local的话在$HOME下面建立一个.vim/ 的隐藏文件夹,像$VIMRUNTIME下一样建立各种配置的文件夹。比如自己的配色方案放在~/.vim/colors下面,准备工作就做好了。
然后当然是vimrc里面要打开语法高亮: set syntax on。 这里面有个概念,我一直不理解语法文件和配色文件是如何各司其职的。现在的感觉应该是这样子的:语法文件只是定义了一些模式的匹配方式。比如在Vim中,有的模式叫comment注释,有的模式叫做类型type,有的模式叫做语句(statement)。Vim根据扩展名去查找相应的语法文件,然后对其中的文本进行模式匹配。以C++为例的话,它可能碰到#开头的东西,就知道是与处理器指令,就把这些东西归为PreProc这个模式。碰到int,char, double这些,就知道是个类型。因此会将其归为type这个模式。碰到if, while 之类的,就归为statement这个模式。总共有哪些模式,是由Vim定义的。而怎么触发这些模式的匹配,比如是用 // 表示注释还是 # 表示注释,这个是语法文件来定义的。
因此,有了这些基础之后,Vim的配色方案里面其实就做很简单的事情。我来定义不同的语法项(前面所说的模式》用什么颜色来表示。比如,darkblue这个配色方案中规定,cterm下,comment 用 darkred显示,Constant用magenta显示,Statement用yellow显示等等。如下图:
话说回来,这个darkblue的配色方案其实是针对gui下说的。cterm下面其实不是蓝色的,不过我很喜欢那个灰色的样子。
所以,想改哪个类型的颜色的话,将配色方案中的颜色改掉就好了。具体支持哪些颜色呢? 这个可以从help中找到。 在vim中,用:help cterm-colors,就可以找到如下的描述:
这样想要什么颜色就改就好了。如果想找gui下的颜色,可以类似用:help gui-colors之类的方式。
另外,如果对某一项专门想改变字体的话,可以用cterm=bold或者gui=bold 的方式进行。
有个需要注意的地方是,不同颜色的字体看上去粗细不是一样的。即使都是normal的字体下。