Auto Indenting for OCaml Code in Vim with ocp-indent

The built-in indenting in Vim for OCaml seems not very good. How to set up auto indenting for OCaml code in Vim? ocp-indent works very well for me. This posts introduces how to configure Vim to use ocp-indent to automatically indent/format OCaml code.

First, install ocp-indent after installing opam:

$ opam install ocp-indent

Second, configure vim by adding these lines to your ~/.vimrc:

au BufEnter *.ml setf ocaml
au BufEnter *.mli setf ocaml
au FileType ocaml call FT_ocaml()
function FT_ocaml()
    set textwidth=80
    set colorcolumn=80
    set shiftwidth=2
    set tabstop=2
    " ocp-indent with ocp-indent-vim
    let opamshare=system("opam config var share | tr -d '\n'")
    execute "autocmd FileType ocaml source".opamshare."/vim/syntax/ocp-indent.vim"
    filetype indent on
    filetype plugin indent on

You can use == to format the code selected or the current line now.

Third, to make ocp-indent be automatically invoked by autoindent, add the ocp-indent-vim script. This ensures that ocp-indent will indent the current line after you input Enter, “if”, “else”, etc. You can use tools like pathogen to manage the installed plugins in Vim.

Last, configuring the ocp-indent by adding these lines to ~/.ocp/ocp-indent.conf":

# These are `normal`, `apprentice` and `JaneStreet` and set different defaults.

You may choose the other defaults. The JaneStreet mode works great for me.

About Eric Zhiqiang Ma

Eric Zhiqiang Ma is a PhD candidate at Dep. of CSE, HKUST. He is interested in system software for cloud computing, virtualization of large-scale distributed systems and etc. Also find Eric on Facebook, Twitter, LinkedIn and Google+. The views or opinions expressed here are solely Eric's own and do not necessarily represent those of any third parties. More Posts - Website

One thought on “Auto Indenting for OCaml Code in Vim with ocp-indent”

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Click to subscribe to Posts by Email if you have not.