vim – 混合两个语法高亮脚本

我写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)将“使用认设置来推翻您的设置”。

因此,如果设置:Syntax on使您的自定义语法工作,它必须包含在认语法集中。

尝试保留所有的自定义的东西在〜/ .vim,看看是否解决了问题。

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...