Vi/VIMを最小構成でインストールした場合にあとからsyntaxハイライトを有効化する方法

## はじめに

　PC に Ubuntu Linux をインストールしてからしばらくの間、暗い背景に白文字でも違和感なくプログラミングしてたのですが、ふとカラフルじゃないことに気が付きました。
　本記事では、Vi/VIM（というか Ubuntu Linux）を最小構成でインストールした場合に、あとからSyntax Highlightを有効化する方法について共有します（構文ハイライトもしくはキーワードハイライトとも）。

:::note info
結論から言うと、`sudo apt install vim-asciidoc` だけでOKでした。`vi --version` で確認したらちゃんと `+syntax` になっており、少なくとも `*.sh` と `*.py` はカラーになりました。

なお最後に触れていますが、他に `sudo apt install vim-gtk` もおすすめです。Feature が `+clipboard` されるのでUndo/Redoに不自由を感じなくなると思います。
:::

　通常構成であればコマンド一発なのですが、情報が見つからなかったので書き起こすついでに、構成の比較などもしてみました。なお、GUI版の話ではなくターミナル上で使う場合の話です。
　大抵の場合は通常構成でインストールすると思うので、viのコマンドで
```
:syntax enable
```
もしくは
```
:syntax on
```
を実行すればカラフルになるのですが、最小構成だとそうはなりません。

:::note info
最初は「`syntax` という Feature が欲しい」という動機でしたが、本記事の内容は結果的に最小構成には入っていない Feature 群を大量に取り込み有効化する方法となっています。
:::

## OS環境

Ubuntu Linux 日本語 Remix を USB メモリから最小構成でインストールした環境です。
```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.5 LTS
Release:	20.04
Codename:	focal
```
この場を借りて、整備・保守・配布等して下さっている方々に感謝いたします。

## Vi/VIM の Feature 構成

最小構成の場合、**VIM 8.1** が次のような状態でインストールされています。**Small version without GUI** かつ `-syntax`となっていますね。`-`はincludeされていないという意味です。

```sh
$ vi --version 
VIM - Vi IMproved 8.1 (2018 May 18, compiled Sep 19 2022 04:59:57)
Included patches: 1-2269, 3612, 3625, 3669, 3741
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Small version without GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tcl
-arabic            -file_in_path      -mouse_urxvt       -termguicolors
+autocmd           -find_in_path      +mouse_xterm       -terminal
-autochdir         -float             +multi_byte        +terminfo
-autoservername    -folding           -multi_lang        +termresponse
-balloon_eval      -footer            -mzscheme          -textobjects
-balloon_eval_term +fork()            -netbeans_intg     -textprop
-browse            -gettext           -num64             -timers
+builtin_terms     -hangul_input      -packages          -title
-byte_offset       +iconv             -path_extra        -toolbar
-channel           +insert_expand     -perl              +user_commands
-cindent           -job               -persistent_undo   -vartabs
-clientserver      +jumplist          -printer           +vertsplit
-clipboard         -keymap            -profile           +virtualedit
+cmdline_compl     -lambda            -python            +visual
+cmdline_hist      -langmap           -python3           +visualextra
-cmdline_info      -libcall           -quickfix          -viminfo
+comments          -linebreak         -reltime           +vreplace
-conceal           -lispindent        -rightleft         +wildignore
-cryptv            +listcmds          -ruby              -wildmenu
-cscope            +localmap          +scrollbind        +windows
+cursorbind        -lua               -signs             +writebackup
-cursorshape       -menu              -smartindent       -X11
-dialog            -mksession         -sound             +xfontset
-diff              +modify_fname      -spell             -xim
-digraphs          +mouse             -startuptime       -xpm
-dnd               -mouseshape        -statusline        -xsmp
-ebcdic            -mouse_dec         -sun_workshop      -xterm_clipboard
-emacs_tags        -mouse_gpm         -syntax            -xterm_save
-eval              -mouse_jsbterm     +tag_binary        
+ex_extra          -mouse_netterm     -tag_old_static    
-extra_search      +mouse_sgr         -tag_any_white     
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -Wdate-time  -g -O2 -fdebug-prefix-map=/build/vim-tiO2Sp/vim-8.1.2269=. -fstack-protector-strong -Wformat -Werror=format-security -DTINY_VIMRC -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim    -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo  -lselinux -lacl -lattr -ldl    
```

## 解決策

