Ubuntu 14.04 で vim パッケージをリビルドする
Ubuntu 14.04 で vim をインストールすると python3 インターフェースが無効になっています。python3 インターフェースを有効にするために deb パッケージをリビルドしてみます。vim の拡張機能をチェックするには以下のようにバージョンを表示します。
$ vim --version # vim.gtk を使ってます VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:39:59) 適用済パッチ: 1-52 Modified by pkg-vim-maintainers@lists.alioth.debian.org Compiled by buildd@ Huge 版 with GTK2 GUI. 機能の一覧 有効(+)/無効(-) +acl +farsi +mouse_netterm +syntax +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 ...
自分で vim のソースをダウンロードしてきてビルドする方法もありますが、なるべくディストリビューションのもの (と同じ設定) を使いたいと思う人もいるでしょう。ここでは deb パッケージをリビルドすることで python3 インターフェースを有効にしてみます。
前準備
まずビルドに必要な依存パッケージをまとめてインストールします。私の環境では以下のパッケージを追加するとビルドできましたが、これはそれぞれの環境によって違うかもしれません。
$ sudo apt-get build-dep vim # vim のビルドに必要な依存パッケージをインストール $ sudo apt-get install python3-dev ruby-dev tcl8.5-dev # vim の拡張機能のビルドに必要な依存パッケージをインストール $ sudo apt-get install devscripts # deb パッケージのビルドツールをインストール
次にソースをダウンロードします。
$ mkdir /tmp/vim-build $ cd /tmp/vim-build/ $ apt-get source vim $ ls vim-7.4.052 vim_7.4.052-1ubuntu3.debian.tar.gz vim_7.4.052-1ubuntu3.dsc vim_7.4.052.orig.tar.gz $ cd vim-7.4.052
- vim の configure オプションを調べる
$ ./configure --help
ビルド
- changelog を書く
バージョン番号もここで指定したものに置き換えられるようです。ディストリビューション名やメールアドレスなど、適切な内容を changelog に書かないとビルド時にエラーになります。
$ debchange -i vim (2:7.4.052-1ubuntu4) trusty; urgency=medium * enabled python3 interface. -- t2y <email> Sat, 26 Apr 2014 18:43:45 +0900
- rules ファイルの編集
python3 インターフェースを有効にするための configure オプションを追加します。また vim-nox のテスト中にエラーになったのでここではビルド後にテストを実行しないように編集しています。
$ vim debian/rules --- orig-vim-7.4.052/debian/rules 2014-04-26 15:42:19.264743944 +0900 +++ vim-7.4.052/debian/rules 2014-04-26 16:42:47.818878711 +0900 @@ -27,11 +27,11 @@ BUILDER := $(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2> /dev/null))}}) MAKETEST := no -ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) - ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) - MAKETEST := yes - endif -endif +#ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) +# ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) +# MAKETEST := yes +# endif +#endif ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) @@ -108,7 +108,7 @@ ALLINTERPFLAGS+=--disable-mzschemeinterp ALLINTERPFLAGS+=--enable-perlinterp ALLINTERPFLAGS+=--enable-pythoninterp --with-python-config-dir=$(shell python-config --configdir) -ALLINTERPFLAGS+=--disable-python3interp +ALLINTERPFLAGS+=--enable-python3interp --with-python3-config-dir=$(shell python3-config --configdir) ALLINTERPFLAGS+=--enable-rubyinterp ALLINTERPFLAGS+=--enable-tclinterp
- ビルド
$ debuild -us -uc $ ls ../ # 親ディレクトリにパッケージが作成される
インストール
必要なパッケージをインストールします。私は vim-gtk を使っています。
$ cd ../ $ sudo dpkg -i vim_7.4.052-1ubuntu4_amd64.deb \ vim-common_7.4.052-1ubuntu4_amd64.deb \ vim-doc_7.4.052-1ubuntu4_all.deb \ vim-runtime_7.4.052-1ubuntu4_all.deb \ vim-tiny_7.4.052-1ubuntu4_amd64.deb \ vim-gui-common_7.4.052-1ubuntu4_all.deb \ vim-gtk_7.4.052-1ubuntu4_amd64.deb $ dpkg -l | grep vim ii vim 2:7.4.052-1ubuntu4 amd64 Vi IMproved - enhanced vi editor ii vim-common 2:7.4.052-1ubuntu4 amd64 Vi IMproved - Common files ii vim-doc 2:7.4.052-1ubuntu4 all Vi IMproved - HTML documentation ii vim-gtk 2:7.4.052-1ubuntu4 amd64 Vi IMproved - enhanced vi editor - with GTK2 GUI ii vim-gui-common 2:7.4.052-1ubuntu4 all Vi IMproved - Common GUI files ii vim-runtime 2:7.4.052-1ubuntu4 all Vi IMproved - Runtime files ii vim-tiny 2:7.4.052-1ubuntu4 amd64 Vi IMproved - enhanced vi editor - compact version
オリジナルの vim --version の出力と比べると python3 インターフェースが有効になっているのが分かります。
$ diff -u orig-vim.gtk-version.txt <(vim --version) --- orig-vim.gtk-version.txt 2014-04-26 15:48:29.234466537 +0900 +++ /dev/fd/63 2014-04-26 17:12:13.006045318 +0900 @@ -1,7 +1,7 @@ -VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:39:59) +VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 26 2014 16:45:41) 適用済パッチ: 1-52 Modified by pkg-vim-maintainers@lists.alioth.debian.org -Compiled by buildd@ +Compiled by t2y@... Huge 版 with GTK2 GUI. 機能の一覧 有効(+)/無効(-) +acl +farsi +mouse_netterm +syntax +arabic +file_in_path +mouse_sgr +tag_binary @@ -18,8 +18,8 @@ +cmdline_info +keymap +postscript +virtualedit +comments +langmap +printer +visual +conceal +libcall +profile +visualextra -+cryptv +linebreak +python +viminfo -+cscope +lispindent -python3 +vreplace ++cryptv +linebreak +python/dyn +viminfo ++cscope +lispindent +python3/dyn +vreplace +cursorbind +listcmds +quickfix +wildignore +cursorshape +localmap +reltime +wildmenu +dialog_con_gui +lua +rightleft +windows
python/dyn, python3/dyn に変わってしまいました。vim のドキュメントによると、Windows だと DLL を探すように書いてあります。Linux だと関係ないのかな?これでも Python 拡張が動いたので気にしないことにします。
$ vim :help python-dynamic ---- 9. Dynamic loading python-dynamic On MS-Windows the Python library can be loaded dynamically. The :version output then includes +python/dyn. This means that Vim will search for the Python DLL file only when needed. When you don't use the Python interface you don't need it, thus you can use Vim without this DLL file.