在Vim中突出显示类和函数名称

我最近刚刚从Textmate设置了我的Vim环境,在沉迷于它的模式input之后。

但是,语法突出显示在Vim中似乎并不那么美丽。 我用C ++编写代码,由于函数调用和类名不能高亮显示,代码更难读。 我玩了一下配色scheme,但找不到任何对应于“class级名称”或“function名称”的字段。

在下面的图片中,注意DroughtLayer::*.size() DroughtLayer:: *.size()在MacVim中的右侧没有突出显示。

Textmate(左)和Vim(右)的图片比较http://ivzhao.com/temp/vimHL.png

任何想法如何解决这个问题? 这让我非常恼火,因为我是一个视觉敏感的人。

有趣的是,VIM中的语法突出显示器不支持将语法应用于标识符或函数名 – 至less不是C和C ++的语法突出显示器。 所以,即使你这样做:

 :hi Function guifg=red 

要么

 :hi Identifier guifg=red 

它不给这些颜色。 我似乎没有比这些语言的关键字和常量更多。

在这里,有人已经开始扩展cpp语法文件来支持方法名称。 我想这是一个开始。 http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition

当我开始使用vim时,我遇到了同样的问题。 解决方法很简单,你只需要编辑vim使用的c语法文件,下面是如何做:

当您开始编辑C或C ++文件时,vim将读取位于中的默认c语法文件

 $VIMRUNTIME/syntax/c.vim 

(其中$ VIMRUNTIME是安装vim的地方,可以通过打开vim并使用命令“:echo $ VIMRUNTIME”)来find它的默认值。

您可以简单地覆盖该文件,或者您可以在此位置创build自定义的C语法文件(将通过vim而不是默认文件加载):

 $HOME/.vim/syntax/c.vim (for UNIX) $HOME/vimfiles/syntax/c.vim (for PC or OS/2) 

(我从来没有用过一个Mac,所以我不知道哪一个会为你工作,你可以在vim帮助中find更多的信息:“help vimfiles”)

现在有趣的部分。 将默认的“$ VIMRUNTIME / syntax / c.vim”文件复制到您的vimfiles目录(UNIX的“$ HOME / .vim / syntax / c.vim”),并通过添加以下行进行编辑:

 " Highlight Class and Function names syn match cCustomParen "(" contains=cParen,cCppParen syn match cCustomFunc "\w\+\s*(" contains=cCustomParen syn match cCustomScope "::" syn match cCustomClass "\w\+\s*::" contains=cCustomScope hi def link cCustomFunc Function hi def link cCustomClass Function 

而已! 现在函数和类的名称将用“函数”高亮(“:hi函数”)中定义的颜色高亮显示。 如果你想自定义颜色,你可以改变上面的最后两行,如下所示:

 hi def cCustomFunc gui=bold guifg=yellowgreen hi def cCustomClass gui=reverse guifg=#00FF00 

或者你可以保留C语法文件,并在你的vimrc文件(“:help vimrc”)中定义颜色:

 hi cCustomFunc gui=bold guifg=yellowgreen hi cCustomClass gui=reverse guifg=#00FF00 

(请注意缺less“def”关键字,请参阅“:help highlight-default”以了解详细信息)。 有关“:hi”命令的可用参数,请参阅“:help:highlight”。

你可以在这个链接上findVim 7.2的完整c.vim文件(注意:如果你有一个非修改的Vim版本7.2,只能使用这个文件):

http://pastebin.com/f33aeab77

和强制性的截图:

http://img16.imageshack.us/img16/2073/vimy.png(对不起Imagehack);

这是我在这里的第一篇文章,我不知道如何做一个观察,Eduardo的答案使“(”和“{”看起来未修正和错误语法foldind,我改变了一点,以解决这个问题。

 syn match cCustomParen "?=(" contains=cParen,cCppParen syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen syn match cCustomScope "::" syn match cCustomClass "\w\+\s*::" contains=cCustomScope hi def cCustomFunc gui=bold guifg=yellowgreen hi def link cCustomClass Function 

一个解决scheme是使用内置的ctags数据库。 所以用ctags工具创build一个。 然后设置'标签'variables,并把以下内容

 ~/.vim/after/syntax/c.vim function! s:highlight() let list = taglist('.*') for item in list let kind = item.kind if kind == 'f' || kind == 'c' let name = item.name exec 'syntax keyword Identifier '.name endif endfor endfunction call s:highlight() 

我必须警告你,在非常大的ctags数据库上这可能会很慢。

也有一个解决scheme在vim.org上,但我没有尝试这一个。 请让我知道这对你有没有用。

编辑:color_coded可能对你来说太重了。 尝试辛醇/ vim-cpp-enhanced-highlight 。 它支持C ++ 11/14并集成了@Eduardo的答案。

基于语义的荧光笔:
我会推荐jeaye / color_coded ,一个基于libclang高亮的vim插件
所以很抱歉,我是新的stackoverflow,这意味着我没有足够的声誉发布图像。 去看看它的影响,如果你想给它一个镜头。 🙂

优点:

  • 简易安装
  • 语义突出
  • 如上所述的更衣机,需要用python2.7编译vim。 但是,color_coded是用C ++编写的,提供了lua绑定 – > C ++。

缺点:

  • 它会延迟,除非你让一些vim事件来激活它。
  • 定制比较困难; 你需要自己编辑语法/ color_coded.vim。 但定制已经放在了路线图上。

虽然还处于发展阶段,但越来越受到人们的关注。

之前后

谢尔盖,从第一行改变

 syn match cCustomParen "(" contains=cParen,cCppParen 

 syn match cCustomParen "(" contains=cParen contains=cCppParen 

似乎为我解决了这个问题。

使用像Taglist这样的vim插件,或者设置ctagscscope与vim的集成( 这里是vim / cscope的教程)。

我真的推荐你taghighlight插件,点击这里它的网站。

Clighter插件也可以考虑,这是一个

 plugin for c-family semantic source code highlighting, based on Clang 

但是,需要相当新的版本和软件: vim 7.4.330 +python2libclang