ちゃんとした方法はあるのかもしれませんが、たぶんこうかな？という推測でやったら期待通り有効化された、というものなのであしからずご容赦ください。判断の根拠には後で触れます。

**`apt` で `vim-asciidoc` というパッケージをインストールします**。ruby* とか javascript* とかいろいろ挙がっていますが、サイズは許容範囲内。vimも挙がっていることから、たぶん再コンパイルされるのかな（と最初は思ったけど違ったようです。後述）。

<details><summary>$ apt install vim-asciidoc の結果</summary>

```sh
$ sudo apt install vim-asciidoc 
[sudo] anonymous のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  fonts-lato javascript-common libjs-jquery libruby2.7 rake ruby ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc
  ruby2.7 rubygems-integration vim vim-addon-manager vim-runtime
提案パッケージ:
  apache2 | lighttpd | httpd ri ruby-dev bundler ctags vim-doc vim-scripts asciidoc-base
以下のパッケージが新たにインストールされます:
  fonts-lato javascript-common libjs-jquery libruby2.7 rake ruby ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc
  ruby2.7 rubygems-integration vim vim-addon-manager vim-asciidoc vim-runtime
アップグレード: 0 個、新規インストール: 17 個、削除: 0 個、保留: 8 個。
14.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 66.2 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 fonts-lato all 2.0-2 [2,698 kB]
取得:2 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 javascript-common all 11 [6,066 B]
取得:3 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 libjs-jquery all 3.3.1~dfsg-3 [329 kB]
取得:4 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 rubygems-integration all 1.16 [5,092 B]
取得:5 http://ubuntutym.u-toyama.ac.jp/ubuntu focal-updates/main amd64 ruby2.7 amd64 2.7.0-5ubuntu1.7 [95.6 kB]
取得:6 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby amd64 1:2.7+1 [5,412 B]
取得:7 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 rake all 13.0.1-4 [61.6 kB]
取得:8 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby-minitest all 5.13.0-1 [40.9 kB]
取得:9 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby-net-telnet all 0.1.1-2 [12.6 kB]
取得:10 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby-power-assert all 1.1.7-1 [11.4 kB]
取得:11 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby-test-unit all 3.3.5-1 [73.2 kB]
取得:12 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/main amd64 ruby-xmlrpc all 0.3.0-2 [23.8 kB]
取得:13 http://ubuntutym.u-toyama.ac.jp/ubuntu focal-updates/main amd64 libruby2.7 amd64 2.7.0-5ubuntu1.7 [3,533 kB]
取得:14 http://ubuntutym.u-toyama.ac.jp/ubuntu focal-updates/main amd64 vim-runtime all 2:8.1.2269-1ubuntu5.9 [5,873 kB]
取得:15 http://ubuntutym.u-toyama.ac.jp/ubuntu focal-updates/main amd64 vim amd64 2:8.1.2269-1ubuntu5.9 [1,238 kB]
取得:16 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/universe amd64 vim-addon-manager all 0.5.10 [18.4 kB]
取得:17 http://ubuntutym.u-toyama.ac.jp/ubuntu focal/universe amd64 vim-asciidoc all 9.0.0~rc1-1 [9,692 B]
14.0 MB を 5秒 で取得しました (2,839 kB/s)
以前に未選択のパッケージ fonts-lato を選択しています。
(データベースを読み込んでいます ... 現在 171558 個のファイルとディレクトリがインストールされています。)
.../00-fonts-lato_2.0-2_all.deb を展開する準備をしています ...
fonts-lato (2.0-2) を展開しています...
以前に未選択のパッケージ javascript-common を選択しています。
.../01-javascript-common_11_all.deb を展開する準備をしています ...
javascript-common (11) を展開しています...
以前に未選択のパッケージ libjs-jquery を選択しています。
.../02-libjs-jquery_3.3.1~dfsg-3_all.deb を展開する準備をしています ...
libjs-jquery (3.3.1~dfsg-3) を展開しています...
以前に未選択のパッケージ rubygems-integration を選択しています。
.../03-rubygems-integration_1.16_all.deb を展開する準備をしています ...
rubygems-integration (1.16) を展開しています...
以前に未選択のパッケージ ruby2.7 を選択しています。
.../04-ruby2.7_2.7.0-5ubuntu1.7_amd64.deb を展開する準備をしています ...
ruby2.7 (2.7.0-5ubuntu1.7) を展開しています...
以前に未選択のパッケージ ruby を選択しています。
.../05-ruby_1%3a2.7+1_amd64.deb を展開する準備をしています ...
ruby (1:2.7+1) を展開しています...
以前に未選択のパッケージ rake を選択しています。
.../06-rake_13.0.1-4_all.deb を展開する準備をしています ...
rake (13.0.1-4) を展開しています...
以前に未選択のパッケージ ruby-minitest を選択しています。
.../07-ruby-minitest_5.13.0-1_all.deb を展開する準備をしています ...
ruby-minitest (5.13.0-1) を展開しています...
以前に未選択のパッケージ ruby-net-telnet を選択しています。
.../08-ruby-net-telnet_0.1.1-2_all.deb を展開する準備をしています ...
ruby-net-telnet (0.1.1-2) を展開しています...
以前に未選択のパッケージ ruby-power-assert を選択しています。
.../09-ruby-power-assert_1.1.7-1_all.deb を展開する準備をしています ...
ruby-power-assert (1.1.7-1) を展開しています...
以前に未選択のパッケージ ruby-test-unit を選択しています。
.../10-ruby-test-unit_3.3.5-1_all.deb を展開する準備をしています ...
ruby-test-unit (3.3.5-1) を展開しています...
以前に未選択のパッケージ ruby-xmlrpc を選択しています。
.../11-ruby-xmlrpc_0.3.0-2_all.deb を展開する準備をしています ...
ruby-xmlrpc (0.3.0-2) を展開しています...
以前に未選択のパッケージ libruby2.7:amd64 を選択しています。
.../12-libruby2.7_2.7.0-5ubuntu1.7_amd64.deb を展開する準備をしています ...
libruby2.7:amd64 (2.7.0-5ubuntu1.7) を展開しています...
以前に未選択のパッケージ vim-runtime を選択しています。
.../13-vim-runtime_2%3a8.1.2269-1ubuntu5.9_all.deb を展開する準備をしています ...
'vim-runtime による /usr/share/vim/vim81/doc/help.txt から /usr/share/vim/vim81/doc/help.txt.vim-tiny への退避 (divert)' を追加しています
'vim-runtime による /usr/share/vim/vim81/doc/tags から /usr/share/vim/vim81/doc/tags.vim-tiny への退避 (divert)' を追加しています
vim-runtime (2:8.1.2269-1ubuntu5.9) を展開しています...
以前に未選択のパッケージ vim を選択しています。
.../14-vim_2%3a8.1.2269-1ubuntu5.9_amd64.deb を展開する準備をしています ...
vim (2:8.1.2269-1ubuntu5.9) を展開しています...
以前に未選択のパッケージ vim-addon-manager を選択しています。
.../15-vim-addon-manager_0.5.10_all.deb を展開する準備をしています ...
vim-addon-manager (0.5.10) を展開しています...
以前に未選択のパッケージ vim-asciidoc を選択しています。
.../16-vim-asciidoc_9.0.0~rc1-1_all.deb を展開する準備をしています ...
vim-asciidoc (9.0.0~rc1-1) を展開しています...
javascript-common (11) を設定しています ...
fonts-lato (2.0-2) を設定しています ...
ruby-power-assert (1.1.7-1) を設定しています ...
rubygems-integration (1.16) を設定しています ...
ruby-minitest (5.13.0-1) を設定しています ...
ruby-test-unit (3.3.5-1) を設定しています ...
ruby-net-telnet (0.1.1-2) を設定しています ...
libjs-jquery (3.3.1~dfsg-3) を設定しています ...
vim-runtime (2:8.1.2269-1ubuntu5.9) を設定しています ...
ruby-xmlrpc (0.3.0-2) を設定しています ...
vim (2:8.1.2269-1ubuntu5.9) を設定しています ...
update-alternatives: /usr/bin/vim (vim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vimdiff (vimdiff) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rvim (rvim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rview (rview) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vi (vi) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/view (view) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/ex (ex) を提供するために自動モードで /usr/bin/vim.basic を使います
rake (13.0.1-4) を設定しています ...
libruby2.7:amd64 (2.7.0-5ubuntu1.7) を設定しています ...
ruby2.7 (2.7.0-5ubuntu1.7) を設定しています ...
ruby (1:2.7+1) を設定しています ...
vim-addon-manager (0.5.10) を設定しています ...
vim-asciidoc (9.0.0~rc1-1) を設定しています ...
fontconfig (2.13.1-2ubuntu3) のトリガを処理しています ...
libc-bin (2.31-0ubuntu9.9) のトリガを処理しています ...
man-db (2.9.1-1) のトリガを処理しています ...
```
</details>

