今年、vimのメジャーバージョンアップがあったんですね。知りませんでした。せっかくなので、新しいバージョンを利用しようとvimアップグレード作業をしたのですが、これがかなりしんどかった。たかだかvimをインストールするだけで、こんなに大変だったとは。
環境情報は以下です。
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
バージョンコマンドで確認。pythonやrubyの部分が「+」となっていることを確認。
# 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