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

我最近刚刚从Textmate开始设置我的Vim环境,在沉迷于模态输入之后。

然而,语法突出显示在Vim中似乎并不那么美丽。 我使用C ++编写代码,并且由于函数调用和类名称不能突出显示,因此代码更难以阅读。 我用颜色方案玩了一下,但找不到任何对应于“类名”或“函数名”的字段。

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

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

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


有趣的是,VIM中的语法突出显示器不支持将语法应用于标识符或函数名 - 至少不是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”)找到它的默认值。

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

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

(我从来没有用过Mac,所以我不知道哪一个会为你工作,你可以在vim的帮助中找到更多,“: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

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

你可以在这个链接上找到Vim 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
链接地址: http://www.djcxy.com/p/49437.html

上一篇: class & function names highlighting in Vim

下一篇: How can I prepend text in the middle of the line to multiple lines in Vim?