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.
ocp-indent after installing opam:
$ opam install ocp-indent
vim by adding these lines to your
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
# These are `normal`, `apprentice` and `JaneStreet` and set different defaults. JaneStreet
You may choose the other defaults. The
JaneStreet mode works great for me.