Подтвердить что ты не робот

Смешивание двух сценариев подсветки синтаксиса

Я пишу сообщения в блоге с 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.

Что мне не хватает? Как я могу отладить эту проблему?

4b9b3361

Ответ 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 и посмотреть, не решены ли они.