提案パッケージに `apache2` や `httpd` が挙がってるのが気にはなるけど、さておき先に進みます。

## 推測の根拠

`vim-asciidoc` だろうと推測した根拠を一応挙げておきます。`apt search`の結果をsyntaxとviの2語で検索した結果、それらしいパッケージを選びました。

<details><summary>$ apt search |grep の結果</summary>

```sh
$ apt search vi |grep -B1 syntax |grep -A1 vi

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

biosyntax-vim/focal,focal 1.0.0b-1 all
--
--
  syntax tree builder and visitors generator for JavaCC
--
--
  module providing syntax sugar for DBIx::Class
--
--
libgtksourceview-3.0-common/focal,focal 3.24.11-2 all
  common files for the GTK+ syntax highlighting widget
--
libgtksourceview-3.0-dev/focal 3.24.11-2 amd64
  development files for the GTK+ syntax highlighting widget
--
libgtksourceview-3.0-doc/focal,focal 3.24.11-2 all
  documentation for the GTK+ syntax highlighting widget
--
libgtksourceview-4-common/focal,focal,now 4.6.0-1 all [インストール済み、自動]
  common files for the GTK+ syntax highlighting widget
--
libgtksourceview-4-dev/focal 4.6.0-1 amd64
  development files for the GTK+ syntax highlighting widget
--
libgtksourceview-4-doc/focal,focal 4.6.0-1 all
  documentation for the GTK+ syntax highlighting widget
--
libgtksourceview2.0-common/focal,focal 2.10.5-3 all
  common files for the GTK+ syntax highlighting widget
--
libgtksourceview2.0-dev/focal 2.10.5-3 amd64
  development files for the GTK+ syntax highlighting widget
--
libgtksourceview2.0-doc/focal,focal 2.10.5-3 all
  documentation for the GTK+ syntax highlighting widget
--
  Moose extension providing a declarative syntax
--
--
libppx-deriving-yojson-ocaml-dev/focal 3.5.1-2build2 amd64
  OCaml syntax extension for JSON serialization
--
libppx-visitors-ocaml-dev/focal 20200210-1 amd64
  OCaml syntax extension for object-oriented visitors
--
libppx-visitors-ocaml-doc/focal,focal 20200210-1 all
  Documentation of the visitors syntax extension for OCaml
--
--
vim-asciidoc/focal,focal 9.0.0~rc1-1 all
  Vim syntax highlighting files for asciidoc
--
vim-haproxy/focal-updates,focal-updates 2.0.29-0ubuntu1 all
  syntax highlighting for HAProxy configuration files
--
vim-icinga2/focal,focal 2.11.2-1ubuntu3 all
  syntax highlighting for Icinga 2 config files in VIM
--
vim-puppet/focal,focal 4~20181115+git4793b074-1 all
  syntax highlighting for puppet manifests in vim
--
--
vim-syntax-docker/focal-updates,focal-updates 20.10.12-0ubuntu2~20.04.1 all
  Docker container engine - Vim highlighting syntax files
--
vim-syntax-gtk/focal,focal 20110314-1 all
--
--
vim-vimerl-syntax/focal,focal 1.4.1+git20120509.89111c7-2 all
  Erlang syntax for Vim
```

