6 Jan 2012 (updated 8 Jan 2012 at 17:09 UTC)
»
Vim syntax highlighting for C++11 raw strings
A little over a year ago I mentioned a
vim syntax file for C++0x which I was using for a while, but it only adds support for some new keywords, not new syntax such as lambda expressions and list-initialization. Last month I found
cpp11.vim in the Vim online script database, which intends to support the new C++11 syntax, by replacing your existing cpp.vim entirely.
Not quite satisfied with either of those, I've started using my own
cpp.vim to extend the default cpp.vim file (which is done by putting it in
~/.vim/after/syntax/cpp.vim) with syntax highlighting for the new keywords and also C++11 raw strings.
With my colour settings they look like this:
char raw[] = R"#(s/"\([^"]*\)"/'\1'/g)#";
which is equivalent to:
char yuk[] = "s/\"\\([^\"]*\\\"/'\\1'/g";
only without suffering from
leaning toothpick syndrome.
The
#
in the example can be (almost) any sequence of zero or more characters acting as a delimiter. The example above requires a non-empty delimiter because the string contains
)"
, which would be taken as the end of the raw string otherwise:
char raw[] = R"(s/"\([^"]*\)"/'\1'/g)"; // ERROR!
You could choose to use
""
as the delimiter sequence, as a nod to Python
char raw[] = R"""(triple-quoted for great justice)""";