Mac で mkdpreview-vim を使って reST のプレビューを見る

mkdpreview-vim は Markdown記法で書かれたテキストを書きながら、別ウィンドウ上でプレビューも一緒に確認できる便利プラグイン。

Markdown以外に、reST と textile にも対応している。
これを利用してMacOS X 上で reSTructuredTextのプレビューを見てみる。

以下 プレビューを表示するまで。

環境

  • MacOS X

pyqtのインストール

  • 時間かかるんで最初にインストールしておく。
  • 面倒なのでhomebrewでまるっとインストール
$ brew install pyqt
  • Qt と sit と PyQT4 を一気にインストールするから、多分 20~30分くらい時間かかる。
  • インストールが完了したら、PyQTのある場所にパスを通す。
$ export PYTHONPATH=/usr/local/lib/python

Sphinxのインストール

  • reSTをプレビューするためには、docutilsが必要です。Sphinxはdocutilsに依存してるのでpipでインストールすると、Sphinxとdocutilsが一緒にインストールされる。
  • なんでわざわざSphinxまで入れるのかというと、Sphinxがデフォルトで持ってるディレクティブを利用したいから。
$ pip install Sphinx

vimプラグインのインストール

  • vundleを利用して、必要なプラグインをインストール。vundleが何か分からない人は下記を参照してください。
  • .vimrc に下記のように書いて、BundleInstallを実行する。
Bundle 'mattn/mkdpreview-vim'
Bundle 'mattn/webapi-vim'
  • インストールが終わったらmkdpreview-vimに同梱されてるPythonスクリプトに実行権限を与えておく。
$ chmod u+x ~/.vim/bundle/mkdpreview-vim/static/mkdpreview.py

mkdpreview.vimをいじる。

  • 「~/.vim/bundle/mkdpreview-vim/plugin/mkdpreview.vim」を開いて5行目あたりを下記のように編集する。
 #変更前
  \ "data" : join(getline(1, line('$')), "\n")

 #変更後
  \ "data" : join(getline(1, line('$')), "\n"), 
  \ "type" : 'rst'
  • 注意: 多分そのうち 正式にtypeを指定する方法は変わると思います。

追記(2012/02/13)

  • 最新版では type値に関しては、filetypeを自動で読み取って勝手に指定しくれるようになりました。上記修正は必要ありません :)
  • 下記のようになってました。
function! s:update_preview() 
  let ret = http#post('http://localhost:8081/', {
  \ "data" : join(getline(1, line('$')), "\n"),
  \ "type" : &filetype
  \})
  echo ret.content
endfunction

さぁプレビュー

  • こんなrstファイルを用意してvimで開く
.. contents:: 目次 

The Road of the Drillbits
===============================


第1章 どりるびっつの仲間
---------------------------------

.. code-block:: python

  print "The Fellowship of the Drillbits"


第2章 二つのどりるびっつ
---------------------------------

.. code-block:: python

  print "The Two Drillbits"


第3章 どりるびっつの帰還
---------------------------------

.. code-block:: python

  print "The Return of the Drillbits"
  • vimを開いて下記コマンドを実行
:MkdPreview! 
  • するとおもむろにウィンドウが立ち上がりプレビューがこんな感じでみれる!

f:id:tell-k:20120210194049p:plain

  • 以後は、「:w」で保存すれば勝手にプレビューが更新される。うまく更新されなかったら「:MkdPreview」と打つと良い。

code-blockディレクティブとか使いたい。

  • 上の画像では、「.. code-block::」の所で「Unknown directive type "code-block".」という感じで、そんなディレクティブねーよとおこられる
  • これはそもそも「.. code-block::」が、docutilsのディレクティブではなく、Sphinxに付属するディレクティブだから。Sphixはインストール済みなので、Sphinx付属のディレクティブが利くようにまたちょっといじる。

「~/.vim/bundle/mkdpreview-vim/static/plugin/mod_rst.py」というファイルを開いて下記のよう2行追加する。

  from docutils.core import publish_parts
+ from sphinx.directives.other import * 
+ from sphinx.directives.code import *
  • これでもう一度、ファイルを開き直して、「MkdPreview!」を実行すると、無事にエラーが無くなる

f:id:tell-k:20120210195550p:plain

以上おわり。

余談

  • 「.. code-block::」とか要らないという人は「mod_rst.py」を書き換えないで、且つSphinxをインストールせずに「pip install docutils」とすれば良いでしょう。
  • mattnさんが仕事はやすぎで「rstpreview-vim」作ったのにお蔵入りした。
  • PyQT 初めていれてみたけど、おもしろそうな感じ
  • もはや Markdown Preview ではないとか小さい事を気にしてはいけない
  • はてなブログ いつのまにか カテゴリ機能みたいなの動いてる