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 で試したら、普通に出来た(Vim は aptitude でインストールしたもの)。
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」を押したら表示された。
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 に移動した。