Ubuntu

Ubuntu22.04 Vim

もう少しVimをちゃんと使えるようになりたいと思い、少し整理してみることにした。



広告


インストール

Vimには色々な種類があるけれど、結論からすると以下。

  • Ubuntu 22.04 serverについていえば、vim-basicがインストールされており、最初からほぼフルの状態で使える。
  • Ubuntu 22.04 desktopでは、vim-tinyしかインストールされていないので、vim-gtk3をインストールする。

種類についてはこちらで教えてくれていた。
Qiita / Vim の種類 (Vim family)
プログラマの歩き方 / 「vim」の種類

まず、Ubuntu 22.04 serverでどうか、と確認してみた。
用意されているパッケージを確認してみる。

$ apt search "Vi IMproved - enhanced vi editor"
Sorting... Done
Full Text Search... Done
vim/jammy-updates,jammy-security,now 2:8.2.3995-1ubuntu2.1 amd64 [installed,automatic]
  Vi IMproved - enhanced vi editor

vim-athena/jammy-updates,jammy-security 2:8.2.3995-1ubuntu2.1 amd64
  Vi IMproved - enhanced vi editor - with Athena GUI

vim-gtk/jammy-updates,jammy-security 2:8.2.3995-1ubuntu2.1 all
  Vi IMproved - enhanced vi editor (dummy package)

vim-gtk3/jammy-updates,jammy-security 2:8.2.3995-1ubuntu2.1 amd64
  Vi IMproved - enhanced vi editor - with GTK3 GUI

vim-nox/jammy-updates,jammy-security 2:8.2.3995-1ubuntu2.1 amd64
  Vi IMproved - enhanced vi editor - with scripting languages support

vim-tiny/jammy-updates,jammy-security,now 2:8.2.3995-1ubuntu2.1 amd64 [installed,automatic]
  Vi IMproved - enhanced vi editor - compact version

先頭がvimから始まるライブラリ等もかなりいっぱいある。

$ apt search --names-only ^vim
Sorting... Done
Full Text Search... Done
vim/jammy-updates,jammy-security,now 2:8.2.3995-1ubuntu2.1 amd64 [installed,automatic]
  Vi IMproved - enhanced vi editor

vim-addon-manager/jammy 0.5.10 all
  manager of addons for the Vim editor

vim-addon-mw-utils/jammy 0.2-4 all
  Vim funcref library

vim-airline/jammy 0.11-1 all
  Lean & mean status/tabline for vim that's light as air
…

AthenaというのはX Windows System用のライブラリのようだ
そして、現在はサポートから外れているみたい(確認していないけれど)。

ということで、vim-noxをインストールしてみる。

$ sudo apt install vim-nox

機能差分を見てみたところ、basicとnoxの差は思っていたよりはずっと小さかった。
これが大きな差になるような使い方はできていないというのが実際のところ。

これをベースとして…

$ vim.tiny --version
…
Small version without GUI.  Features included (+) or not (-):
+acl               -file_in_path      -mouse_urxvt       -tcl
-arabic            -find_in_path      +mouse_xterm       -termguicolors
+autocmd           -float             +multi_byte        -terminal
-autochdir         -folding           -multi_lang        +terminfo
-autoservername    -footer            -mzscheme          +termresponse
-balloon_eval      +fork()            -netbeans_intg     -textobjects
-balloon_eval_term -gettext           +num64             -textprop
-browse            -hangul_input      -packages          -timers
+builtin_terms     +iconv             -path_extra        +title
-byte_offset       +insert_expand     -perl              -toolbar
-channel           -ipv6              -persistent_undo   +user_commands
-cindent           -job               -popupwin          -vartabs
-clientserver      +jumplist          -printer           +vertsplit
-clipboard         -keymap            -profile           +vim9script
+cmdline_compl     -lambda            -python            -viminfo
+cmdline_hist      -langmap           -python3           +virtualedit
-cmdline_info      -libcall           -quickfix          +visual
+comments          -linebreak         -reltime           +visualextra
-conceal           -lispindent        -rightleft         +vreplace
-cryptv            +listcmds          -ruby              +wildignore
-cscope            +localmap          +scrollbind        -wildmenu
+cursorbind        -lua               -signs             +windows
-cursorshape       -menu              -smartindent       +writebackup
-dialog            -mksession         -sodium            -X11
-diff              +modify_fname      -sound             +xfontset
-digraphs          +mouse             -spell             -xim
-dnd               -mouseshape        -startuptime       -xpm
-ebcdic            -mouse_dec         -statusline        -xsmp
-emacs_tags        -mouse_gpm         -sun_workshop      -xterm_clipboard
-eval              -mouse_jsbterm     -syntax            -xterm_save
+ex_extra          -mouse_netterm     +tag_binary
-extra_search      +mouse_sgr         -tag_old_static
-farsi             -mouse_sysmouse    -tag_any_white