（Rubyでも遊びたいなあ）
```sh
$ ruby --version
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
```
</details>

## `vim-asciidoc` インストールの結果
`-syntax`だったものが`+syntax`に変わりました。シェルスクリプトは `:syntax on`などせずとも、即カラフルになりました。期待通り有効化されたようです。

よく見ると、インストール前は **Small version without GUI** だったのが **Huge版 without GUI** になっています。*Feature*という表現だったのが*機能*になって日本語化もより進んでいますね。

なお、コンパイル日時は変わっていないので、再コンパイルされたわけではないようです。機能が動的に追加/有効化されたということかな。

<details><summary>$ vi --version の結果</summary>

```sh
$ vi --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Sep 19 2022 04:59:57)
適用済パッチ: 1-2269, 3612, 3625, 3669, 3741
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Huge 版 without GUI.  機能の一覧 有効(+)/無効(-)
+acl               -farsi             -mouse_sysmouse    -tag_any_white
+arabic            +file_in_path      +mouse_urxvt       -tcl
+autocmd           +find_in_path      +mouse_xterm       +termguicolors
+autochdir         +float             +multi_byte        +terminal
-autoservername    +folding           +multi_lang        +terminfo
-balloon_eval      -footer            -mzscheme          +termresponse
+balloon_eval_term +fork()            +netbeans_intg     +textobjects
-browse            +gettext           +num64             +textprop
++builtin_terms    -hangul_input      +packages          +timers
+byte_offset       +iconv             +path_extra        +title
+channel           +insert_expand     -perl              -toolbar
+cindent           +job               +persistent_undo   +user_commands
-clientserver      +jumplist          +postscript        +vartabs
-clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +virtualedit
+cmdline_hist      +langmap           -python            +visual
+cmdline_info      +libcall           +python3           +visualextra
+comments          +linebreak         +quickfix          +viminfo
+conceal           +lispindent        +reltime           +vreplace
+cryptv            +listcmds          +rightleft         +wildignore
+cscope            +localmap          -ruby              +wildmenu
+cursorbind        -lua               +scrollbind        +windows
+cursorshape       +menu              +signs             +writebackup
+dialog_con        +mksession         +smartindent       -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    
      システム vimrc: "$VIM/vimrc"
      ユーザー vimrc: "$HOME/.vimrc"
   第2ユーザー vimrc: "~/.vim/vimrc"
       ユーザー exrc: "$HOME/.exrc"
  デフォルトファイル: "$VIMRUNTIME/defaults.vim"
       省略時の $VIM: "/usr/share/vim"
コンパイル: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -Wdate-time  -g -O2 -fdebug-prefix-map=/build/vim-tiO2Sp/vim-8.1.2269=. -fstack-protector-strong -Wformat -Werror=format-security -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
リンク: gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim        -lm -ltinfo -lnsl  -lselinux  -lcanberra -lacl -lattr -lgpm -ldl     -L/usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8 -lcrypt -lpthread -ldl -lutil -lm -lm      
```
</details>

