我如何教vim有关语法高亮的其他C语言类型?

时间:2013-11-22 16:14:59

标签: c vim types vim-syntax-highlighting

语法突出显示与标准类型一起使用非常漂亮,例如intuint32_tfloat等。但是,我想教vim在我的代码中使用typedef定义了其他类型,例如

typedef double float64_t;

如何让vim对float64_t使用与标准类型相同的突出显示?具有本地文件(例如,在我的~/.vimrc.vim目录中)的解决方案将是优选的。自动解析typedef名称不是必需的,我愿意根据需要添加typedef名称。

3 个答案:

答案 0 :(得分:3)

这是一种根据需要添加名称的方法。

对于Windows,请创建(根据需要替换vimfiles

~\vimfiles\after\syntax\c.vim

并添加定义新语法高亮项的行。例如(来自我的cpp.vim),

" add nullptr as a keyword for highlighting
syn keyword Constant nullptr

要确定要添加到哪个组,请打开c文件并键入:syntax,然后查看现有语法组。

答案 1 :(得分:2)

我还发现我们可以使用match命令来覆盖模式描述的一组typedef名称:

match Type /\w*_t/

将以_t结尾的所有typedef名称突出显示为类型(但是在任何地方都会这样做,甚至在注释和字符串文字中也是如此。)

答案 2 :(得分:0)

您只能使用负向超前<<>匹配与_t匹配的那些标识符 ({不能像_t那样包含foo_table的标识符)< / em>。

放在~/.vim/after/syntax/c.vim中:

syn match cType "\h\w*_t\w\@!"

\h(单词的头)与[A-Za-z_]的含义相同,即它将匹配可以在C中以标识符开头的任何字符。\w*(单词)的含义与{{ 1}},即它将匹配可以在C中继续标识符的任何字符。[0-9A-Za-z_]*将从字面上匹配这两个字符。 _t为否定前瞻:只要\w\@!不匹配,它就会匹配,即只要\w后面没有字母数字字符或下划线,它就会匹配。

注意:这与_t稍有不同,后者将匹配\h\w*_t\W类型,后跟foobar_t以外的其他字符,这意味着它将在行末或末尾不匹配。文件末尾。该模式还将匹配并突出显示后跟字符作为关键字,这绝对不是您想要的。