今天想弄一下VIM的函数高亮,结果搞了一个下午,才终于搞定。

首先是按照下面这个网址写了一个 ~/.vim/syntax/c.vim

http://blog.csdn.net/wooin/article/details/1858917 "======================================================== " Highlight All Function "======================================================== syn match cFunction "/<[a-zA-Z_][a-zA-Z0-9]/>[^()])("me=e-2 syn match cFunction "/<[a-zA-Z][a-zA-Z_0-9]/>/s("me=e-1 hi cFunction gui=NONE guifg=#B5A1FF

"======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+/*/%=]" " C pointer operators syn match cPointerOperator display "->/|/." " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=/=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "/(&/||/|/^/|<>/)=/=" syn match cBinaryOperator display "/~" syn match cBinaryOperatorError display "/~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&/|||" syn match cLogicalOperatorError display "/(&&/|||/)="

" Math Operator hi cMathOperator guifg=#3EFFE2 hi cPointerOperator guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cBinaryOperator guifg=#3EFFE2 hi cBinaryOperatorError guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cLogicalOperatorError guifg=#3EFFE2

但是非常悲剧的是这个用起来没有作用而且还报错。结果在下面的评论中才发现原来所有的 '/' 都

应该是 '\'。

按照下面这个网址改了一下,但是还是悲剧。虽然不报错了,但是函数还是没有高亮。

http://www.cppblog.com/besterChen/archive/2010/02/21/108124.aspx

然后找到另外一个网址,内容如下:

"highlight Functions syn match cFuntions display "[a-zA-Z_]{-1,}\s{-0,}({1}"ms=s,me=e-1 hi def link cFuntions Title 就是先定义一个语法匹配,然后将匹配的高亮设为Title(深红色的函数高亮,很像Visual Asist)。当然也可以设为其他的高亮定义,自己定义颜色也行。

使用下面的命令来获得颜色组的完整列表:

so $VIMRUNTIME/syntax/hitest.vim

我把颜色的那一句改为hi def link cFuntions Title,终于有变化了,这个原因我继续向下找。

在下面这个网址我找到了部分线索。

首先使用VIM和VI的非兼容模式,在~/.vimrc中使用 set cp

然后打开一个 c文件
set cp?

就可以知道现在是否兼容.

然后在 ~/.vimrc 中加入下面的内容 代码: nnoremap :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"

这个是解除 ctrl+h 绑定 光标左移的功能

目的是为了确认到底是没有成功设置颜色组还是没有成功设置颜色。
代码:
set ft

确认文件类型是 c 或者 cpp,然后把光标移到应该高亮但没有高亮的地方按下 Ctrl-H,看看能不能显示出你自己定义的高亮组名。

经过检查发现我是成功绑定了组,但就是不能成功高亮。

在下面的网址中,我得到了关键线索

Vim中对颜色(包括字体等其他样式)的设置是用hightlight命令,可简写为hi。例如对函数名的设置:

highlight Function cterm=bold,underline ctermbg=red ctermfg=green

这条命令可使函数名的字体改为粗体/有下划线/绿色/红色背景。除了Function关键字,还有String/Number/Float/Label,还有针对某门编程语言的关键字如:phpFunctions/phpType/phpFloat等。

这下就搞明白了。我是在字符界面使用vim的,cterm 这个不就是字符终端的意思么。 那么可以推测 gui 是在窗口界面下使用vim 或则 gvim 才能起作用的。

下面这个命令让我确定了我的想法。

官方原版的设置既有cterm 也有 gui。

  1. 查看所有的已有设置

直接执行highlight命令即可,不带任何参数。

下面是一些标签页的设置

1) 对tab标签样式的设置

每种主题都会有美中不足,比如我一直喜欢用的torte,它的默认样式下tab标签是黑底白字有下划线,选中状态为无下划线,看起来非常费眼睛。我进行了如下设置:

highlight TabLine term=underline cterm=bold ctermfg=9 ctermbg=4 highlight TabLineSel term=bold cterm=bold ctermbg=Red ctermfg=yellow

这里涉及到两个标签:TabLine(普通标签样式)/TabLineSel(选中状态标签的样式)。

(2) 对自动补全提示样式的设置

我使用的提示插件是。

highlight Pmenu ctermbg=darkred highlight PmenuSel ctermbg=red ctermfg=yellow

但是这样还是有些问题,我继续寻找,终于在另外一个老外的网页上面发现了,自己新建的最好放在

~/.vim/after/syntax/c/fun.vim

after 意思是在加载完原来的设置的基础上,在加载下面的设置

c C语言的设置,打开C相关的文件的时候会加载这个文件目录下面的设置

这里是我最终修改好的设置

可以完美实现我的需要

"==================================================== " Highlight All Function " =================================================== syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]>[^()])("me=e-2

syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]>\s("me=e-1

hi cFunction cterm=bold ctermfg=blue

"=================================================== " Highlight All Class Name " ================================================== syn match cClassName "\<[a-zA-Z_][a-zA-Z_0-9]>\:"me=e-1 hi cClassName cterm=bold ctermfg=yellow

"==================================================== " Highlight All Math Operator " =================================================== " c math operators syn match cMathOperator display "[-+*\%=]"

" c opinter operators syn match cPointerOperator display "->|.|\:\:"

" c logical operators - boolean results syn match cLogicalOperator display "[!<>]=\=" syn match cLogicalOperator display "=="

" c bit operators syn match cBinaryOperator display "(&|||\^|<<|>>)=\="

syn match cBinaryOperator display "\~"

syn match cBinaryOperatorError display "\~="

" More c logical operators - highlight in preference to binary syn match cLogicalOperator display "&&|||"

syn match cLogicalOperatorError display "(&&|||)="

" more c priority operators -highlight in preference to binary syn match cPriorityOpreator display "(|)|[|]|{|}"

" match operator hi cMathOperator ctermfg=blue

hi cPointerOperator ctermfg=red

hi cLogicalOperator ctermfg=yellow

hi cBinaryOperator ctermfg=5

hi cBinaryOperatorError ctermfg=red

hi cLogicalOperator ctermfg=yellow

hi cLogicalOperatorError ctermfg=yellow

hi cPriorityOpreator ctermfg=6

标签: vim

添加新评论