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

max*_*zig 7 c++ vim rawstring c++11 vim-syntax-highlighting

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

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

char const txt[] = R"(printf(")";
Run Code Online (Sandbox Code Playgroud)

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

就像是

char const txt2[] = R"(  "{{"  )";
Run Code Online (Sandbox Code Playgroud)

打破花括号的突出显示和基于语法的自动识别 - 依此类推.

首先,我很乐意让Vim忽略语法高亮之间R"(和之间的所有)"内容.

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

R"abcd()")")abcd"
Run Code Online (Sandbox Code Playgroud)

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

)")"

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

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

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

n. *_* m. 7

加上这个

syntax match cString 'R"\([^(]*\)(\_.*)\1"'
Run Code Online (Sandbox Code Playgroud)

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

  • 你查过[cpp-vim](http://stackoverflow.com/a/22680660/1000282)吗? (2认同)

pep*_*ico 5

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

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

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