Вполне честно, необработанные строковые литералы являются отличным дополнением к языку C ++. Но (как и ожидалось) редакторам трудно правильно отобразить эти литералы.
Я использую Vim 7.4, и готовые строковые литералы полностью ломают подсветку синтаксиса. Например в
char const txt[] = R"(printf(")";
второй ‘(‘ выделен красным в vim.
Что-то вроде
char const txt2[] = R"( "{{" )";
ломает подсветку фигурных скобок и автоматическую идентификацию на основе синтаксиса — и так далее.
Для начала я был бы рад, если бы Vim проигнорировал все, что между R"(
а также )"
при выполнении подсветки синтаксиса.
Но обратите внимание, что необработанные строковые литералы являются гибкими — произвольные совпадающие строки допускаются между первой / последней парой двойных кавычек / фигурных скобок, например,
R"abcd()")")abcd"
также является допустимым необработанным строковым литералом, который кодирует
) ")"
Смотрите также ссылку cppreference для общего определения синтаксиса.
Таким образом, мой вопрос, как настроить Vim так, чтобы C ++ необработанные строковые литералы были правильно распознаны.
Кажется, Vim уже включает некоторые средства для правильной синхронизации фрагментов языка выделения, встроенных в язык хоста (например, для исходных файлов компилятора-компилятора). Возможно, они также могут быть использованы в случае с необработанным строковым литералом?
Просто добавь CPP-ВИМ как плагин. Я добавил строгую поддержку для новых строковых литералов в pull-запрос № 14.
Это то, что ты получаешь: http://bl.ocks.org/anonymous/raw/9442865
В cpp-vim добавлена поддержка других C ++ 11.
Добавь это
syntax match cString 'R"\([^(]*\)(\_.*)\1"'
в ваш собственный файл синтаксиса C ++ (обычно ~/.vim/syntax/cpp.vim
; создайте этот файл, если у вас его нет).