merilnは便利だがプロジェクト毎に一々書くのもだるい。 そう思って前に調べたら調度良いタイミングでそういうスクリプトを書いてくれている人が居た。

Create .merlin file for a project with all your ocamlfind packages and .opam sources in there · GitHub

このgistのスクリプトはopam内のパッケージ全てを入れてしまうので、コメントにて他の方が手を加えてくれた指定版を用いると良い。 埋もれてしまうには勿体無いので、分散としてここでも言及しておく。

#!/bin/sh

# Add PKGs:
ocamlfind list 
    | awk { print "PKG "$1 }

# See https://github.com/the-lambda-church/merlin/wiki/Letting-merlin-locate-go-to-stuff-in-.opam
find ~/.opam -name *.cmt -print0 
    | xargs -0 -I{} dirname {} 
    | sort -u 
    | awk { print "S "$0"
B "$0 }

# e.g.) merlin-init.sh | grep batteries > .merlin

私の環境では以下のようになる。

PKG batteries
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/build
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/build
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/src
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/src

単純な方法なのでこれでcoreを指定するとppx_core等も対象に入れてしまうが、実用には十分だろう。