在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://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插件,或者设置ctags
或cscope
与vim的集成( 这里是vim / cscope的教程)。
我真的推荐你taghighlight
插件,点击这里它的网站。
Clighter
插件也可以考虑,这是一个
plugin for c-family semantic source code highlighting, based on Clang
但是,需要相当新的版本和软件: vim 7.4.330 +python2
和libclang
。