vim-users.jp

Hack #230: Markdown形式の文書を書く2 (quickrun0.5.0対応版)

Posted at 2011/09/15
このエントリーをはてなブックマークに追加

こんにちは、ujihisaです。11月くらいに来日する予定で、そのときに大規模なVimの勉強会などを開催したいと思っています。発表をしてみたい方は、気軽に @ujm などに英語で連絡ください(*1) 。

問題

VimでMarkdown形式の文書を書くための記事を2年ほど前に執筆し、こちらで公開していました。

ところで先月quickrun version 0.5.0 がリリースされました。その際大きな仕様変更がありました。それについては下記の記事に詳しく掲載されています。

先ほどのHack #52の記事に掲載されている情報のままでは、Markdown形式で執筆中のバッファの内容をHTMLに変換してブラウザで開くことができません。どのようにすればよいのでしょうか。

解決 (1/2)

quickrun 0.5.0はデフォルトで4種類のmarkdown変換機をサポートしています。

  • Markdown.pl (Perl. cpan install Markdownかな?)
  • kramdown (Ruby. gem install kramdown)
  • bluecloth (Ruby. gem install bluecloth)
  • redcarpet (GitHubなどで使われている悪評高いMarkdownエンジン)
  • pandoc (Haskell. cabal install pandoc)

もしも$PATHに上記のコマンドがあれば、それを用いて変換します。優先順位はこの一覧と同じです。

したがって'filetype'markdownであるようなバッファを編集中に:QuickRunすると、上記コマンドのいずれかが呼ばれ、そして編集中バッファをhtmlに変換したものをquickrunウインドウに表示します。なので、この出力先をbufferではなくbrowserにすればそれで問題が解決されます。

~/.vimrcに以下の設定を記述します。

let g:quickrun_config['markdown'] = {
      \ 'outputter': 'browser'
      \ }

ただし、もしもこれまでg:quickrun_configを全く使った事がない自信があるならば、以下の行をその前に記述してください。

let g:quickrun_config = {}

続いてopen-browser.vimがインストール済みかどうか確認します。インストールしていなければ、すぐにいれましょう。

これで'filetype'markdownなバッファから:QuickRun (あるいはデフォルトのキーマッピングである\rの打鍵) で、新しいウインドウが分割されてHTMLが出力されるかわりに、ブラウザが立ち上がってそちらにHTMLがきれいに表示されるはずです。

解決 (2/2)

大抵の方は(1/2)の時点で大丈夫なのですが、しかしASCIIの範囲内に収まらない文書を書く一部の人は、pandocでMarkdownをHTMLに変換した後に、文字化けしたHTMLを見てしまったのではないでしょうか。

この場合はpandocの-sオプションを用います。

let g:quickrun_config['markdown'] = {
      \ 'outputter': 'browser',
      \ 'cmdopt': '-s'
      \ }

おっとしかしpandoc以外でも-sを使われると困ります。間違ってredcarpetなどをインストールしてしまうと、なぜかそちらの方が高い優先度をもっているため、そちらを使われてしまうのです。ここはpandocを使用するよう強制してみましょう。

let g:quickrun_config['markdown'] = {
      \ 'type': 'markdown/pandoc',
      \ 'outputter': 'browser',
      \ 'cmdopt': '-s'
      \ }

実はこのあたりは詳しくはquickrun公式ヘルプに掲載されています。詳しくは:h quickrun-examplesをご覧ください。

補足

現在開発中のquickrun 0.5.1では新機能”hook”というものがつくそうです。いまから楽しみですね!

脚注

  • *1 スペイン語も勉強中ですので、対応可能です。
ujihisa

もどる
blog comments powered by Disqus