我刚刚沉迷于其模态输入后,最近才从Textmate设置了我的Vim环境。
然而,语法高亮似乎在Vim中并不那么美观。我用C ++编写代码,因为函数调用和类名不能突出显示,所以代码更难以阅读。我玩了一些配色方案,但找不到任何与“类名”或“功能名称”相对应的字段。
在下图中,请注意MacVim右侧未突出显示DroughtLayer::
和*.size()
。
(来源:ivzhao.com)
任何想法如何解决这个问题?这真让我烦恼,因为我是一个视觉敏感的家伙。
答案 0 :(得分:118)
当我开始使用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帮助中找到更多信息,“:帮助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,则仅使用此文件):
强制性截图:
答案 1 :(得分:33)
这是我在这里的第一篇文章,我不知道如何进行观察,Eduardo的回答使得“(”和“{”看起来没有问题,而且语法折叠错误,我稍微改了一下来解决这个问题。< / p>
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
答案 2 :(得分:17)
有趣的是,VIM中的语法高亮显示不支持将语法应用于标识符或函数名称 - 至少不支持C和C ++的语法高亮显示。所以,即使你这样做:
:hi Function guifg=red
或
:hi Identifier guifg=red
它不会给这些颜色。我似乎只是这些语言的关键字和常量。
在这里,有人开始扩展cpp语法文件以支持方法名称。我想这是一个开始。 http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition
答案 3 :(得分:10)
一种解决方案是使用内置的ctags数据库。因此,使用ctags实用程序创建一个。然后设置'tags'变量并将以下内容添加到
~/.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上也有one solution,但我没试过这个。让我知道它是否适合你。
答案 4 :(得分:6)
基于语义</ strong>的荧光笔:
我会推荐jeaye/color_coded,
一个基于libclang的突出显示的vim插件
很抱歉,我是stackoverflow的新手,这意味着我没有足够的声誉来发布图片。如果你想试一试,去看它的效果。 :)
优点:
python2.7
编译的vim。
但是,color_coded是用C ++编写的,并提供了lua绑定 - &gt;
C ++。缺点:
虽然它仍在开发中,但它越来越受到关注。
答案 5 :(得分:3)
谢尔盖,改变第一行
syn match cCustomParen "(" contains=cParen,cCppParen
到
syn match cCustomParen "(" contains=cParen contains=cCppParen
似乎为我解决了这个问题。
答案 6 :(得分:2)
答案 7 :(得分:2)
尝试使用此插件http://www.vim.org/scripts/script.php?script_id=2646 它可以为您提供非常高效的所有ctags
答案 8 :(得分:1)
我真的向您推荐taghighlight
插件,点击它的网站here。
答案 9 :(得分:1)
也可以考虑Clighter
插件,这是一个
plugin for c-family semantic source code highlighting, based on Clang
但是,需要相当新的版本和软件:vim 7.4.330 +python2
和libclang
。
答案 10 :(得分:0)
仅匹配 C 函数定义,这对我有用:
syn match cCustomFuncDef display /\(\w\+\(\s\|*\)\+\)\@<=\w\+\s*(\@=/
hi def cCustomFuncDef ctermfg=lightblue