Vim 中的类和函数名称高亮显示
-
09-09-2019 - |
题
在沉迷于它的模态输入之后,我最近刚刚从 Textmate 设置了我的 Vim 环境。
不过,Vim 中的语法高亮似乎不太美观。我用 C++ 编写代码,由于函数调用和类名无法突出显示,因此代码更难以阅读。我玩了一下配色方案,但找不到任何与“类名”或“函数名”相对应的字段。
在下图中,注意如何 DroughtLayer::
和 *.size()
MacVim 中右侧未突出显示。
(来源: 爱找网)
有什么想法如何解决这个问题吗?这真的让我很恼火,因为我是一个视觉敏感的人。
解决方案
有趣的是,在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并使用命令时,它的默认值“:回声$ VIMRUNTIME”)。
您可以简单地覆盖该文件,也可以创建自定义的C语法文件(将由VIM加载默认的一个替代)在以下位置:
$HOME/.vim/syntax/c.vim (for UNIX)
$HOME/vimfiles/syntax/c.vim (for PC or OS/2)
(我从来没有使用的是Mac,所以我不知道哪一个会为你工作,你可以找到更多的VIM帮助“:帮助vimfiles”)
现在最有趣的部分。默认的 “$ VIMRUNTIME /语法/ c.vim” 文件复制到你的vimfiles目录( “$ HOME / vim的/语法/ c.vim” 对于UNIX),并通过将这些线编辑:
" 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 def cCustomFunc gui=bold guifg=yellowgreen
hi def cCustomClass gui=reverse guifg=#00FF00
或者你可以独自离开C语法文件,并确定在vimrc文件的颜色(“:帮助的vimrc”):
hi cCustomFunc gui=bold guifg=yellowgreen
hi cCustomClass gui=reverse guifg=#00FF00
(注意没有了“高清”关键字,进入“:帮助高亮显示默认”的说明)。对于可用参数的“:喜”命令见“:帮助:亮点”。
您可以找到这个链接上的Vim 7.2的完整c.vim文件(注意:只有当你有一个未经修饰的Vim,7.2版本使用):
和强制性截图:
这是我的第一篇文章在这里,我不知道如何使一个观察,爱德华多的答案,使“(”和“{”看unmached和错误语法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
在一个解决方案是使用内置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-增强高亮. 。它支持 C++11/14 并集成了 @Eduardo 的答案。
语义学 基于荧光笔:
我会推荐 jeaye/颜色编码,
基于 libclang 高亮的 vim 插件
很抱歉,我是 stackoverflow 的新手,这意味着我没有足够的声誉来发布图像。如果你想尝试的话就去看看它的效果吧。:)
优点:
- 简易安装
- 语义突出显示
- 上面提到的Clighter,需要用vim编译
python2.7
。不过,color_coded 是用 C 编写的,并提供 lua 绑定 -> 。 C .
缺点:
- 除非你创建一些 vim 事件来激活它,否则它会延迟。
- 定制有点困难;您需要编辑 syntax/color_coded.vim 你自己但定制已被列入其路线图。
尽管它仍在开发中,但它越来越受到关注。
塞吉,从改变第一线
syn match cCustomParen "(" contains=cParen,cCppParen
到
syn match cCustomParen "(" contains=cParen contains=cCppParen
似乎帮我。
尝试使用这个插件 http://www.vim.org/scripts /script.php?script_id=2646 它做所有的ctags非常有效地突出你
我真的建议你taghighlight
插件,请点击这里它的网站。
在 Clighter
插件也可以考虑,这是一个
plugin for c-family semantic source code highlighting, based on Clang
然而,需要相当新的版本和软件:vim 7.4.330 +python2
和libclang