Install Vim from source with Lua

最強の補完プラグインと名高いneocompleteに対応させる ためにluaをあり(enable)にしたVimをインストールしたい。また関連ファイルも合わせてソースからインストールしたい。以下のサイトを参考にやってみた。

参考:Lua対応Vimをインストール – rcmdnk’s blog http://rcmdnk.github.io/blog/2013/08/07/computer-vim/

ビルド環境:Ubuntu 14.04

stowにより$HOME/.local/{bin,lib,include}に対応するサーチパス(以下のコマンドを.bashrcに記述)を通している。

export PATH="$HOME/.local/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/.local/lib:$LD_LIBRARY_PATH"
export CPATH="$HOME/.local/include:$CPATH"

以下の順番でインストールする。

  1. termcap
  2. ncurses
  3. readline
  4. lua
  5. vim

ReadlineとtermcapはLuaのインストールに必要。また,Vimのインストールでもオプションを有効化できる。ncursesはLuaには必要ないが,Vimのインストールに必要。 readlineのインストールの時にオプションを有効化できるので先にncuresesをインストールしておく。

termcap

配布元:GNU Project Archives http://ftp.gnu.org/gnu/termcap/

cd ~/.local/src
wget -nc http://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
tar zxf termcap-1.3.1.tar.gz
cd termcap-1.3.1
./configure --prefix="$HOME/.local/stow/termcap-1.3.1"
make
make install
cd "$HOME/.local/stow/"
stow termcap-1.3.1

Readline

配布元:The GNU Readline Library http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

cd ~/.local/src
wget -nc ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz
tar zxf readline-6.3.tar.gz
cd readline-6.3
./configure --prefix=$HOME/.local/stow/readline-6.3
make
make install
cd $HOME/.local/stow/
stow readline-6.3

Lua

配布元:Lua: download http://www.lua.org/download.html

cd ~/.local/src
wget -nc http://www.lua.org/ftp/lua-5.2.3.tar.gz
tar zxf lua-5.2.3.tar.gz
cd lua-5.2.3
make linux MYLIBS="-L$HOME/.local/lib -ltermcap"
make install INSTALL_TOP=$HOME/.local/stow/lua-5.2.3
cd ~/.local/stow
stow lua-5.2.3

make linux実行時に躓いたのでエラー内容を以下にメモしておく。

readlineの不足

readline がインストールされていないと,まず以下のエラーが出る。

gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lua.o lua.c
lua.c:67:31: fatal error: readline/readline.h: No such file or directory
 #include <readline/readline.h>
                               ^
compilation terminated.

ライブラリの未指定

readlineをインストールしていても,configure時にMYLIBS変数でライブラリを指定しないと以下のエラーが出る。

gcc -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/usr/bin/ld: cannot find -lreadline

src/Makefile を確認すればなぜMYLIBS変数での指定が必要かの詳細はわかる。

termcapライブラリの不足

上記でライブラリの指定をしていても-ltermcapを付けていないと以下のエラーが出る。

gcc -o lua   lua.o liblua.a -L/home/senooken/local/lib -lm -Wl,-E -ldl -lreadline
/home/senooken/local/lib/libreadline.so: undefined reference to `tputs'
/home/senooken/local/lib/libreadline.so: undefined reference to `tgoto'
/home/senooken/local/lib/libreadline.so: undefined reference to `tgetflag'
/home/senooken/local/lib/libreadline.so: undefined reference to `UP'
/home/senooken/local/lib/libreadline.so: undefined reference to `tgetent'
/home/senooken/local/lib/libreadline.so: undefined reference to `tgetnum'
/home/senooken/local/lib/libreadline.so: undefined reference to `PC'
/home/senooken/local/lib/libreadline.so: undefined reference to `tgetstr'
/home/senooken/local/lib/libreadline.so: undefined reference to `BC'

参考:Lua を一般ユーザでソースコードからインストールする – はちゅにっき http://hatyuki.hatenablog.jp/entry/2014/04/10/140848

Vim

最新版の配布元:Vim source archives : vim online http://www.vim.org/sources.php

lua のインストールに必要なオプションは以下の2種類。

  • –enable-luainterp: Lua を有効にしてビルドする
  • –with-lua-prefix=$HOME/local: Lua がインストールされた場所を指定

–with-features=huge: その他の雑多なオプションを有効にしてくれる。

cd ~/.local/src
wget -nc ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
tar jxf vim-7.4.tar.bz2
cd vim74
./configure --prefix=$HOME/.local/stow/vim-7.4
LDFLAGS=-L$HOME/.local/lib ./configure --prefix=$HOME/.local/stow/vim-7.4 --enable-luainterp --with-lua-prefix=$HOME/.local --with-features=huge
make
make install
cd ~/.local/stow
stow vim-7.4

以下のコマンドでlua が有効になっていることを確認する。

~/.local/stow/vim-7.4/bin/vim --version | grep lua
 +dialog_con +lua -rightleft +windows
Linking: gcc -L/home/senooken/.local/lib -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lm -lncurses -lnsl -ldl -L/home/senooken/.local/lib -llua

なお,ncursesが入っていないとconfigureで以下のようにエラーが出る。

no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.

これでLuaを有効化にしたVimをインストールできた。これでどんな環境でも最新のVimを使える。そのうちneocompleteもインストールしよう。PythonとかRubyのオプションはまだ必要に迫られていないのでまたそのときにやる。

最後に記念として今回のVimのビルドオプションを掲載しておく。

vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 19 2014 19:07:42)
Compiled by senooken@senooken-ThinkPad-Edge-E440
Huge version with GTK2 GUI.  Features included (+) or not (-):
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
+balloon_eval    +float           +mouse_urxvt     -tag_any_white
+browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
+clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      +toolbar
+cmdline_compl   +insert_expand   -perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       -python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  +lua             +rightleft       +windows
+diff            +menu            -ruby            +writebackup
+digraphs        +mksession       +scrollbind      +X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           +xsmp_interact
+eval            +mouse_dec       +startuptime     +xterm_clipboard
+ex_extra        -mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    
+farsi           +mouse_netterm   +syntax

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です