2014-03-26 19 views
6

坦率地说,raw string literals是C++语言的一个很好的补充。但是(正如所料)编辑们很难正确显示这些文字。如何从Vim中的语法高亮显示中排除C++原始字符串文字?

我使用的Vim 7.4和出的现成的原始字符串字面彻底打破语法高亮。例如,在

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

二号“(”在VIM高亮红

喜欢的东西

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

休息的大括号的高亮和基于语法自动IDENT - 等等

首先,我会很高兴让Vim在执行语法高亮时忽略R"()"之间的所有内容

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

R"abcd()")")abcd" 

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

)")"

又见cppreference链路的语法的一般定义。

因此,我的问题是如何配置的Vim,使得C++的原始字符串字面被正确识别。

的Vim似乎已经包括一些设施,以适当嵌入宿主语言(如编译器编译源文件)synatx亮点的语言片段。也许他们也可以用于原始字符串文字的情况呢?

回答

5

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

这是你会得到什么:http://bl.ocks.org/anonymous/raw/9442865

CPP-VIM增加了其他C++ 11的东西太多支持。

+0

很好用,他们使用'syn region'语法突出显示命令来识别原始字符串文字 - 这样多行原始字符串文字也被高亮显示纠正。将git仓库直接克隆到[病原体](https://github.com/tpope/vim-pathogen)捆绑目录也可以。 – maxschlepzig

7

添加此

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

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

+1

仅供参考,你检查[CPP-VIM(http://stackoverflow.com/a/22680660/1000282)? –

+0

@pepper_chico还没有,好吗? –

+0

当然,它只是为了支持C++ 11而添加的最小部分,它用于将内容添加到官方内置的vim语法文件中。 –

相关问题