Ubuntu 20.04 LTS への最新 Vim のビルド&インストール
背景
Ubuntu 20.04 LTS 上で Vim を使用しているのだが、使用しているプラグインをアップデートすると ddu.vim と denops.vim で Vim のバージョンが要件を満たしていていないというエラーが出力されるようになった。
$ vim
[ddu] ddu requires Vim 9.0.1276+ or neovim 0.8.0+.
[ddu] ddu requires Vim 9.0.1276+ or neovim 0.8.0+.
[denops] Denops requires Vim 9.0.1499 or Neovim 0.8.0. See ":h g:denops_disable_version_check" to disable this check.
現在のバージョンは次のように 9.0.749 である。
$ vim --version
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled May 10 2022 08:40:37)
適用済パッチ: 1-749
Ubuntu 上の Vim は PPA jonathonf/vim
を使用しているが、こちらでバージョンアップされるのを待つのもアレなので自分で最新ソースからビルドすることにした。
初めて Ubuntu 上で Vim をビルドした際の記録を以下に記す。
ビルド&インストール手順
2023年8月12日時点で最新は v9.0.1683
なので、このタグをチェックアウトしてビルドを行う。
※リポジトリのクローンやチェックアウトの手順は省略。
Vim をビルド&インストールする際の基本的な手順は下記。
- configure
- make
- make install
configure オプション
configure の引数によって有効化(無効化)する機能やインストール先などのオプションを指定する。
今回はできるだけ現状と同様のオプションを有効にした状態でビルドしたかったので、まず、現時点の vim --version
の内容を確認した。
現時点の機能一覧は下記のようになっている。
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled May 10 2022 08:40:37)
適用済パッチ: 1-749
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Huge 版 with GTK3 GUI. 機能の一覧 有効(+)/無効(-)
+acl +file_in_path +mouse_urxvt -tag_any_white
+arabic +find_in_path +mouse_xterm +tcl
+autocmd +float +multi_byte +termguicolors
+autochdir +folding +multi_lang +terminal
-autoservername -footer -mzscheme +terminfo
+balloon_eval +fork() +netbeans_intg +termresponse
+balloon_eval_term +gettext +num64 +textobjects
+browse -hangul_input +packages +textprop
++builtin_terms +iconv +path_extra +timers
+byte_offset +insert_expand +perl +title
+channel +ipv6 +persistent_undo +toolbar
+cindent +job +popupwin +user_commands
+clientserver +jumplist +postscript +vartabs
+clipboard +keymap +printer +vertsplit
+cmdline_compl +lambda +profile +vim9script
+cmdline_hist +langmap -python +viminfo
+cmdline_info +libcall +python3 +virtualedit
+comments +linebreak +quickfix +visual
+conceal +lispindent +reltime +visualextra
+cryptv +listcmds +rightleft +vreplace
+cscope +localmap +ruby +wildignore
+cursorbind +lua +scrollbind +wildmenu
+cursorshape +menu +signs +windows
+dialog_con_gui +mksession +smartindent +writebackup
+diff +modify_fname +sodium +X11
+digraphs +mouse +sound -xfontset
+dnd +mouseshape +spell +xim
-ebcdic +mouse_dec +startuptime +xpm
+emacs_tags +mouse_gpm +statusline +xsmp_interact
+eval -mouse_jsbterm -sun_workshop +xterm_clipboard
+ex_extra +mouse_netterm +syntax -xterm_save
+extra_search +mouse_sgr +tag_binary
-farsi -mouse_sysmouse -tag_old_static
この設定に近づけるためにいろいろ試行錯誤したが最終的に下記オプションを指定した。
./configure \
--with-features=huge \
--enable-gui=gtk3 \
--enable-python3interp \
--enable-luainterp \
--enable-tclinterp \
--enable-rubyinterp \
--with-luajit \
--enable-fail-if-missing \
--prefix=/opt/vim
オプション | 概要 | 備考 |
---|---|---|
--with-features=TYPE | tiny, normal or huge (default: huge) | huge を指定することでほとんどの機能を有効化 |
--enable-gui=OPTS | X11 GUI. default=auto OPTS=auto/no/gtk3/motif... |
GUI として gtk3 を指定 |
--enable-python3interp=OPTS | Include Python3 interpreter. default=no OPTS=no/yes/dynamic |
Python3 インタフェースを有効化するため yes |
--enable-luainterp=OPTS | Include Lua interpreter. default=no OPTS=no/yes/dynamic |
Lua インタフェースを有効化するため yes |
--enable-tclinterp=OPTS | Include Tcl interpreter. default=no OPTS=no/yes/dynamic |
Tcl インタフェースを有効化するため yes |
--enable-rubyinterp=OPTS | Include Ruby interpreter. default=no OPTS=no/yes/dynamic |
Ruby インタフェースを有効化するため yes |
--with-luajit | Link with LuaJIT instead of Lua. | LuaJIT を使用する |
--enable-fail-if-missing | Fail if dependencies on additional features specified on the command line are missing. | |
--prefix=PREFIX | install architecture-independent files in PREFIX [/usr/local] |
しばらく様子見をするため /opt 配下にインストール |
ビルド
$ make
インストール
$ sudo make install
起動確認
設定したパスにインストールされた vim コマンドが実行できることを確認。
$ /opt/vim/bin/vim
~ VIM - Vi IMproved
~
~ version 9.0.1683
~ by Bram Moolenaar 他.
~ Vim はオープンソースであり自由に配布可能です
~
~ ウガンダの恵まれない子供たちに援助を!
~ 詳細な情報は :help iccf<Enter>
~
~ 終了するには :q<Enter>
~ オンラインヘルプは :help<Enter> か <F1>
~ バージョン情報は :help version9<Enter>
バージョンや機能の確認。
$ /opt/vim/bin/vim --version
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Aug 14 2023 10:27:08)
適用済パッチ: 1-1683
Compiled by <省略>
Huge 版 with GTK3 GUI. 機能の一覧 有効(+)/無効(-)
+acl +file_in_path +mouse_urxvt -tag_any_white
+arabic +find_in_path +mouse_xterm +tcl
+autocmd +float +multi_byte +termguicolors
+autochdir +folding +multi_lang +terminal
-autoservername -footer -mzscheme +terminfo
+balloon_eval +fork() +netbeans_intg +termresponse
+balloon_eval_term +gettext +num64 +textobjects
+browse -hangul_input +packages +textprop
++builtin_terms +iconv +path_extra +timers
+byte_offset +insert_expand -perl +title
+channel +ipv6 +persistent_undo +toolbar
+cindent +job +popupwin +user_commands
+clientserver +jumplist +postscript +vartabs
+clipboard +keymap +printer +vertsplit
+cmdline_compl +lambda +profile +vim9script
+cmdline_hist +langmap -python +viminfo
+cmdline_info +libcall +python3 +virtualedit
+comments +linebreak +quickfix +visual
+conceal +lispindent +reltime +visualextra
+cryptv +listcmds +rightleft +vreplace
+cscope +localmap +ruby +wildignore
+cursorbind +lua +scrollbind +wildmenu
+cursorshape +menu +signs +windows
+dialog_con_gui +mksession +smartindent +writebackup
+diff +modify_fname +sodium +X11
+digraphs +mouse +sound -xfontset
+dnd +mouseshape +spell +xim
-ebcdic +mouse_dec +startuptime -xpm
+emacs_tags -mouse_gpm +statusline +xsmp_interact
+eval -mouse_jsbterm -sun_workshop +xterm_clipboard
+ex_extra +mouse_netterm +syntax -xterm_save
+extra_search +mouse_sgr +tag_binary
-farsi -mouse_sysmouse -tag_old_static
システム vimrc: "$VIM/vimrc"
ユーザー vimrc: "$HOME/.vimrc"
第2ユーザー vimrc: "~/.vim/vimrc"
ユーザー exrc: "$HOME/.exrc"
システム gvimrc: "$VIM/gvimrc"
ユーザー gvimrc: "$HOME/.gvimrc"
第2ユーザー gvimrc: "~/.vim/gvimrc"
デフォルトファイル: "$VIMRUNTIME/defaults.vim"
システムメニュー: "$VIMRUNTIME/menu.vim"
省略時の $VIM: "/opt/vim/share/vim"
コンパイル: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
リンク: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -lcanberra -lsodium -lrt -ldl -L/usr/lib/x86_64-linux-gnu -lluajit-5.1 -L/usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8 -lcrypt -lpthread -ldl -lutil -lm -lm -L/usr/lib/x86_64-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lm -lruby-2.7 -lm -L/usr/lib
一部有効になっていない機能があるが実運用上問題なければよいので様子見。
PATH の追加
vim コマンド実行時に今回インストールしたものを実行させるために .profile
にの終端に vim へのパスを PATH
に設定するコマンドを追加。
# add PATH of latest vim
export PATH="/opt/vim/bin:$PATH"
今後
Ubuntu 上で Vim をビルドしインストールすることができたので、最新バージョンに追従していくことができるようになった。
ひとまず、今までどおりの使用はできているのでこのまま使い続けてみることにする。
しばらく使用して問題なければ apt でインストールしているものを削除する。
Discussion