---
# System prepended metadata

title: Vim で OCaml を書く
tags: [public-tech]

---

---
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"', '-']
    \ }
```

