Смешивание двух сценариев подсветки синтаксиса
Я пишу сообщения в блоге с 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
.
Что мне не хватает? Как я могу отладить эту проблему?
Ответы
Ответ 1
Быстрое исправление: добавьте syntax on
в последнюю строку вашего .vimrc
, что совпадает с настройкой :syn on
в реальном сеансе.
Не так быстро:
Похоже, что вы установили пользовательский синтаксис "jekyll" вместе с файлами синтаксиса по умолчанию в $VIMRUNTIME
.
В соответствии с Vim wiki section по пользовательскому синтаксису, желательно сохранить все личные настройки в ~/.vim
. Например, добавив синтаксис jekyll.vim
в ~/.vim/syntax/
.
Не используйте каталог, содержащий файлы, распространяемые вместе с Vim, потому что они будут перезаписаны во время обновления (в частности, не используйте каталог $VIMRUNTIME).
В Vim синтаксические документы:
:syntax enable
run ': source $VIMRUNTIME/синтаксис/DEFAULT_SYNTAX.vim'.
:syn on
(или :syntax on
) будет "отменять ваши настройки по умолчанию".
Итак, если параметр :syntax on
делает ваш пользовательский синтаксис работать, он должен содержаться в наборе синтаксиса по умолчанию.
Попробуйте сохранить все пользовательские элементы в ~/.vim
и посмотреть, не решены ли они.