LoginSignup
14
11

More than 5 years have passed since last update.

VimでOCamlを書くためにmerlinとocp-indentを設定する

Posted at

この文書は、VimでOCamlを快適に書くためにmerlinとocp-indentを導入する方法について書かれています。
merlinはコード補完とエラーチェックに、ocp-indentはコードフォーマットに使用します。

筆者の環境はOS X(10.11.2)です。

OCamlとOPAMのインストール

merlinとocp-indentをインストールする前に、OCamlとそのパッケージマネージャであるOPAMをインストールする必要があります。
どちらもHomebrewでインストールできるため、特に手間はかかりません。

$ brew install ocaml --with-x11
$ brew install opam

OCamlの方に--with-x11をつけたのは、Graphicsを導入するためです。必要ない方はつける必要はありません。
自分の場合、 OCamlはバージョン4.02.3が、OPAMはバージョン1.2.2がインストールされました。

merlinとocp-indentのインストール

OPAMを使って、 merlinocp-indent をインストールします。

$ opam install merlin
$ opam install ocp-indent

自分の場合、merlinはバージョン2.2が、ocp-indentはバージョン1.5.2がインストールされました。
実はこの2つをインストールした直後に、それぞれEmacsとVimの設定について書かれたメッセージが表示されているので、後はそれに従うだけで設定が完了します。

Vimの設定

merlinの設定

vimrcに以下のように記述します。

let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
execute 'set rtp+=' . g:opamshare . '/merlin/vim'

これにより、コード補完ができるようになりました。また:MerlinErrorCheckで、エラーチェックができるようになりました。

保存時に自動的にエラーチェックを行う

シンタックスチェックのためのプラグインであるsyntashticを導入して、保存した時に自動的にエラーチェックが走るようにします。
syntasticのインストールはNeoBundleであれば、vimrcに以下のように書きます。

NeoBundle 'scrooloose/syntastic'

加えて以下の設定をvimrcに記述します。

let g:syntastic_ocaml_checkers = ['merlin']

これにより保存時に自動的にエラーチェックが行われるようになります。
これは最低限の設定で、syntasticは他にも様々な設定ができますが、それについては省略します。

ocp-indentの設定

vimrcに以下のように記述します。

execute 'set rtp^=' . g:opamshare . '/ocp-indent/vim'

g:opamshareについてはmerlinのインストール時に設定したものをそのまま使っています。ocp-indentだけ設定したい方は、merlinの方の該当行をコピーしてください。

保存時に全体をフォーマットする

ocp-indentはCLIとしても提供されているため、以下のようにして保存時にバッファ全体に対してocp-indentを仕掛けることができます。

function! s:ocaml_format()
    let now_line = line('.')
    exec ':%! ocp-indent'
    exec ':' . now_line
endfunction

augroup ocaml_format
    autocmd!
    autocmd BufWrite,FileWritePre,FileAppendPre *.mli\= call s:ocaml_format()
augroup END

参考文献

https://github.com/the-lambda-church/merlin/wiki/vim-from-scratch
https://www.typerex.org/ocp-indent.html (このページのvim設定は誤り)

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11