Vim で Haskell 書くときに

昨日 freenode の #haskell.jp にて nwn さんの呼び掛けで HIMA が行われた.
自分は開催中ちょっと疲れていて頭が働かず,話に参加できなかったけど…


その中でかずさんが ghc-mod.el を発表してた.
http://d.hatena.ne.jp/kazu-yamamoto/20090930/1254299613
話を聞く限り,なかなか便利そう.
そこで,主に Vim 派の人向けに既存のプラグインと自分が使ってるちょっと便利なコマンドを紹介しようと思う.

haskellmode.vim

かなり大掛かりなプラグイン
http://projects.haskell.org/haskellmode-vim/
doc を見ればわかるように,型を見れたり import に基づく補完ができたり,hpaste に投稿したりできるみたい.
これを使っていた時期も少しあったのだけど,どうも動作がもたつくので使わなくなってしまった.

shim.vim

これは Vim のバッファ内で GHCi と仲良くやれるプラグイン
http://www.vim.org/scripts/script.php?script_id=2356
たまに使ってる.
でもそれなら普通に GHCi を単独で立ち上げるのとあんまり変わらないかなぁという印象.
ちなみに +ruby 必須.

というわけで

あんまり俺はプラグインとか使っていないのだった.
しかし型を見たり Hoogle したいときはあるので,~/.vim/after/ftplugin/haskell.vim にこういうのを書いてる.

nnoremap <buffer> <Space>* :<C-u>execute 'Wwwsearch -hoogle '.expand('<cword>')<CR>
nnoremap <buffer> <Space>h :<C-u>Wwwsearch -hoogle 
nnoremap <buffer> <silent> <Space>t :<C-u>call <SID>ShowType(expand('<cword>'))<CR>

function! s:ShowType(word)
  echo join(split(system("ghc -isrc " . expand('%') . " -e ':t " . a:word . "'")))
endfunction

wwwsearch はこれ.
http://www.vim.org/scripts/script.php?script_id=2785
~/.vimrc に

call wwwsearch#add('hoogle', 'http://www.haskell.org/hoogle/?hoogle={keyword}')

こう書いて Hoogle を足してある.
ShowType() は今開いているファイルを GHC で読み込んで :t で型を表示させているだけ.
したがって,トップレベルで定義されているものの型しか表示できない.
でもまぁ気軽に型を調べることができるので便利なときもある.