vim8.0をインストールする

Rails開発用にvimの環境を整えようと思います。

今年、vimのメジャーバージョンアップがあったんですね。知りませんでした。せっかくなので、新しいバージョンを利用しようとvimアップグレード作業をしたのですが、これがかなりしんどかった。たかだかvimをインストールするだけで、こんなに大変だったとは。

環境情報は以下です。

  • CentOS 7.2
  • vim 8.0.134
  • pyenv利用環境
  • rbenv利用環境

rootで作業してます。

現行vimをアンインストール

まず、現行でインストールされているvimを確認。

# vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)

入っているのは7.4の古いバージョンなので、これをアンインストール。尚、アンインストールされる際に、依存の関係でsudoも併せて削除されちゃいます。なので、後で入れ直しが必要です。

# yum remove "vim*"
(中略)
削除しました:
  vim-common.x86_64 2:7.4.160-1.el7  vim-enhanced.x86_64 2:7.4.160-1.el7  vim-filesystem.x86_64 2:7.4.160-1.el7  vim-minimal.x86_64 2:7.4.160-1.el7

依存性の削除をしました:
  sudo.x86_64 0:1.8.6p7-16.el7

最新vimのソースをもってくる

最新バージョンをgithubからクローンしてきます。

# git clone https://github.com/vim/vim

ソースをconfigure

で、例によりconfigureしてMakefileファイルを作ってあげるわけですが、configure実行時にいくつかオプションを指定する必要があります。どういったオプションが必要となるのか、ざっくり調べたものの、ぶっちゃけ自信ないです。この投稿を参考に作業を考えている場合、各自必要オプションを調べた方が安全と思います。(とりあえず僕の環境では動いていますが。。。)

オプションの情報は、「./configure --help」で表示できるほか、「./vim/src/Makefile」内の「# CONFIGURE - configure arguments」以下に記載されています。以下のリンクは、Makefile内の該当箇所です。

https://github.com/vim/vim/blob/master/src/Makefile#L316

# cd vim
# ./configure \
 --enable-fail-if-missing \
 --with-features=huge \
 --disable-selinux \
 --enable-luainterp \
 --enable-perlinterp \
 --enable-pythoninterp=dynamic \
 --with-python-config-dir=/home/pyuser/.pyenv/versions/2.7.12/lib/python2.7/config \
 --enable-python3interp=dynamic \
 --with-python3-config-dir=/home/pyuser/.pyenv/versions/3.5.2/lib/python3.5/config-3.5m \
 --enable-rubyinterp=dynamic \
 --with-ruby-command=/home/rails/.rbenv/shims/ruby \
 --enable-cscope \
 --enable-fontset \
 --enable-multibyte \
 vi_cv_path_python3=/home/pyuser/.pyenv/versions/3.5.2/bin/python3.5

「/home/pyuser/.pyenv」と「/home/rails/.rbenv」は、それぞれpyenvとrbenvが入っているパスです。

補足1:lua-develを入れておこう

以下メッセージが出力される場合。

checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua5.1... no
configure: error: could not configure lua

入れよう。

# yum install lua-devel
補足2:perl-ExtUtils-Embedを入れておこう

以下メッセージが出力される場合

checking --enable-perlinterp argument... yes
checking for perl... /bin/perl
checking Perl version... OK
Can't locate ExtUtils/Embed.pm in @INC (@INC contains: . /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5).
BEGIN failed--compilation aborted.
Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.
Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

入れよう。

# yum install perl-ExtUtils-Embed
補足3:pyenvを用いてPython2と3の環境が共存している場合

当然、vimでも2と3を切り替えて利用したいですよね。その場合、いくつかの手続きが必要です。

vimで切り替えて利用したい場合、pythonライブラリの動的リンクを作成しておく必要があるらしいです。そのためには、pyenvでpythonをインストールする際、動的リンクを作成するようのオプションを指定してあげないといけないとのこと。

以下の記事を参考にさせてもらっています。

え?君せっかく Python のバージョン管理に pyenv 使ってるのに Vim の補完はシステムライブラリ参照してるの? - Λlisue's blog

