2010-04-26 3 views
1

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

На работе у нас есть много кода 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 для этих регионов.

ответ

0

Невозможно.

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

0

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

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

+0

Похоже, вы можете увеличить файл синтаксиса путем размещения изменений в '~/.vim/после/filetype.vim'. Поэтому я могу изменить правила подсветки синтаксиса для xml, создав '~/.vim/after/xml.vim'. Я просто не уверен, что добавить в файл ... –

+0

А, я забыл этот файл (в наши дни я перешел от большей части vim к главным редакторам графического интерфейса). Вероятно, это вопрос, который вы должны задать в списках рассылки vim, которые я подозреваю. –

2

Директива syntax include специально предназначена для выполнения такого рода вещи, и xml.vim (в последних версиях, ваш может отличаться) имеет «крючок» кластер под названием 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]]>/ [email protected] 
+0

Я пробовал это, и он не работает. XML в разделе CDATA по-прежнему рассматривается как обычный текст. Должен ли я заменить чем-то? –

+0

No, ссылается на "этот файл". – Apocalisp

+0

Хорошо, любая идея, почему я не могу заставить это работать? Я использую Vim 7.3 на Ubuntu 11.10. –

Смежные вопросы