GitHub Flavored Markdown をもっと Vim でハイライトする vim-gfm-syntax つくった
Vim にはデフォルトで Markdown のドキュメントをハイライトするためのファイルが同梱されています.基本的にはこれで満足なのですが,僕が書くのはほぼ GitHub Flavored Markdown(GFM: GitHub で使える拡張された Markdown 記法)なので,一部ハイライトされない構文があります.
そこで,既存のハイライトに GFM 向けのハイライトを追加する vim-gfm-syntax という Vim プラグインをつくりました.インストールは一般的な他のプラグインと同じです.ハイライトを追加するだけなので,設定済みの markdown
ファイルタイプの設定を壊すことは無いはずです.
入れる前 | 入れた後 |
---|---|
このプラグインを入れると,デフォルトで markdown
ファイルタイプのファイルを読んだ時に次のハイライトが追加されます.
- テーブル記法
- 絵文字記法 (e.g.
:dog:
) - タスクリスト記法 (e.g.
- [x]
) - 打ち消し線記法 (e.g.
~~取り消された文~~
) - issue 番号記法 (e.g.
#123
) - メンション記法 (e.g.
@rhysd
) - インラインコード記法(コードブロック記法を含まない) (e.g.
code
)
1〜6 は GFM 特有の記法で,デフォルトでは全くハイライトされないものです.7 を入れた理由は後の方で説明します.
デフォルトですべてのハイライトが常に有効になるようになっていますが,挙動をある程度制御できるようにいくつかのカスタマイズ方法を提供しています.
ほしい構文だけハイライトする
vim-gfm-syntax では上記のうちほしいものだけをハイライトできます. g:gfm_syntax_highlight_
で始まる変数でそれぞれの構文をハイライトするかどうかを決められます.(詳細は README をご覧ください)
特定の場合だけハイライトしてほしい
commonmark などの普通の(?) Markdown 記法を使う時は上記ハイライトをしてほしくない場合もあると思います.なので,特定のファイルタイプだけハイライトを追加するようにカスタマイズできるようになっています.例えば下記は markdown.gfm
というサブファイルタイプをつくって,特定のファイルでのみ追加のファイルタイプを有効にするようにしています.markdown.gfm
は markdown
のサブファイルタイプなので markdown
の設定も読み込まれます.
" デフォルトでハイライトしない let g:gfm_syntax_enable = 0 " filetype が 'markdown.gfm' のときだけハイライトを追加する let g:gfm_syntax_enable_filetypes = ['markdown.gfm'] " 'README.md' というファイルを編集する時は filetype を markdown.gfm にして GFM ハイライトを有効にする autocmd BufRead,BufNew,BufNewFile README.md setlocal ft=markdown.gfm
ハイライトの色を変えたい
ハイライトの色合いは使っているカラースキームで決まるため,このプラグインが設定しているデフォルトの色合いがベストとは限りません.そのため,ColorScheme
autocmd イベントでハイライト色を上書きできるようになっています.
例えば下記は githubFlavoredMarkdownCode
(インラインコード記法のハイライト定義)を CursorLine
と同じになるように上書きしています.
autocmd ColorScheme * highlight link githubFlavoredMarkdownCode CursorLine
CursorLine
は一例で,:hi
コマンドでハイライト一覧を見て選ぶことができます.また,githubFlavoredMarkdown
で始まる各種コードハイライト名は コード を直接参照してください.
コードブロックのシンタックスハイライト
標準の Markdown ハイライトが対応済みです.
let g:markdown_fenced_languages = ['cpp', 'ruby', 'json']
のようにすると C++,Ruby,JSON のコードブロックがそれぞれの言語の構文でハイライトされます.ただし,数を増やしすぎると Markdown ハイライトの読み込みが重くなってしまうので注意です.
インラインコードのハイライト
Vim の標準の構文ハイライトでは,コード記法は ` のみがハイライトされ,その中身が表示されません.そのため,インラインコードを多用するライブラリのドキュメントではインラインコードの範囲が分かりにくくなります.実は標準のハイライトではデフォルトのハイライトが設定されていないだけで下記のように markdownCode
ハイライトを定義してやると色をつけてくれます.
autocmd ColorScheme * highlight link markdownCode Constant
にも関わらず冒頭の 7. を追加したのは,markdownCode
だと ``` で始まるコードブロックも一緒にハイライトされてしまうためです.ここは好みですが,文中のインラインコードだけハイライトしてほしい場合はこれではできないため,今回は githubFlavoredMarkdownCode
を新たに追加しました.
Well-tested
themis.vim を使って各種ハイライトやカスタマイズ機能をテストしています.また,Travis CI も利用しています.