Я пишу сообщения в блоге с Jekyll, и для этого я в конечном итоге использую три разных языка в одном файле: YAML в начале для метаданных сообщения, Markdown в теле и С++ в фрагментах кода.
Я попытался настроить script, чтобы я мог vim выделить все три правильно для меня, и в итоге получилось что-то подобное в синтаксисе /jekyll.vim:
" Build upon Markdown syntax
runtime! syntax/markdown.vim
" pretend there no syntax loaded
unlet b:current_syntax
" Bring in YAML syntax for front matter
syntax include @Yaml syntax/yaml.vim
syntax region yamlFrontmatter start=/\%^---$/ end=/^---$/ keepend [email protected]
" pretend there no syntax loaded
unlet b:current_syntax
" Bring in C++11 syntax for code snippets
syntax include @Cpp syntax/cpp.vim
syntax region cppCodeSnippet matchgroup=Comment start=/^{% highlight cpp %}$/ end=/^{% endhighlight %}$/ keepend [email protected]
let b:current_syntax='jekyll'
Я также установил обнаружение файла script, чтобы установить ft
в этот синтаксис.
Он почти работает. Когда я открываю файл, который обнаруживается как этот тип, я получаю все правильно, за исключением основных элементов С++. Однако, если я наберу :syn on
после этого, все будет хорошо. Я могу удалить буфер и снова открыть файл, и все основные моменты в порядке. Если я закрою vim и запустил его снова, мне нужно снова запустить :syn on
.
Что мне не хватает? Как я могу отладить эту проблему?