vim - 在 Vim 中以不同方式突出显示 C/C++ 函数声明和函数调用
问题描述
我习惯了 Sublime Text 突出显示函数声明与函数调用的方式,并试图用 Vim 模拟类似的东西。有一些帖子解决了这样的问题,但它们似乎以相同的方式突出声明和调用。
int function1() {
function3();
}
int function2()
{
...
}
在这里,function1 和 function2 应该是一种颜色,而 function3 应该是另一种颜色。我正在尝试编写正则表达式来匹配每种情况,然后从那里开始。
到目前为止,我想出了
syn match cFunDecl "\zs\w\+\ze(.*){"
syn match cFunCall "\zs\w\+\ze(.*);"
这些似乎真的不起作用。按照这种方法,我还希望在头文件中遇到声明被突出显示为调用的问题,但可能会在稍后处理。
解决方案
Neovim和nvim-treesitter可以做到这一点。我会注意到,使用诸如vim-lsp-cxx-highlight 之类的 LSP 插件可能也有可能,但我发现使用这些插件是一场噩梦。
首先,您要创建一个 nvim-treesitter 的分支。原因是,目前,c
模块中的函数调用和声明都以相同的方式突出显示。不过,这真的很容易改变。在你的叉子中,转到queries/c/highlights.scm
. 在文件的下部,您应该会看到如下内容:
(function_declarator
declarator: (identifier) @function)
该@function
位指定要使用的颜色。如果将其替换为其他内容,则可以获得不同的突出显示。您可以在CONTRIBUTING.md中找到可用捕获的列表。比如我刚用过@number
,所以我把上面的代码改成这样:
(function_declarator
declarator: (identifier) @number)
然后,您可以照常从您的 fork 安装 nvim-treesitter。对我来说,这意味着:
- 将此添加到我的
~/.vimrc
:Plug 'vladh/nvim-treesitter', {'do': ':TSUpdate'} lua <<EOF require'nvim-treesitter.configs'.setup { highlight = { enable = true }, } EOF
:PlugInstall
:TSInstall c cpp
如果一切正常,您的函数声明现在应该以不同的方式突出显示!我也真的很想要这个功能,幸运的是 nvim-treesitter 现在似乎足够稳定,可以轻松做到这一点。
推荐阅读
- javascript - 地图框JS未加载
- c++ - 读取二进制文件会留下一些未读字节
- javascript - 我将输入 DOM 元素的值作为 typescript 函数中的参数传递,但它返回空字符串
- xml - 从 powerbuilder 打开一个 XML 文件
- python - “如果 a 和 b 或 a 和 c”的 Python 语法,其中 a、b 和 c 是句子中的单词
- python - 将 Tensorflow v1 与原始 python 代码相结合
- c# - IdentityModel.OidcClient RefreshTokenDelegatingHander
- javascript - 错误:无法读取未定义的属性“updateProfile”
- raspberry-pi - 树莓派无法开机
- python - tf.data, tf.distribute 没有 GPU