在迷上了模式输入后,我最近从Textmate设置了Vim环境。
但是,语法高亮在Vim中似乎并不那么漂亮。我使用C ++编写代码,由于无法突出显示函数调用和类名,因此代码更难阅读。我玩了一下配色方案,但是找不到对应于“类名”或“功能名”的任何字段。
在下面的图片中,请注意MacVim右侧的突出显示方式DroughtLayer::
和*.size()
未突出显示的方式。
(来源:ivzhao.com)
任何想法如何解决这个问题?我真是个视觉敏感的家伙,这真的让我很烦。
在迷上了模式输入后,我最近从Textmate设置了Vim环境。
但是,语法高亮在Vim中似乎并不那么漂亮。我使用C ++编写代码,由于无法突出显示函数调用和类名,因此代码更难阅读。我玩了一下配色方案,但是找不到对应于“类名”或“功能名”的任何字段。
在下面的图片中,请注意MacVim右侧的突出显示方式DroughtLayer::
和*.size()
未突出显示的方式。
(来源:ivzhao.com)
任何想法如何解决这个问题?我真是个视觉敏感的家伙,这真的让我很烦。
Answers:
有趣的是,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 Function”)中定义的颜色突出显示。如果要自定义颜色,可以将上面的最后两行更改为如下所示:
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时,才使用此文件):
和强制性的屏幕截图:
vimfiles/syntax/c.vim
使用8行创建一个新的。
(Sorry for imageshack)
用 为什么不只是嵌入图像?
这是我在这里的第一篇文章,我不知道该如何观察,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
cCustomParen
不再需要它们,并且cCustomFunc
变为"\w\+\ze\s*("
(我相信使用此代码折叠仍然可以工作。)
一种解决方案是使用内置的ctags数据库。因此,使用ctags实用程序创建一个。然后设置“标签”变量,并将以下内容放入
~/.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数据库上可能会非常慢。
在vim.org上也有一种解决方案,但是我没有尝试过。请让我知道这对你有没有用。
编辑:color_coded可能对您来说太重了。尝试octol / vim-cpp-enhanced-highlight。它支持C ++ 11/14,并集成了@Eduardo的答案。
基于语义的荧光笔:
我会推荐jeaye / color_coded,这是一个基于libclang的高亮显示的vim插件
。如果您想尝试一下,请去看看它的效果。:)
优点:
python2.7
。但是,color_coded用C ++编写,并提供lua绑定-> C ++。缺点:
尽管它仍在开发中,但越来越受到关注。
尝试使用此插件http://www.vim.org/scripts/script.php?script_id=2646 它可以有效地突出显示所有ctags