reStructuredText(reST)を編集するvim環境(Windows)

目的

Windows端末上で、vimを使ってreStructuredTextで文章を書く環境を作成する。

検討

vimに、reStructuredTextで編集するのに便利なプラグイン等を導入することを検討する。

大は小を兼ねるということで、とりあえず、riv.vimを導入してみる。
合わせてプラグイン管理も導入する。
今は、neobundleが流行っているらしいので、これにしよう。
その際、gitも必要になるので、合わせてインストールする。

また、vim上で編集中のreStructuredText形式のファイルをすぐにプレビューできたほうがよい。

なので、html形式に変換してブラウザでプレビューできる環境を整える。
reST形式から、html形式への変換には、Docutilsを使う。

インストール資材

インストール

  1. gitのインストール
    • 解答して、binにPathを通す。
  2. vimのインストール
    • 解凍して、完了。
  3. neobundleの導入
    • 取得
      • > git clone git://github.com/Shougo/neobundle.vim ~/vimfiles/bundle/neobundle.vim
    • ~/_vimrcの編集
      • 編集内容は後述
    • vim起動
    • :NeoBundleInstall
  4. riv.vimのインストール
    • neobundleを使ってインストール。vimrcに追加するだけ。
  5. Pythonのインストール
    • インストーラでインストール後、Pathを通す。
  6. Docutilsをインストール
  7. Pygmentsをインストール

Pythonのeasy_installが利用できるなら、

> easy_install docutils
> easy_install pygments

でよい。


~/_vimrcには、以下を追記する。
なお、gitコマンドが、なぜか環境変数のPathに追加するだけでは、vimから実行できなかったため、ここでPathに追加している。
ポータブル版にした影響か?

let $PATH = $PATH . ';$GIT_HOME\bin'

set nocompatible
filetype off

if has('vim_starting')
  set runtimepath+=~/vimfiles/bundle/neobundle.vim/
endif

call neobundle#rc(expand('~/vimfiles/bundle/'))

NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Rykka/riv.vim'

filetype plugin on
filetype indent on

reST用プラグインの利用

vimを使って、reSTで文章を記載する際、モードラインを利用して、切り替える。
そのために、文頭or文末に以下を追加する。

# vim:set ft=rst:

あとは、riv.vimのマニュアル参照。

プレビューの利用

riv.vimでは、Docutilsを利用して、htmlに変換後、ブラウザで表示する機能が用意されている。

が、Windows7上に構築したこの環境では、エラーになり、うまく行かなかった。
どうやら、Docutils(rst2html.py)でhtmlに変換するところでエラーになっている様子。

とりあえず、以下のように修正することで、なんとか動くようになった。

修正ファイル
~\vimfiles\bundle\riv.vim\autoload\riv\publish.vim

修正前↓(171-173行)

    call s:sys( exe." ". style ." ". args ." "
                \.shellescape(input) 
                \." > ".shellescape(output) )

修正後↓

    call s:sys( exe." ". style ." ". args ." "
                \.shellescape(input) 
                \." ".shellescape(output) )

さらに、ブラウザ呼び出し部分でもエラーになったので、そこも合わせて修正。

修正前↓(248-250行目)

        else
            call s:sys(g:riv_web_browser . ' '. shellescape(out_file) . ' &')
        endif

修正後↓

        else
            call s:sys(g:riv_web_browser . ' '. shellescape(out_file) )
        endif


最後に、riv.vimのdefaultの表示用ブラウザが、Firefoxになっているので、Chromeに変更するため、_vimrcファイルに追加する。

"---------------------------------------------------------------------------
" riv
let g:riv_fold_level = 1
let g:riv_web_browser = '"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"'
let g:riv_temp_path = 0
let g:riv_html_code_hl_style = "friendly"

ついでに、ちょこちょこと設定している。
あとは、

:Riv2HtmlAndBrowse

とすれば、編集中のreSTファイルをブラウザでプレビューすることができる。


なお、riv.vimを利用しなくても、Docutilsを利用して、htmlに変換しブラウザで表示するような関数を定義してやれば、プレビューは可能。

例えば、
~\vimfiles\bundle\riv.vim\ftplugin\rst\riv.vim
に、以下のようにすれば良い。
(引用元:http://www.hexacosa.net/blog/detail/41/

python << EOF
from docutils.core import publish_file
import os
import tempfile
import time
import webbrowser
import vim
def Rst2Web():
    src_fo = open(vim.current.buffer.name)
    dst = tempfile.mkstemp(suffix='.html')
    dst_fo = os.fdopen(dst[0], 'w')
    dst_filename = dst[1]
    print dst_filename
    out = publish_file(src_fo, '.', dst_fo, '.', writer_name='html')
    webbrowser.open(dst_filename)
    time.sleep(3)
    os.remove(dst_filename)
EOF
ca rst2web :py Rst2Web()

この場合は、実行時に

:rst2web

とすれば良い。

最後に

これで、vimのreST用プラグインの導入と、プレビュー環境の構築が完了。