--- breaks: false tags: public-tech --- # Vim で OCaml を書く この記事は [OCaml Tips Advent Calendar 2022](https://adventar.org/calendars/8396) の5日目です。 OCaml を書く場合 Emacs が超絶に便利な(らしい)ので、 普通は Emacs で書くのがよいと思います[^emacs-ocaml]。 ただし、私のように指に Vim のキーバインドが焼き付いてしまった人は、仕方がないので [ocaml-lsp](https://github.com/ocaml/ocaml-lsp) を使いましょう。 [^emacs-ocaml]: Emacs で [F*](https://www.fstar-lang.org/) は書くんですが OCaml を書いたことがないので、これは伝聞です。 ocaml-lsp をそのまま入れて設定しても良いですが、`vim-lsp` と `vim-lsp-settings` を入れて、OCaml ファイルを開いた状態で `:LspInstallServer` すると楽です。 ただし、ocaml-lsp が要求する OCaml バージョンが定期的に更新されたり、 インストール方法が定期的に変更されたりするため、これが動かなくなっていることがあります (ありました)。そういう場合は ocaml-lsp の README に書かれている手順と `vim-lsp-settings` の [OCaml 用セットアップスクリプト](https://github.com/mattn/vim-lsp-settings/blob/master/installer/install-ocaml-lsp.sh)を眺めて、修正して PR を送ると良いと思います([送り](https://github.com/mattn/vim-lsp-settings/pull/549) [ました](https://github.com/mattn/vim-lsp-settings/pull/638))。 あとフォーマッタには [OCamlFormat](https://github.com/ocaml-ppx/ocamlformat) が便利です。これは `opam install ocamlformat` で入ります。 Vim 側は [Neoformat](https://github.com/sbdchd/neoformat) が対応しています。 例えば次のように設定しておくと動作します。 ```vim= let g:neoformat_enabled_ocaml = ['ocamlformat'] let g:neoformat_ocaml_ocamlformat = { \ 'exe': 'ocamlformat', \ 'no_append': 1, \ 'stdin': 1, \ 'args': ['--enable-outside-detected-project', '--name', '"%:p"', '-'] \ } ```