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
endfunction

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.
JaneStreet

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

About Eric Zhiqiang Ma

Eric Zhiqiang Ma 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.

One comment:

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 Fclose.com Posts by Email if you have not.