我用 Jekyll 写博客文章,为此我最终在同一个文件中使用了三种不同的语言:YAML 用于发布元数据,Markdown 用于正文,C++ 用于代码片段。
我尝试设置一个脚本,以便我可以让 vim 为我正确突出显示所有三个,最后在 syntax/jekyll.vim 中得到类似这样的内容:
" Build upon Markdown syntax
runtime! syntax/markdown.vim
" pretend there's 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 contains=@Yaml
" pretend there's 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 contains=@Cpp
let b:current_syntax='jekyll'
我还设置了一个文件检测脚本来设置ft
这个语法。
它几乎可以工作。当我打开一个被检测为这种类型的文件时,我得到的一切都是正确的,除了C++ 亮点。但是,如果我:syn on
在那之后输入,一切正常。我可以删除缓冲区并再次打开文件,所有亮点都可以。如果我关闭 vim 并重新启动它,我需要:syn on
再次运行。
我错过了什么?我该如何调试这个问题?