c++ - 如何从 Vim 中的语法突出显示中排除 C++ 原始字符串文字?

标签 c++ vim c++11 vim-syntax-highlighting rawstring

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

我使用的是 Vim 7.4,开箱即用的原始字符串文字完全破坏了语法高亮显示。例如在

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

第二个 '(' 在 vi​​m 中以红色高亮显示。

有点像

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

打破花括号的高亮显示和基于语法的自动识别等等。

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

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

R"abcd()")")abcd"

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

)")"

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

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

Vim 似乎已经包含了一些工具来正确地使用 synatx 高亮嵌入在宿主语言中的语言片段(例如,对于编译器-编译器源文件)。也许它们也可以用于原始字符串文字的情况?

最佳答案

添加这个

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

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

关于c++ - 如何从 Vim 中的语法突出显示中排除 C++ 原始字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22674375/

相关文章:

c++ - 函数模板、部分应用和模板参数推导

c++ - 函数采用指向集合的指针的优点,以避免在返回时复制?

c++ - const auto std::initializer_list Clang 和 GCC 的区别

c++ - 虚拟 noexcept(true) 错误 : MinGW and gtkmm

c++ - 普通 C++ 代码如何应用于 GUI 编程?

vim - 如何在 Ubuntu 中使用 zsh shell 在 vi​​m 中启用系统粘贴?

bash - 运行错误 ':ConqueTerm bash'

vim - 在 Vim 中切换逗号分隔列表顺序的最快方法

c++ - 编译时等效的 std::cout,或 c++11 中编译时常量值的 static_assert 字符串化

c++ - 接受任何类型的可调用并且知道参数类型