ref.vim を入れる

PHP でコードを書く時に関数やメソッドのマニュアルを見るのに、phpmanual.vim に 自作の utf-8 対応パッチを当てたのを使っている。


最近仕事で Python を使ってるので、同じように Python のドキュメントを参照したい。
で、ref.vim を使えば pydoc から関数名やメソッド名でマニュアルを参照できるよう。


Github の Download から ref-v0.4.0.tar.gz をダウンロードし、autoload, doc, plugin の中身をそれぞれ、~/.vim/autoload, ~/.vim/doc, ~/.vim/plugin に移動。


PHP のマニュアル参照については、こちらを参考に、HTML ファイルを $HOME/Documents/phpmanual に置いた。
で、~/.vim/ftplugin/php/php.vim で以下を設定。

let g:ref_phpmanual_path = $HOME . '/Documents/phpmanual'

# ファイルタイプが .php だけ認識するように

これで php なファイルを開き、組み込みの関数とかの上で「K」を押すとマニュアルが表示される。

MacVim での動作

MacOS 10.6.3 で試したら、No such file or direcotry となって、マニュアルが表示されない。
Vim のバージョンは以下の通り。

version 7.2.411
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Mar 30 2010 10:09:42)
MacOS X (unix) 版
適用済パッチ: 1-411

Ubuntu 10.04 の vim で試したら、普通に出来た(Vimaptitude でインストールしたもの)。
MacVim がダメなんか?と思って $HOME/.vim/autoload/ref.vim のコードを追ってみた。

function! ref#system(args, ...)  " {{{2
  let args = ref#to_list(a:args)
  if g:ref_use_vimproc
    let stdout = a:0 ? vimproc#system(args, a:1) : vimproc#system(args)
    return {
    \ 'result': vimproc#get_last_status(),
    \ 'stdout': stdout,
    \ 'stderr': vimproc#get_last_errmsg(),
    \ }
  endif

ここで stdout にエラーメッセージが格納されってるっぽい。
vimproc って何?となったので、ググったら以下が出てきた。

vimprocとはYukihiro Nakadairaさんが開発している、優れた非同期実行ライブラリです。

http://vim-users.jp/2010/02/hack124/

インストールしてないので、g:ref_use_vimproc が通らなければ良いんちゃうと想像し、.vimrc に以下のように追加した。

let g:ref_use_vimproc = 0

で、php なファイルを開いて、適当な組み込み関数の上で「K」を押したら、該当の関数のマニュアルが表示された!
同じように Python なファイルを開いて、同じように適当なメソッドの上で「K」を押したら表示された。


php のマニュアルも ref.vim 経由で見るようにした。

vimproc の判定

vimproc が入ってるかの判定は、以下のようにやってるよう。

if !exists('g:ref_use_vimproc')
  let g:ref_use_vimproc = exists('*vimproc#system')
endif

vimproc が入ってないのに、メソッドの存在判定で 1 を返す理由がよくわからんが(Ubuntu はいけて、Mac がダメ)明示的に 0 を指定すれば良いよう。


追記(2010/06/08)
let g:ref_phpmanual_path を ~/.vim/ftplugin/php/php.vim に書かなくても自動的に判定してくれるとの事なので、.vimrc に移動した。