Ubuntuでkaoriyaパッチとmigemoを有効にしてVimをビルド

# UbuntuでKaoriYa-Vimを使いたい

Windowsでは[香り屋](http://www.kaoriya.net)さんの配布しているコンパイル済みVimが使えます。またMacでは他の有志が香り屋パッチを当てた MacVim-kaoriya のバイナリを使うことができる。

自分はUbuntuでVimを使っているので、香り屋版をUbuntuで使えないか調べたところ、パッチを当てて自分でコンパイルすることが可能だということでやってみた。またローマ字のまま日本語検索が可能なcmigemoも使えるようにした。

いくつかのサイトを参考にさせてもらったが、自分の環境だといくつかハマりどころがあったので備忘録として残しておく。

## コンパイル環境

- Ubuntu 14.10(64bit版)
- gcc version 4.9.1 (Ubuntu 4.9.1-16ubuntu6) 
- Vimのビルドに必要な依存パッケージ類は **apt-get buid-dep vim** でインストール済み
- cmigemoは別途インストール
- Mercurialも別途インストール
- aclocal, autoconf も別途インストール

### Mercurialの設定

MQ(パッチ)を使用するために ~/.hgrc に以下を記述しておく

```
[extensions]
mq =
```

## Vimのソースコードを取得

Vimの公式リポジトリをクローンする。この時に香り屋パッチのリポジトリも一緒に取得する。

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

### パッチリポジトリを更新

パッチリポジトリを更新する。

```
% hg log --mq | less
```

を見ると 最新のリビジョン: 104:4b5bd3b04e84 が **update for 20150301** となっているので、今回はそのままのリビジョンを使う。

もしVim本体とバージョンを合わせるためにパッチリポジトリのチェンジセットを変更する必要がある場合は以下のコマンドを使う。

```
% hg update 4b5bd3b04e84 --mq
```

* "4b5b..." はチェンジセットの数字、リビジョンが特定できれば先頭数文字だけで可

### Vim本体のリポジトリを更新

Vim本体のリポジトリもバージョンを合わせる。

```
% hg tags | less
```

香り屋版の最新のバイナリはver.7.4.648をコンパイルしているので、それに合わせる。

```
% hg update v7-4-648
```

ついでに、後々コンパイルし直すときのためにブランチを切っておく。

```
% hg branch kaoriya-7.4.648
```

### パッチ一覧

```
% hg qseries
```

とすると、パッチの一覧が表示できる。

### パッチの適用

```
% hg qpush -a
```

ですべてのパッチを適用する。

## cmigemoに対応したconfigureの作成

kaoriyaパッチは適用したものの、このままconfigureするのではcmigemoは使えない。

~~```
% cd ~/vim/src
% mv configure.in configure.ac
% aclocal
% autoconf
```~~

~~configure.in をconfigure.acにリネームしたのは、一度そのままaclocalを実行すると「aclocalの入力はconfigure.inではなくconfigure.acです」という意味の警告が出たため。そのままconfigureすると、--enable-migemoが有効なオプションではないと言われてしまう。~~

####※ 2015/03/27追記

コメント欄でご指摘いただきました。上に書いた方法はちょっと変わったやり方だったようです。
正式なやり方は下記のように ```src``` ディレクトリで ```make autoconf``` とすることで、 ```src/auto/configure``` が作成される。

```
% cd ~/vim/src
% make autoconf
```



## Vimのコンパイル

ここまで来たら、あとは ```./configure``` してコンパイルするだけ。とはいっても、ここもいくつかハマりどころがあった。

### configure オプション

```
% LIBS="-lmigemo" ./configure \
  --prefix=/usr/local \
  --with-features=huge \
  --enable-gui=gnome2 \
  --enable-multibyte \
  --enable-perlinterp=dynamic \
  --enable-pythoninterp=dynamic \
  --enable-tclinterp \
  --enable-rubyinterp=dynamic \
  --enable-luainterp=dynamic \
  --with-lua-prefix=/usr \
  --with-luajit \
  --enable-gpm \
  --enable-cscope \
  --enable-fontset \
  --enable-migemo \
  --enable-fail-if-missing
```

- LIBS="-lmigemo"としてやるのは参考にしたページにも書かれていた通り。
- インストール先のパスの指定は--prefix=/usr/local のようにする。他の場所にする場合は適宜修正。
- スクリプト言語のインタープリタはとりあえずdynamicをつけておいた。
- --enable-migemo オプションを指定するのを忘れずに。

#### perlオプション指定時のエラー

今回の環境では、--enable-perlinterpオプションを指定するとmake時にエラーが出てビルドに失敗した。

この記事を書く少し前に他のマシンで試した際は特に問題がなかった。香り屋のページ[Vim 7.4.648 (2015/03/01版) 配信 - KaoriYa](http://www.kaoriya.net/news/2015/03/01/)にコンパイル時に使用するPerlのバージョンを5.20.1に変更と書いてあったので合わせてみたが効果なし(ちなみにplenvでPerlのバージョンを管理している)。

理由がよくわからず、自分の用途ではperlオプションがどうしても必要というわけではないので、今回はperlオプションを指定せずにconfigureした(どなたか同じような環境でうまくいったという方がいれば教えてください)。

##### ※2015/03/22 追記

plenvでインストールしたperlではなく、元々Ubuntuにインストールされているバージョンを使用するとmake時にエラーは出なくなった。

plenvで管理していても、

```
% plenv versions
* system (set by /home/hogeuser/.plenv/version)
  5.20.1
  5.20.2
  5.21.9
```

のように、 **system** と表示されるバージョンになっていればOK。

### make & インストール

configureして特に問題なければいよいよコンパイルしてインストール。

```
% make
% sudo make install
```

### パスを通す

今回は/usr/localにインストールしたのですでにapt-getなどで入れているVimはそのまま残っている。そのため単にコマンドラインでvimと叩くとパスの通っている/usr/bin/vimが起動されてしまう。

.bashrc や .zshrc に以下のように追記してインストール場所にパスを通しておく。

```
export PATH=/usr/local/bin:$PATH
```

### +kaoriya +migemoになっていることを確認

コマンドラインで

```
% vim --version
```

とうつか、Vimを起動してから

```
:version
```

とうち、+kaoriya +migemo と表示されてれば無事に香り屋パッチとcmigemoは有効になっている。

お疲れ様でした。


#### 参考にしたページ

- [KaoriYa-Vimをコンパイル](http://d.hatena.ne.jp/sasaplus1/20130731/1375279146)
- [Linuxでkaoriyaパッチ&migemoを有効にしてvimを最新ソースからインストールした](http://deris.hatenablog.jp/entry/20120817/1345183111)
- [vim-jp >> Linuxでのビルド方法](http://vim-jp.org/docs/build_linux.html)