Как исключить необработанные строковые литералы C ++ из подсветки синтаксиса в Vim?

Вполне честно, необработанные строковые литералы являются отличным дополнением к языку C ++. Но (как и ожидалось) редакторам трудно правильно отобразить эти литералы.

Я использую Vim 7.4, и готовые строковые литералы полностью ломают подсветку синтаксиса. Например в

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

второй ‘(‘ выделен красным в vim.

Что-то вроде

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

ломает подсветку фигурных скобок и автоматическую идентификацию на основе синтаксиса — и так далее.

Для начала я был бы рад, если бы Vim проигнорировал все, что между R"( а также )" при выполнении подсветки синтаксиса.

Но обратите внимание, что необработанные строковые литералы являются гибкими — произвольные совпадающие строки допускаются между первой / последней парой двойных кавычек / фигурных скобок, например,

R"abcd()")")abcd"

также является допустимым необработанным строковым литералом, который кодирует

) ")"

Смотрите также ссылку cppreference для общего определения синтаксиса.

Таким образом, мой вопрос, как настроить Vim так, чтобы C ++ необработанные строковые литералы были правильно распознаны.

Кажется, Vim уже включает некоторые средства для правильной синхронизации фрагментов языка выделения, встроенных в язык хоста (например, для исходных файлов компилятора-компилятора). Возможно, они также могут быть использованы в случае с необработанным строковым литералом?

7

Решение

Просто добавь CPP-ВИМ как плагин. Я добавил строгую поддержку для новых строковых литералов в pull-запрос № 14.

Это то, что ты получаешь: http://bl.ocks.org/anonymous/raw/9442865

В cpp-vim добавлена ​​поддержка других C ++ 11.

5

Другие решения

Добавь это

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

в ваш собственный файл синтаксиса C ++ (обычно ~/.vim/syntax/cpp.vim ; создайте этот файл, если у вас его нет).

7

По вопросам рекламы [email protected]