LinuxでPythonをビルドするときの --enable-shared オプションについて - Qiita

動的リンクができるようにpythonをインストールしておく。

# CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.12
# CONFIGURE_OPTS="--enable-shared" pyenv install 2.5.2
# pyenv rehash

且つ、python3はpyenv環境にインストールされており、システム上にはインストールされていないため、configure時のチェック処理で、python3が見つからないというエラーが出てきます。そのため、以下の変数をcofigure実行時に追加して、pyenv内のpython3を見つかるようにしておく必要があります。

見つからんと言ってくるから、

checking for python3... no
checking for python... /usr/bin/python
checking Python version... 2.7
checking Python is 3.0 or better... too old
configure: error: could not configure python3

python3の場所を教えてあげておく。

vi_cv_path_python3=vi_cv_path_python3=/home/pyuser/.pyenv/versions/3.5.2/bin/python3.5
補足4:ruby-develを入れておこう

以下メッセージが出力される場合

checking Ruby header files... not found; disabling Ruby
configure: error: could not configure Ruby

入れよう。

# yum install ruby-devel

make

コンパイルします。

# make

インストール

インストールします。

# make install

バージョンコマンドで確認。pythonrubyの部分が「+」となっていることを確認。

# vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Dec 30 2016 13:34:08)
適用済パッチ: 1-134
Compiled by root@localhost.localdomain
Huge 版 without GUI.  機能の一覧 有効(+)/無効(-)
+acl             +file_in_path    +mouse_sgr       +tag_old_static
+arabic          +find_in_path    -mouse_sysmouse  -tag_any_white
+autocmd         +float           +mouse_urxvt     -tcl
-balloon_eval    +folding         +mouse_xterm     +termguicolors
-browse          -footer          +multi_byte      +terminfo
++builtin_terms  +fork()          +multi_lang      +termresponse
+byte_offset     +gettext         -mzscheme        +textobjects
+channel         -hangul_input    +netbeans_intg   +timers
+cindent         +iconv           +num64           +title
-clientserver    +insert_expand   +packages        -toolbar
-clipboard       +job             +path_extra      +user_commands
+cmdline_compl   +jumplist        +perl            +vertsplit
+cmdline_hist    +keymap          +persistent_undo +virtualedit
+cmdline_info    +lambda          +postscript      +visual
+comments        +langmap         +printer         +visualextra
+conceal         +libcall         +profile         +viminfo
+cryptv          +linebreak       +python/dyn      +vreplace
+cscope          +lispindent      +python3/dyn     +wildignore
+cursorbind      +listcmds        +quickfix        +wildmenu
+cursorshape     +localmap        +reltime         +windows
+dialog_con      +lua             +rightleft       +writebackup
+diff            +menu            +ruby/dyn        -X11
+digraphs        +mksession       +scrollbind      -xfontset
-dnd             +modify_fname    +signs           -xim
-ebcdic          +mouse           +smartindent     -xpm
+emacs_tags      -mouseshape      +startuptime     -xsmp
+eval            +mouse_dec       +statusline      -xterm_clipboard
+ex_extra        -mouse_gpm       -sun_workshop    -xterm_save
+extra_search    -mouse_jsbterm   +syntax
+farsi           +mouse_netterm   +tag_binary
      システム vimrc: "$VIM/vimrc"
      ユーザー vimrc: "$HOME/.vimrc"
   第2ユーザー vimrc: "~/.vim/vimrc"
       ユーザー exrc: "$HOME/.exrc"
  デフォルトファイル: "$VIMRUNTIME/defaults.vim"
       省略時の $VIM: "/usr/local/share/vim"
コンパイル: gcc -c -I. -Iproto -DHAVE_CONFIG_H     -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
リンク: gcc   -L. -Wl,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE   -L/usr/local/lib -Wl,--as-needed -o vim        -lm -ltinfo -lnsl    -ldl  -L/usr/lib -llua -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE  -fstack-protector  -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc

sudoをインストール

sudoを入れ直しておきます。

# yum install sudo

次回、rails開発用のプラグインを入れてみます。