Vimのタイプ

# vimのタイプ
vimには以下の5つのタイプがあります。
- tiny
- small
- normal
- big
- huge

今あなたがお使いのvimがどのタイプなのかは`vi --version`または`vim --version`で確認する事ができます。

実行した時の5行目の最初のワードがタイプです。
以下の場合はSmallになります。

```bash
$ vi --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 09 2023 00:00:00)
Included patches: 1-2637
Modified by <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
Small version without GUI.  Features included (+) or not (-):
+acl               -farsi             +mouse_sgr         -tag_old_static
-arabic            -file_in_path      -mouse_sysmouse    -tag_any_white
+autocmd           -find_in_path      -mouse_urxvt       -tcl
-autochdir         -float             +mouse_xterm       -termguicolors
-autoservername    -folding           +multi_byte        -terminal
-balloon_eval      -footer            -multi_lang        +terminfo
-balloon_eval_term +fork()            -mzscheme          +termresponse
-browse            -gettext           -netbeans_intg     -textobjects
+builtin_terms     -hangul_input      +num64             -textprop
-byte_offset       +iconv             -packages          -timers
-channel           +insert_expand     -path_extra        -title
-cindent           -ipv6              -perl              -toolbar
-clientserver      -job               -persistent_undo   +user_commands
-clipboard         +jumplist          -popupwin          -vartabs
+cmdline_compl     -keymap            -printer           +vertsplit
+cmdline_hist      -lambda            -profile           +virtualedit
-cmdline_info      -langmap           -python            +visual
+comments          -libcall           -python3           +visualextra
-conceal           -linebreak         -quickfix          -viminfo
-cryptv            -lispindent        -reltime           +vreplace
-cscope            +listcmds          -rightleft         +wildignore
+cursorbind        +localmap          -ruby              -wildmenu
-cursorshape       -lua               +scrollbind        +windows
-dialog            -menu              -signs             +writebackup
-diff              -mksession         -smartindent       -X11
-digraphs          +modify_fname      -sound             -xfontset
-dnd               +mouse             -spell             -xim
-ebcdic            -mouseshape        -startuptime       -xpm
-emacs_tags        -mouse_dec         -statusline        -xsmp
-eval              -mouse_gpm         -sun_workshop      -xterm_clipboard
+ex_extra          -mouse_jsbterm     -syntax            -xterm_save
-extra_search      -mouse_netterm     +tag_binary
   system vimrc file: "/etc/virc"
     user vimrc file: "$HOME/.virc"
 2nd user vimrc file: "~/.vim/virc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/etc"
 f-b for $VIMRUNTIME: "/usr/share/vim/vim82"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -L/usr/local/lib -Wl,--as-needed -o vim -lm -lselinux -lncurses -lacl -lattr
```


# AlmaLinuxでのvimのタイプ
AlmaLinuxでは、`vim-minimal `と`vim-enhanced`のパッケージが提供されていて、`vim-minimal`はsmall、`vim-enhanced`はhugeになります。

```bash
$ dnf search vim
メタデータの期限切れの最終確認: 17 days, 23:40:10 前の 2024年05月16日 08時58分22秒 に実施しました。
=============================================================== 名前 & 概要 一致: vim ================================================================
vim-X11.x86_64 : The VIM version of the vi editor for the X Window System - GVim
vim-common.x86_64 : The common files needed by any version of the VIM editor
vim-enhanced.x86_64 : A version of the VIM editor which includes recent enhancements
vim-filesystem.noarch : VIM filesystem layout
vim-minimal.x86_64 : A minimal version of the VIM editor
```

`vim-minimal`は標準でインストールされていて、`vim-enhanced`はappstreamリポジトリで提供されています。
なお、各パッケージが提供するのは以下の機能です。

|パッケージ名|機能|
|-|-|
|vim-X11|vimのGUI版を提供します|
|vim-common|vimが依存する共通ファイルを提供します|
|vim-enhanced|vim-minimalを拡張する様々な機能を提供します|
|vim-filesystem|vimプラグインの管理等の機能を提供します|
|vim-minimal|vimの最小限の機能を提供します|

# タイプによる違い
このタイプによって異なるのはvimが提供する機能です。
※前項で記載した、パッケージが提供する機能ではなく、vimが提供する機能です。

以下はhugeで`vim --version`を実行した結果です。

コマンドの結果にも書いてありますが、+が提供している機能で、-が提供していない機能です。

```bash
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 09 2023 00:00:00)
Included patches: 1-2637
Modified by <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
Huge version without GUI.  Features included (+) or not (-):
+acl               -farsi             +mouse_sgr         +tag_binary
+arabic            +file_in_path      -mouse_sysmouse    -tag_old_static
+autocmd           +find_in_path      +mouse_urxvt       -tag_any_white
+autochdir         +float             +mouse_xterm       -tcl
-autoservername    +folding           +multi_byte        +termguicolors
-balloon_eval      -footer            +multi_lang        +terminal
+balloon_eval_term +fork()            -mzscheme          +terminfo
-browse            +gettext           +netbeans_intg     +termresponse
++builtin_terms    -hangul_input      +num64             +textobjects
+byte_offset       +iconv             +packages          +textprop
+channel           +insert_expand     +path_extra        +timers
+cindent           +ipv6              +perl/dyn          +title
-clientserver      +job               +persistent_undo   -toolbar
-clipboard         +jumplist          +popupwin          +user_commands
+cmdline_compl     +keymap            +postscript        +vartabs
+cmdline_hist      +lambda            +printer           +vertsplit
+cmdline_info      +langmap           +profile           +virtualedit
+comments          +libcall           -python            +visual
+conceal           +linebreak         +python3/dyn       +visualextra
+cryptv            +lispindent        +quickfix          +viminfo
+cscope            +listcmds          +reltime           +vreplace
+cursorbind        +localmap          +rightleft         +wildignore
+cursorshape       +lua/dyn           +ruby/dyn          +wildmenu
+dialog_con        +menu              +scrollbind        +windows
+diff              +mksession         +signs             +writebackup
+digraphs          +modify_fname      +smartindent       -X11
-dnd               +mouse             -sound             -xfontset
-ebcdic            -mouseshape        +spell             -xim
+emacs_tags        +mouse_dec         +startuptime       -xpm
+eval              +mouse_gpm         +statusline        -xsmp
+ex_extra          -mouse_jsbterm     -sun_workshop      -xterm_clipboard
+extra_search      +mouse_netterm     +syntax            -xterm_save
   system vimrc file: "/etc/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: "/etc"
 f-b for $VIMRUNTIME: "/usr/share/vim/vim82"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -L. -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -Wl,--enable-new-dtags -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -L/usr/local/lib -Wl,--as-needed -o vim -lm -lselinux -lncurses -lacl -lattr -lgpm -Wl,--enable-new-dtags -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fstack-protector-strong -L/usr/local/lib -L/usr/lib64/perl5/CORE -lperl -lpthread -lresolv -ldl -lm -lcrypt -lutil -lc
```

このタイプの違いは、パッケージをビルドした時のオプションで決まります。

具体的には以下のような指定になります。詳しく知りたい人はこの辺を調べてみてください。

```bash
./configure --with-features=huge
```

実際にタイプの差でどの機能が有効になるのかは、上記で記載した`vi --version`または`vim --version`コマンドの結果を見るか、ソースコードの`feature.h`を見る事で分かります。

# 参考
https://github.com/vim/vim