vimでmarkdownのfrontmatterにちゃんと色を付ける

vimは標準でmarkdownをシンタックスハイライトしてくれるのですが、frontmatterに対応していません。

frontmatterを使う機会が結構あるのですが、いつも変な見た目になって気になっていたのでちょっと綺麗にしてみました。

何もしなかった場合の見た目

デフォルトのvimだと、以下のような感じになってしまいます。

frontmatterが正しく認識されず、本文+タイトル行としてハイライトしているvimのスクリーンショット

frontmatter部分もmarkdownとして認識しようとしているので、罫線と見たり見出し行として見たりして変な感じ。

ハイライトのルールを追加する

~/.vim/after/syntax/markdown.vimに以下のようなファイルを作ります。

unlet b:current_syntax
syntax include @Yaml syntax/yaml.vim
syntax region yamlFrontmatter start=/\%^---$/ end=/^---$/ keepend contains=@Yaml

ファイルの1行目が---から始まっていたら、次の---という行までをyamlとしてハイライトする、みたいな指示ですね。

ちゃんとハイライトされるようになった

これを書いてあげると、以下のようにfrontmatter部分はちゃんとYAMLとして表示してくれます。

今度はfrontmatterをきちんとハイライトしている状態のvimのスクリーンショット

私の場合はGitHub Flavored Markdownを使いたいのでvim-gfm-syntaxというプラグインでmarkdownシンタックスを上書きしているですが、それでも上記の記述だけで機能しました。良い感じ。


参考: Vim and markdown frontmatter