语法高亮在处理标准类型时表现极佳,例如int
、uint32_t
、float
等。然而,我希望教会vim在我的代码中使用typedef定义的其他类型,比如:
typedef double float64_t;
如何使vim对float64_t
使用与标准类型相同的高亮显示?最好使用本地文件的解决方案(例如在我的~/.vimrc
或.vim
目录中)。不需要自动解析typedef名称,我愿意根据需要添加typedef名称。
语法高亮在处理标准类型时表现极佳,例如int
、uint32_t
、float
等。然而,我希望教会vim在我的代码中使用typedef定义的其他类型,比如:
typedef double float64_t;
如何使vim对float64_t
使用与标准类型相同的高亮显示?最好使用本地文件的解决方案(例如在我的~/.vimrc
或.vim
目录中)。不需要自动解析typedef名称,我愿意根据需要添加typedef名称。
以下是一种添加名称的方法。
对于Windows,创建(根据需要替换vimfiles
)
~\vimfiles\after\syntax\c.vim
并添加定义新的语法高亮项目的行。 例如(来自我的cpp.vim
),
" add nullptr as a keyword for highlighting
syn keyword Constant nullptr
要确定您要添加到哪个组,请打开一个 c 文件并输入 :syntax
,然后您可以查看现有的语法组。
我发现我们可以使用match
命令来匹配一组由模式描述的typedef名称:
match Type /\w*_t/
该功能将突出显示所有以 _t
结尾的 typedef 名称(但是无论在何处都会突出显示,即使在注释和字符串文字内部也是如此)。
my_test_function
,那么 my_t
部分将被突出显示。你有没有对此的修复方法?编辑:/\w*_t\s/
似乎可以解决问题。 - sunmat\<
和 \>
可以用于锚定一个模式在单词的开头和结尾。 - DevSolar你可以使用 负向先行断言 来只匹配那些以 _t
结尾的标识符(而不是那些包含类似 foo_table
这样部分带有 _t
的标识符)。
将其放置在 ~/.vim/after/syntax/c.vim
中:
syn match cType "\h\w*_t\w\@!"
\h
(单词开头)与[A-Za-z_]
相同,即它将匹配C语言中可以作为标识符开头的任何字符。\w*
(单词)与[0-9A-Za-z_]*
相同,即它将匹配C语言中可以继续标识符的任何字符。_t
将精确匹配这两个字符。\w\@!
是负向先行断言:只要\w
不匹配,它就会匹配,即只要_t
后面不跟字母数字字符或下划线,它就会匹配。
注意:这与\h\w*_t\W
略有不同,后者将匹配一个foobar_t
类型,后面跟着除[0-9A-Za-z_]
之外的其他字符,这意味着它不会在行末或文件末尾匹配。该模式还将匹配并突出显示关键字后面的字符,这绝对不是您想要的。
cType
、cConstant
。 - Ingo Karkatvim
构建中,:hl
不是默认命令,我必须使用:highlight
。 - A.E. Drewsyntax keyword Type float64_t
。 - Jens