## syntax 以外も含めた Feature 一覧の比較
`syntax`以外のFeatureもたくさん有効化されたみたいなので比較してみた結果が下の表です。

構成も有効化状態もともに、大雑把にいうと予想通り **Huge版 > Small version** という包含関係のようです。正確には Huge 版だけに含まれないものもありますが、名前が似ていることから上位のFeatureなのだと思います。具体的には `+builtin_terms` と `builtin_terms`、 `dialog_con` と `dialog` です。

Huge 版にしか含まれていないのは `postscript` です。学生時代に`LaTeX`で書いた論文を印刷するときに `*.ps` ファイルにコンパイルしていましたが、あれってバイナリじゃなかったのですね・・・。

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


## おわりに

シェルスクリプトだけでなく、Pythonスクリプトでも色が付きました。**カラフルだとよりモチベが上がるというか、ワクワクする気がしますね。** プログラミングは楽しい！

次は`+python`などしてみようかなと思っていましたが、よく見ると `+python3` の方が今回有効になっていました。`-python`が指すのはpython2なのでしょうね。

最小構成で入れる方はあまりおられないかと思いますが、同じ状況になった人の何かお役に立てたなら幸いです。

## 参考（おすすめ）

```
$ sudo apt install vim-gtk
```
するともっとたくさんの Feature が有効化され便利になります。

**`+clipboard` されるので、テキスト編集全般で Undo/Redo が不自由なくできる**ようになりました。1回だけのUndo/Redoでなんとかしのいでたので、助かった^^ コマンドモードも履歴が使えるようになって、個人的にはもう十分な気がします。

https://vi.stackexchange.com/questions/11526/how-to-enable-python-feature-in-vim?newreg=56dfb9e1d93e44308caa5d1fd12a8662

ちなみに、
1. 最小構成
1. `apt install vim-asciidoc` した状態 → "Before" と再定義
1. `apt install vim-gtk` した状態 → "After"

とすると、 features は下表のように変わりました。見比べてみるだけでも面白いです。

<details><summary> vim-asciidoc と vim-gtk の Feature 差分 </summary>

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

</details>

## 余談

あと、`apt search` から `grep` された `vim-syntax-gtk`パッケージもあとで入れてみようかなと思うので、新情報があれば共有します。

ただ、面白そうなドキュメントがたくさん見つかるので時間ないかも。

https://vim-jp.org/vimdoc-ja/if_pyth.html