Vimとボクと、ときどき、PHP

Vim好きなエンジニア(主にPHP開発)が不定期に技術情報やネタを書いていくブログです

Home » Vimを+kaoriya(さらに +lua)でビルドする on Linux Mint/CentOS6

Vimを+kaoriya(さらに +lua)でビルドする on Linux Mint/CentOS6

2016/04/29 追記

VimがリポジトリをGithubに移行したため、この記事の内容は一部が古くなっています。
新しい記事の方も参照してください。


Linuxで+kaoriyaのVimをコンパイルする方法が、ググってもなかなか見つからない(あっても細かい部分が端折られていることが多い)ので、メモしておきます。

VimをLinuxで使いたければ、

apt-get install vim

とか

yum install vim

とかやればいいわけですが、パッケージマネージャを使うとやけに古いバージョンしかなかったりします。それでも困らない方にとっては、パッケージマネージャは非常に便利なものなので否定するつもりは全くないです。

しかし私の場合、先日の記事で紹介したneocomplete.vimを使うためにはVimのバージョンが7.3.855以上でなければならない(もっと言うと+luaも必要)わけですが、CentOS6でyumでインストールしたVimは7.2。これは困る。
さらに、最初はWindowsでVimを覚えたので、Vimといえば香り屋パッチが適用されているVim(いわゆる kaoriya-Vim)でないと何となく落ち着きません。

そこで、Vimをソースからビルドしてやろうとなるわけですが、香り屋パッチを当てつつ+luaでビルドするみたいな情報はなかなか見つからず、似たような内容の情報を切り貼りする感じで試行錯誤した末に何とか成功しましたので、ここにメモしておこうという次第。


私が確認したのはLinux Mint 17.1およびCentOS6.6なので、その他の環境では必要な部分を適宜読み替えでお願いします。たぶんUbuntuならそのままいけると思うけど。

ビルドツール一式をインストール

Vimをビルドしようと思っている人ならもうインストール済みかとは思いますが、念の為。パッケージマネージャでさくっと入れましょう。

apt-getの場合:

sudo apt-get install build-essential

yumの場合:(この方法はあまり知られていないようですね。非推奨なのかな?)

sudo yum groupinstall "Development Tools"

必要なライブラリのインストール

最低限必要なライブラリをインストールします。

apt-getの場合:

sudo apt-get install gettext libncurses5-dev

yumの場合:

sudo yum install gettext ncurses-devel

もしかしたら他に kernel-develとかkernel-headersとか必要かもしれません。確認中です。

※GVimも作る場合

ここは好みと環境次第ですが、私はLinux MintでGVimを使ってますので、やりました。CentOSはサーバなのでやってません。

sudo apt-get install xorg-dev libgtk2.0-dev

+luaとかするために必要なものをインストール

ここも好みですが、Vimプラグインの中には+pythonや+rubyを要求するものもたまにあるので、私はそれらに+luaでビルドしました。luajitを使ってみたかったのでそれも含めてます。

apt-getの場合:

sudo apt-get install liblua5.1-dev luajit libluajit-5.1-dev python-dev ruby-dev

yumの場合:

sudo yum install lua-devel python-devel ruby-devel

