vim で lua を使えるようにビルドしたメモ

ここでは Cygwin 上に構築するものとして説明します。

Lua の設定

まず、最新の Lua を以下よりダウンロードします。

本日時点で 5.2.2 です。僕は拙作の UTF-8 対応版(GitHub - satosystems/lua-5.2.2-utf8: Lua 5.2.2 with UTF-8)を使用しますが。

ダウンロードした ZIP を適当な場所に展開します。僕の場合は ~/Dropbox/Eclipse/lua-5.2.2-utf8 です。

Lua のビルドは以下のように行います。

$ cd ~/Dropbox/Eclipse/lua-5.2.2-utf8
$ make posix

これで Lua はビルドできるはずです。

次に環境変数を設定します。

.bash_profile に以下の行を追加し、先ほどビルドした lua と luac が実行できるようにします。

# for Lua
if [ -d ${HOME}/Dropbox/Eclipse/lua-5.2.2-utf8/src ] ; then
  export PATH=${HOME}/Dropbox/Eclipse/lua-5.2.2-utf8/src:${PATH}
fi

以下のように入力して Lua のバージョンが表示されれば設定成功です。

$ source ~/.bash_profile
$ lua -v
Lua 5.2.2  Copyright (C) 1994-2013 Lua.org, PUC-Rio

Vim のために以下の作業を行えば、Lua の設定は終わりです。

$ mkdir ~/Dropbox/Eclipse/lua-5.2.2-utf8/src/include
$ cd ~/Dropbox/Eclipse/lua-5.2.2-utf8/src/include
$ ln -s ../*.h .

これは Vim のビルドが --with-lua-prefix で指定した場所 + include という場所にヘッダがあることを前提に処理が進むためです。

Vim の設定

次に最新の Vimソースコードをダウンロードします。

以下より最新の ZIP をダウンロードするか、Mercurial で最新のソースコードをクローンします。

私はクローンしました。クローンからビルドまでの手順はこんな感じです。

$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim/src
$ make distclean
$ ./configure --enable-luainterp=yes --with-lua-prefix=/home/ogata/Dropbox/Eclipse/lua-5.2.2-utf8/src
$ make

make がうまくいったら、その場で以下のように入力して +lua があることを確認します。

$ src/vim --version

ここで -lua になっている場合、手順のどこかが間違っています。

configure の出力の以下の lua の部分を見直してみてください。

checking --enable-luainterp argument... yes
checking --with-lua-prefix argument... /home/ogata/Dropbox/Eclipse/lua-5.2.2-utf8/src
checking for lua... /home/ogata/Dropbox/Eclipse/lua-5.2.1-utf8/src/lua
checking Lua version... 5.2
checking if lua.h can be found in /home/ogata/Dropbox/Eclipse/lua-5.2.2-utf8/src/include... yes

うまくいけば Vim 上から :luaLua スクリプトが実行できるようになります。

あとは、ビルドした vim が実行されるようにし、以下のようにシンボリックリンクを設定すれば完了です(本当はインストールした方が良いのでしょうけど)。

$ ln -s vim/runtime /usr/local/share/vim
補足

VimLua をダイナミックリンクするようにもビルドできます。configure に渡す --enable-luainterp を dynamic にすればよいです。
ただ、Vim が探す .so の名前や形式と、実際に存在する(または存在しない)DLL の名前や形式が微妙にかみ合わないため、ソースからビルドするなら、今回のようなスタティックリンクが簡単だと思います。