IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> vim 设置变量、结构体成员及函数名不同颜色显示(c语言) -> 正文阅读

[开发工具]vim 设置变量、结构体成员及函数名不同颜色显示(c语言)

本人的vim界面示例(xshell的终端):

因当时在看tlv320aic3x的codec驱动源码,便以此文件为例进行截图,勉强实现以下几个功能:(靠vim正则表达式进行匹配高亮,非语法解析,不是很准确)目前未考虑c++的文件

1.变量类型与变量名区别开不同颜色显示

(变量类型不同颜色高亮且加粗显示,目前只做到了带struct关键字的变量类型) 但强制类型转换里的"*" 与变量类型颜色保持一致,这与变量定义或声明时的变量类型有点不同;

变量类型名与变量名区别开匹配是挺难的(毕竟只是表达式,没有逻辑判断,总是存在缺陷);

目前匹配变量类型名主要靠 "struct" 或 "enum" 或 "union"?

开始,接着0-n个空格符?"\s",再接着字母或下划线开头以及字母或下划线或数字结尾的单词,然后是由空格符?"\s"加?"\*"组成的,0-n个空格符?"\s"加上0-n个 "\*"再加上0-n个空格符?"\s"的 0-n次组合,最后是0-n个的回车换行符来匹配,有个较大的缺陷,就是不能匹配已由typedef定义的变量类型的类型名;匹配变量名则是?0-n个 "\*" 和空格符 "\s" ?开始,接着0-n个空格符?"\s",再接着字母或下划线开头以及字母或下划线或数字结尾的单词,然后0-n个空格符?"\s",最后至少有

"[,\);:=\>\<\-+\|\&\.\[\]]"

中的一个字符来匹配。

2."->"的方式以及"."的方式区别开不同颜色显示其成员名

成员变量主要是 前面是"->" 或 "." 后面接着字母或下划线开头以及字母或下划线或数字结尾的单词。

3.函数名不同颜色显示

函数主要靠字母或下划线开头以及字母或下划线或数字结尾的单词加上左括号来匹配,只是注意左括号前面可能有0-n个空白字符"\s"。

4.宏定义不同颜色显示

?宏区分了宏函数与一般的宏变量;

由大写字母开始,字母或下划线或数字结尾的单词,接着0-n个空格符?"\s",再接着

"[a-zA-Z0-9_,\);:\"\'=><\-+\|\&\.\[\]]"

中的一个字符或者这两个字符 "(\->)" ,最后是0-n个空格符?"\s" 以及0-n个回车换行符?"\n" 来匹配;

由于仅仅是vim正则表达式进行匹配(仅仅以大写字母开始,便匹配其为宏),因此当宏定义时,未使用大写字母开头,便会出现以下情况,将其误匹配为变量名:

匹配及高亮规则(c.vim)

全部内容如下:

其中,为了让c默认的类型关键字cType与自定义的cStruct颜色保持一致,特将默认的类型关键字cType的颜色重新定义为与自定义的cStruct颜色相同,且需要将原定义的cStructure注释掉;

"syn keyword    cStructure  struct union enum typedef

默认的cDefine与自定义的cMacro也是特将其颜色保持一致;

cterm 为终端字体样式,目前已知可以设置两种值(none-正常,bold-加粗);

ctermfg 为终端的前景色,

vim开启256色后,可以使用1-255指定其颜色,也可#eeeeee的方式指定颜色,颜色值(256色)可参考?https://blog.csdn.net/ZGY_121/article/details/78634568?vim正则表达式可参考?https://blog.csdn.net/iteye_9166/article/details/82584426

"find and comment out
"syn keyword    cStructure  struct union enum typedef


syn match cFunctions    "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1
syn match cStruct       "\(struct\|union\|enum\|typedef\)\{1}\s\+\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*\**\s*\)*[);]\?\s*\n*"me=e-1 contains=cVar
syn match cVar          "\(\s*\**\s*\)*&\?\s*\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*[,\);:=\>\<\-+\|\&\.\[\]]"me=e-1 contains=cStruct,cStatement,cMacro,cType
syn match cStrMbrP      "\->\<[a-zA-Z_][a-z_A-Z0-9]*\>" contains=cStruct
syn match cStrMbrM      "\.\<[a-zA-Z_][a-z_A-Z0-9]*\>" contains=cStruct
syn match cMacro        "\s*\<[A-Z][a-zA-Z0-9_]*\>\s*[a-zA-Z0-9_,\);:\"\'=><\-+\|\&\.\[\]]\|(\->)\?\s*\n*"me=e-1 contains=cStruct
 
hi cFunctions   gui=none cterm=bold ctermfg=214
hi cStruct      gui=none cterm=bold ctermfg=45
hi cVar         gui=none cterm=none ctermfg=96
hi cStrMbrP     gui=none cterm=none ctermfg=196
hi cStrMbrM     gui=none cterm=none ctermfg=201
hi cMacro       gui=none cterm=none ctermfg=159
 
hi cType        gui=none cterm=bold ctermfg=45
hi cDefine      gui=none cterm=none ctermfg=159

c.vim文件实际截图:

文件位于/usr/share/vim/vim80/syntax/c.vim,其中vim80为vim版本目录,将以上内容加入该文件保存即可。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:19:38  更:2022-04-15 00:20:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:00:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码