我写Jekyll的博客文章,为此我最终在同一个文件中使用三种不同的语言:YAML在开始的帖子元数据,Markdown在正文中,C代码片段。
我试图设置一个脚本,以便我可以使vim高亮显示所有三个适当的我,结果在这样的语法/ 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之后,一切都正常。我可以删除缓冲区并再次打开文件,所有的高亮都可以。如果我关闭vim并重新启动,我需要再次运行:syn。
我缺少什么?如何调试此问题?
快速修复:将语法附加到.vimrc的最后一行,这与在实时会话中设置:syn相同。
不是那么快:
看起来您可能已经在$ VIMRUNTIME中安装了默认语法文件中的自定义’jekyll’语法。
根据Vim wiki section on custom syntax,最好将所有个人定制保存在〜/ .vim中。例如,将你的jekyll.vim语法放在〜/ .vim / Syntax /中。
Do not use a directory containing the files distributed with Vim because that will be overwritten during an upgrade (in particular,do not use the $VIMRUNTIME directory).
在Vim syntax docs:
:Syntax enable running’:source $ VIMRUNTIME / Syntax / DEFAULT_Syntax.vim’。
:syn on(或:Syntax on)将“使用默认设置来推翻您的设置”。