Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

この文書は、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に記述します。

letg: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!autocmdBufWrite,FileWritePre,FileAppendPre *.mli\=calls:ocaml_format()
augroup END

参考文献

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>