Подсветка синтаксиса VIM html, вложенного в yaml
дали 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 ответов
проверьте мой вопрос: проблема с использованием syn-include и syn-region 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 уже выделен.
вы можете попытаться добавить следующее в свой .vimrc
:
autocmd BufRead,BufNewFile *.yaml setfiletype html.yaml
файл yaml будет считаться обоими типами yaml
и html
и обе цветовые схемы синтаксиса должны применяться, но я действительно не знаю, как рассматриваются конфликты между двумя схемами...
похоже, вы хотите переместить начальный шаблон в начало следующей строки:
template : |+
#{{{html
<div>Hello, world</div>
#html}}}
Подробнее:
Я на WinXP, но я видел почти то же самое поведение, которое вы описали.
когда в файле с типом файла yaml, после вызова TextEnableCodeSnip
Я не видел изменений, пока не переместил начальный шаблон в начало следующей строки. Я!--5-->был возможность видеть работу подсветки синтаксиса в файле однако без типа файла, так что это все еще шанс, что это не сработает для вас.
я использовал решение Maxy-B. Мой код, в частности, немного отличается, поэтому я решил опубликовать его для потомков:
~/.vim / after / синтаксис / yaml.ВИМ
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