🔰

Ubuntu 20.04 LTS への最新 Vim のビルド&インストール

2023/08/14に公開

背景

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 をビルド&インストールする際の基本的な手順は下記。

  1. configure
  2. make
  3. 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