noise

計算機科学や各種設定のメモ

Vim プラグイン QuickRun を OCaml に対して利用する

Vimプラグインに編集中のバッファのプログラムを実行し、その結果を別のウィンドウに表示してくれる QuickRun というものがあります。大変便利なので Vimmer にはとても有難い存在です。
QuickRunはバッファの内容を一時ファイルに保存し、それを処理系やコンパイラに渡しているみたいです。しかし、外部プログラム(ライブラリなど)を利用しつつ実行したい場合デフォルトでは困ったことになります。
今回、OCamlで自分の書いたライブラリを呼び出した場合について説明します。たとえば

open Hoge
let _ = print_endline Hoge.message

というコードを実行したいとします。
このときデフォルトでは :QuickRun または \r とすると実行してくれますが打ちこんでみると

Error: Reference to undefined global `Hoge'

というメッセージが表示されます。
これに対処するにはバッファにあるプログラムの最初に #load "Hoge.cmo" と書くか、ocamlmktop を使って Hoge.cmo をリンクしたトップレベルをつくりそれを QuickRun から呼ぶようにします。そして

:QuickRun ./myocamltop

などとすれば実行されるはずです。
あとは \r で一発で実行してほしいのでキーマップを設定してあげます。

:nnoremap r Quickrun ./myocamltop

n + noremap の意味: n はノーマルモード、i なら挿入モードでのキーマップを変更する。