Подсветка синтаксиса VIM для html, вложенного в yaml - PullRequest
12 голосов
/ 28 января 2011

Имеется файл yaml, содержащий html, например:

template        : |+ 
    <div>Hello, world</div>

Возможно ли в Vim (версия 7.3.087) выделить HTML-часть с подсветкой синтаксиса html?

Я нашел сообщение Различная подсветка синтаксиса в пределах областей файла , который, кажется, имеет именно ту концепцию, которую я искал, но я не могу заставить ее работать как ожидалось с yaml. Я ожидаю, что смогу сделать следующее (как предложено в ссылке):

" .vimrc
" include the code from the above link
call TextEnableCodeSnip('html' ,'#{{{html' ,'#html}}}', 'SpecialComment')

Тогда имейте yaml как, например:

 template        : |+  #{{{html
    <div>Hello, world</div>
 #html}}}

К сожалению, это не работает должным образом, то есть код html остается полностью выделенным с yaml. Я также отметил, что с моей конфигурацией (MacVim 55) это не работает и в текстовых файлах.

Буду признателен за ваши мысли или предложения, и спасибо за чтение.

Ответы [ 4 ]

12 голосов
/ 03 марта 2011

проверьте мой связанный вопрос: Проблема с использованием syn-include и син-области Vim для встраивания подсветки синтаксиса .Там я пытаюсь встроить Python в TeX, но я думаю, что решение может работать и для вашего случая.

Я думаю, вы хотите сделать что-то вроде этого:

let b:current_syntax = ''
unlet b:current_syntax
runtime! syntax/yaml.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @YaML syntax/yaml.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @HTML syntax/html.vim
syntax region htmlEmbedded matchgroup=Snip start='#{{{html' end='#html}}}' containedin=@YaML contains=@HTML

hi link Snip SpecialComment
let b:current_syntax = 'yaml.html'

Блокс командой runtime! может не потребоваться, если ваш YaML уже выделен.

1 голос
/ 01 февраля 2011

Похоже, вы хотите переместить стартовый шаблон в начало следующей строки:

template        : |+  
#{{{html
    <div>Hello, world</div>
#html}}}

Подробнее:

Я нахожусь на WinXP, но я видел почти такое же поведение, которое вы описали.

В файле с типом файла yaml после вызова TextEnableCodeSnip я не увидел изменений, пока не переместил стартовый шаблон вниз по началу следующей строки. Я смог увидеть работу подсветки синтаксиса в файле без типа файла, так что это все еще шанс, что он не будет работать для вас.

1 голос
/ 28 января 2011

Вы можете попробовать добавить следующее в .vimrc:

autocmd BufRead,BufNewFile *.yaml setfiletype html.yaml

Файл yaml будет считаться как yaml и html, так иобе синтаксические цветовые схемы должны быть применены, но я не знаю, как решаются конфликты между двумя схемами ...

0 голосов
/ 24 июня 2011

Я использовал решение Maxy-B.Мой код, в частности, немного отличается, поэтому я решил опубликовать его для потомков:

~ / .vim / after / syntax / yaml.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @HTML syntax/html.vim

syntax region htmlCode start=#^html:#hs=e+1 end=+^\w+he=s-1,me=s-1
    \ contains=@HTML

let b:current_syntax = ''
unlet b:current_syntax
syntax include @TEX syntax/tex.vim

syntax region texCode start=#^tex:#hs=e+1 end=+^\w+he=s-1,me=s-1
    \ contains=@TEX

Это выделяет верхнюю часть-уровневые узлы YAML html и tex с соответствующими кодами.Это не очень динамично, но подходит моей цели, и это может послужить полезным ориентиром для кого-то, кто делает что-то подобное.Это выделит следующее, как и ожидалось (или, по крайней мере, так, как я ожидаю), например:

regular:  # yaml
   - yaml # yaml
html: 
    <b>hello</b> # html
tex:
    \begin{document} # tex
    \end{document} # tex
the-end: may be necessary # yaml
...