如何从Vim中的语法高亮中排除C ++原始字符串文字?

问题描述 投票:7回答:3

老实说,raw string literals是C ++语言的一个很好的补充。但是(正如预期的那样)编辑们很难正确地展示这些文字。

我正在使用Vim 7.4和开箱即用的原始字符串文字完全打破语法高亮。例如在

char const txt[] = R"(printf(")";

第二个'('在vim中突出显示为红色。

就像是

char const txt2[] = R"(  "{{"  )";

打破花括号的突出显示和基于语法的自动缩进 - 依此类推。

首先,我很乐意让Vim在进行语法高亮时忽略R"()"之间的所有内容。

但请注意,原始字符串文字是灵活的 - 在第一个/最后一个双引号/括号对之间允许任意匹配的字符串,例如

R"abcd()")")abcd"

也是一个有效的原始字符串文字编码

)")"

另请参阅cppreference链接以获取语法的一般定义。

因此,我的问题是如何配置Vim,以便正确识别C ++原始字符串文字。

Vim似乎已经包含了一些正确的synatx功能,突出了嵌入在宿主语言中的语言片段(例如,对于编译器 - 编译器源文件)。也许它们也可以用于原始字符串文字案例?

c++ vim c++11 vim-syntax-highlighting rawstring
3个回答
5
投票

只需添加cpp-vim作为插件。我在pull-request #14中添加了对较新字符串文字的严格支持。

这就是你得到的:http://bl.ocks.org/anonymous/raw/9442865

cpp-vim也增加了对其他C ++ 11的支持。


7
投票

加上这个

syntax match cString 'R"\([^(]*\)(\_.*)\1"'

到您的自定义C ++语法文件(通常是~/.vim/syntax/cpp.vim;如果没有,则创建此文件)。


0
投票

对上述语法规则的微小调整:

syntax match cString 'R"\([^(]*\)(\_.\{-})\1"'

原来试图贪婪地选择最长的比赛;因此,如果文件中有多个原始字符串(使用相同的打开/关闭模式),则会中断。这个非贪婪,应该正确匹配。非常感谢你的原创,但这对我来说是一个巨大的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.