tinyとの差分

$ vim.basic --version
…
Huge version without GUI.  Features included (+) or not (-):
+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        +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
+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

basicとの差分

$ vim.nox --version
…
Huge version without GUI.  Features included (+) or not (-):
+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        +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
+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

例えば、+luaとなっているのでマニュアルを眺めてみたところ、Luaチャンクを実行する、が見つかった。
確かに、違っていた。

$ vim.nox
→ :lua print(_VERSION) → Lua 5.2

$ vim.basic
→ :lua print(_VERSION) → E319: Sorry, the command is not available in this version

これらを使う日が来たら、noxをインストールすれば良い。

日本語マニュアル

UNIX系のシステムにはviが必ず入っているから覚えておけ、といわれていた。
その記憶がずっとあって、Linuxに触れ始めた頃からずっとviを使っていた。でこもれ、多分Vimだったのだろう。

色々とたどっていくと、こちらで日本語化をしていただいていることが分かった。
Github / vim-jp / vimdoc-ja – wiki

入手(最新版)

配布されているファイルをダウンロードしてきて、展開してみた。
この日は、バージョン9.0の日本語マニュアルがダウンロードできた。

$ wget https://github.com/vim-jp/vimdoc-ja/archive/master.tar.gz
$ tar zxvf master.tar.gz

$ ll
合計 2168
drwxrwxr-x  3 rohhie rohhie    4096 11月 13 07:56 ./
drwxr-xr-x 16 rohhie rohhie    4096 11月 13 08:22 ../
-rw-rw-r--  1 rohhie rohhie 2205337 11月 13 07:56 master.tar.gz
drwxrwxr-x  4 rohhie rohhie    4096 11月  9 15:18 vimdoc-ja-master/ ← 展開されたディレクトリ

$ ll vimdoc-ja-master/
合計 24
drwxrwxr-x 4 rohhie rohhie 4096 11月  9 15:18 ./
drwxrwxr-x 3 rohhie rohhie 4096 11月 13 07:56 ../
-rw-rw-r-- 1 rohhie rohhie   24 11月  9 15:18 .gitattributes
-rw-rw-r-- 1 rohhie rohhie    0 11月  9 15:18 .gitignore
-rw-rw-r-- 1 rohhie rohhie  888 11月  9 15:18 README.md
drwxrwxr-x 2 rohhie rohhie 4096 11月  9 15:18 doc/
drwxrwxr-x 2 rohhie rohhie 4096 11月  9 15:18 syntax/

入手(使っているバージョンに合わせる)

全然使いこなせていないので、バージョンの違いにそれ程までに影響されるとは思わないけれど、一応マニュアルのバージョンを合わせてみようかと。
日本語マニュアルプロジェクトは、日々翻訳を更新してくれているようで、タグやバージョンは付いていなかった。

日本語マニュアルのプロジェクトをクローンしてみる。

$ git clone https://github.com/vim-jp/vimdoc-ja.git

これで、最新版の9.0が展開される。

$ cd vimdoc-ja
$ ll
total 28
drwxrwxr-x 5 rohhie rohhie 4096 Oct  9 12:36 ./
drwxrwxr-x 5 rohhie rohhie 4096 Oct  9 12:06 ../
drwxrwxr-x 8 rohhie rohhie 4096 Oct  9 12:56 .git/
-rw-rw-r-- 1 rohhie rohhie   24 Oct  9 12:06 .gitattributes
-rw-rw-r-- 1 rohhie rohhie    0 Oct  9 12:06 .gitignore
-rw-rw-r-- 1 rohhie rohhie  888 Oct  9 12:06 README.md
drwxrwxr-x 2 rohhie rohhie 4096 Oct  9 12:56 doc/
drwxrwxr-x 2 rohhie rohhie 4096 Oct  9 12:56 syntax/

