Как выделить синтаксис XML в элементах CDATA в Vim? - PullRequest
1 голос
/ 26 апреля 2010

Подсветка синтаксиса Vim для XML / XSL великолепна, за исключением того, что она отключает подсветку всего синтаксиса в регионах CDATA. Есть ли способ включить подсветку синтаксиса в регионах CDATA?

На работе у нас много XSL-кода, встроенного в другие XML-документы. Было бы здорово, если бы я мог получить все преимущества редактирования XML для встроенного XSL-кода без необходимости временного удаления тегов CDATA или копирования содержимого CDATA во временный файл.

Пример:

<root>
  <with type="xsl"><![CDATA[
      <xsl:template match="/">
          <!-- XSL content here -->
      </xsl:template>
   ]]>
  </with>
</root>

XSL всегда содержится внутри, поэтому есть что сопоставить.

Мы также иногда встраиваем Javascript в регионы CDATA. Было бы неплохо включить подсветку синтаксиса Javascript для этих регионов.

Ответы [ 3 ]

2 голосов
/ 12 августа 2012

Директива syntax include специально предназначена для выполнения подобных задач, а xml.vim (в последних версиях ваша может отличаться) имеет кластер "hook" под названием xmlCdataHook, который вы можете переопределить с помощью своих собственных файлов синтаксиса .

Откройте файл синтаксиса xml.vim и добавьте следующую строку:

syn include @xmlCdataHook <sfile>

Это дает вам подсветку синтаксиса xml внутри разделов CDATA. Укажите другой файл, например <sfile>:p:h/javascript.vim, чтобы получить подсветку JavaScript.

Кроме того, вы можете избежать редактирования файла xml.vim и просто добавить свой собственный синтаксический хук для разделов CDATA:

syntax include @JS $VIMRUNTIME/syntax/javascript.vim
syntax region start=/\V<![CDATA[/ end=/\V]]>/ contains=@JS
0 голосов
/ 13 февраля 2011

Это невозможно.

Я оставил этот вопрос открытым в течение 9 месяцев без какого-либо прогресса, и мое собственное исследование не нашло ничего полезного. Таким образом, у меня нет другого выбора, кроме как сделать вывод, что это просто невозможно.

0 голосов
/ 26 апреля 2010

Вам необходимо изменить скрипт подсветки синтаксиса, который поставляется с vim (он находится в /usr/share/vim/vim72/syntax/xml.vim в моей системе). Тем не менее, я почти уверен, что это плохая идея - вы будете действовать в «иллюзии», что содержимое раздела CDATA на самом деле является XML, и это определенно не так - поскольку это раздел CDATA, это просто текст.

Чтобы обработать встроенный JavaScript (который мне кажется менее рискованным), вам также потребуется создать модифицированную подсветку синтаксиса. Хорошим местом для начала поиска информации о том, как это сделать, станет подсветка синтаксиса XHTML для vim, которая поддерживает встроенные языки

...