注意:yumの場合、luajitがリポジトリに無いのでパッケージマネージャではインストールできません。自分でビルドする必要があります。(後述

Mercurialをインストール

Vimのソースを取得するためにMercurialをインストールします。Gitリポジトリもあるみたいですが、非公式である点とMercurialの方がパッチを当てるのが楽なことから、こちらを選択。
ちなみにMercurialは、SVNやGitのようなバージョン管理システムらしいです。

apt-getの場合:

sudo apt-get install mercurial

yumの場合:

sudo yum install mercurial

インストールしたら、ホームディレクトリに以下の内容で.hgrcファイルを作成。

[ui]
username = hogehoge
[extensions]
mq=

hogehogeの部分は適当に自分の名前とかに変えてください。

Vimのソースと香り屋パッチを入手

やっとです。
適当にディレクトリを決めて、Vimのソースと香り屋パッチを取得します。ここでは $HOME/vim とします。

hg qclone https://vim.googlecode.com/hg $HOME/vim -p https://bitbucket.org/koron/vim-kaoriya-patches

cloneではなくqcloneな点に注意。MercurialのMQ(Mercurial Queues)という拡張機能を使ってます。
私がざっくり調べたアバウトな認識では、「あるリポジトリとは独立して存在するパッチリポジトリを関連づけられる機能」といったところ。たぶん厳密には間違ってると思う。
今回の場合、Vimのリポジトリと香り屋パッチのリポジトリは完全に別なわけですが、それらを統合するような形でcloneしてきてごにょごにょしますよというイメージです。別にこれで困ってないから、詳しく調べることはせんw

Vimのバージョンとパッチのバージョンを合わせる

パッチを当てる場合、Vimのバージョンに合ったパッチでないとエラーになります(ちょっとくらい違ってもいけますが)。ここ、結構重要だと思うんですが、あまり具体的に書いてるページが無くて、軽くハマりました。
以下、私のやり方ですが、参考になれば。

まず、香り屋さんのページで、「ニュース」を見ます。現時点(2015/05/25)では、最新のニュースに「Vim 7.4.648 (2015/03/01版) 配信 」とあります。これで、Vim側のバージョンは 7.4.648 にしようと決めます。最新ではありませんが、Windows版と合わせられるという安心感があります。

そして、パッチ側のログを確認します。

cd $HOME/vim
hg log --mq | less

ログの中から、対象のVim側のバージョンが分かるようなコミットを探します。今回は幸運にも、最新のコミットに「update for 20150301」の記述を見つけました。ジャストです。

続いて、Vim側の「タグを」確認します。コミットログでもいいんですが、Vimの方はバージョンごとにタグを打ってくれているので、そっちの方が楽です。(パッチもそうしてくれないかな)

hg tags | less

当たり前ですが、「v7-4-648」というタグがありますね。

さて、バージョンを合わせましょう。パッチ側は最新でよさそうなので、Vim側だけ変えます。

hg update v7-4-648

パッチのリビジョンも変更するなら、対象のハッシュを覚えておいて

hg update 4b5bd3b04e84 --mq

とします。最後の –mq を忘れずに。(ちなみに、上記の組み合せであればパッチがうまく当たることを確認しております)

hg qseries

とすると、適用されるパッチが一覧で表示されます。

masterブランチで作業するのは気持ち悪いので、作業用のブランチを切ってからパッチを当てます。

hg branch kaoriya-7.4.648
hg qpush -a

これでパッチが適用されました。
正確には、「+experiments」とかなっているもの(実験的なもの?)はスキップされるようです。それらも適用したい場合は、各自Yahoo!でググってください。

configure & make & インストール

やっとここまで来ました。
configureのオプションは大量にあるようですが、気になる人は

./configure --help

で確認してください。
上でも書いたとおり、+lua +python +ruby で GVim も含めてビルドするオプションはこんな感じです。

./configure 
  --prefix=$HOME/opt 
  --exec-prefix=$HOME/bin 
  --with-features=huge 
  --disable-selinux 
  --enable-gui=gtk2 
  --enable-multibyte 
  --enable-pythoninterp 
  --enable-rubyinterp 
  --enable-luainterp 
  --with-lua-prefix=/usr 
  --with-luajit 
  --enable-fontset 
  --enable-fail-if-missing

※CentOSでluajitを入れていない人は、後述の方法でビルドするか –with-luajit を消すかしてください。
–prefixは、Vimをインストールする先です。デフォルトは /usr/local ですが、root権限が無いような場合は上記のように指定します。
–exec-prefixは、Vimの実行ファイルや関連コマンド(vimdiffとか)がインストールされる場所の指定です。指定しない場合は –prefix と同じ場所になります。
私は.bashrcで $HOME/bin にパスを通すようにしていますので、 $HOME/bin を指定しています。

あとは

make && make install

でビルド&インストールできます。

確認

which vim

でパスが通っていることを確認、

vim --version

で +kaoriya やその他のオプションが有効になっていることを確認しましょう。

お疲れ様でした。


CentOSでluajitをビルドする

まずソースを取得します。
Gitをインストールしていれば

git clone http://luajit.org/git/luajit-2.0.git

で取得、Gitがなければluajitのページからダウンロードしてください。
あとは基本的に

make && sudo make install

でいけます。
「基本的に」というのは、インストール先を変更する場合です。デフォルトでは /usr/local になりますが、root権限がないとかでインストール先を別の場所にしたい場合は、

make PREFIX=$HOME/opt
make install PREFIX=$HOME/opt

とすればいいようです。(luajitのINSTALLに書いてありました)


luajitをインストールしてもVimが起動しない

環境によっては、luajitをビルド&インストールしてVimを起動すると、

error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

このようなエラーが出ることがあります。
解決策の1つとして、

sudo echo "/usr/local/lib/" > /etc/ld/so.conf.d/luajit.conf
sudo ldconfig

とかすればいいようなのですが、見て分かるとおりsudoできる人でないとできません。
他には.bashrcとかでLD_LIBRARY_PATHに追加するという方法もあるらしいです。

Name of author

Name: よーすけ

Short Bio:

主にPHP開発をやってる社内PGです。

One thought on “Vimを+kaoriya(さらに +lua)でビルドする on Linux Mint/CentOS6

コメントを残す

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