使っているバージョンを探してみる。

$ git grep "For Vim バージョン" $(git rev-list --all)

探した感じ、それっぽいコミットはこれかと。

OSVim versionLast changeそれっぽいコミット
Ubuntu 22.048.22021 Dec 27f1001c3ad7655617951d3375d9a0754de37b5059
Ubuntu 20.048.12019 Jul 21d16f408837f09abd4b93e01cbb5f7377a7424601
Ubuntu 18.048.02017 Oct 280dc76a25bbeee98531b9e3156a4d4ea3540b2828

これらの「それっぽいコミット」にタグを付ける。

$ git tag 8.2 f1001c3ad7655617951d3375d9a0754de37b5059
$ git tag 8.1 d16f408837f09abd4b93e01cbb5f7377a7424601
$ git tag 8.0 0dc76a25bbeee98531b9e3156a4d4ea3540b2828

8.2のマニュアルを取り出してみる。

$ git checkout 8.2

このように、チェックアウトすると、ディレクトリの中身がそのバージョンのものに変わるので、これを配置する。

配置

ファイルを入手したけれども、どこへ配置すれば良いか。

展開されたファイルを ‘runtimepath’ が通った場所へ配置します。

vimdoc-ja – wiki

このruntimepathというディレクトリはどこのことなのか。
Qiita / vimで読み込まれるファイルについて

vimを起動して :set runtimepath とすると、設定内容が表示された。

$ vim
 ↓
:set runtimepath
 ↓
  runtimepath=
    ~/.vim,/var/lib/vim/addons,
    /etc/vim,
    /usr/share/vim/vimfiles,
    /usr/share/vim/vim82,
    /usr/share/vim/vimfiles/after,
    /etc/vim/after,
    /var/lib/vim/addons/after,
    ~/.vim/after
Press ENTER or type command to continue

※1行で表示されたが、情報整理のためカンマで改行している。

rootでも日本語ヘルプを使いたいと思うと… /usr/share/vim/vimfiles というディレクトリを作って、そこに入れておけば良さそう。
名無しのvim使い / 日本語に翻訳されたvimエディタのヘルプをインストールして使用する。

■Ubuntu 22.04 & 20.04
$ sudo mkdir /usr/share/vim/vimfiles
$ sudo cp -ar vimdoc-ja-master/doc /usr/share/vim/vimfiles/
$ sudo cp -ar vimdoc-ja-master/syntax /usr/share/vim/vimfiles/
$ sudo chown root:root -R /usr/share/vim/vimfiles/doc /usr/share/vim/vimfiles/syntax/

Ubuntu 18.04では、このディレクトリは /etc/vim へのシンボリックリンクになっていた。

■Ubuntu 18.04
$ sudo cp -ar vimdoc-ja-master/doc /etc/vim/
$ sudo cp -ar vimdoc-ja-master/syntax /etc/vim/
$ sudo chown root:root -R /etc/vim/doc /etc/vim/syntax/

さらに、vimrcに日本語ヘルプを優先するような設定を入れる。

/etc/vim/vimrc

set helplang=ja,en

※最後のところにでも追記しておけばOK。

これで通常使いのユーザーでも、rootでも、GVimでも日本語のマニュアルを表示することができた。

チュートリアル

チュートリアルは日本語版がパッケージに同梱されている。
以下で日本語チュートリアルが表示される。

$ vimtutor ja

これ、実際に最後までやってみたけれども、それだけで随分やれることが増える。
一度はやっておく価値があると思う。

さいごに

実は、この記事自体はUbuntu 22.04がリリースされる前に整理していたもので、今回少し整理し直した。

当時にチュートリアルを一通りやったことで、やれることは随分増えたけれども…すぐに忘れてしまう。
特にウィンドウ操作が覚えられなくて、本来なら1つのターミナルで処理できるところを、2つ開いたりしている。

あと、ファイラー的な画面も、もう少しうまく使えるようになったら、楽チンだろうなぁ。

ちゃんと覚えていれば便利なはずなのに。
WindowsのエディターもVimに乗り換えてみよう。

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他