CentOS の rpm パッケージ（vim）

CentOS に最新の vim をコンパイルして入れようと思ったときに、そういえば今使っている rpm のパッケージ達は何をしてくれているんだろうか。というのが気になったので少し調べてみた。

# 環境

```
$ cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
```

# vim の rpm パッケージたち

今自分の環境にインストールされている vim と名前の付くパッケージは以下の 4 つ。

```
$ rpm -qa | grep vim
vim-filesystem-8.0.1763-15.el8.noarch
vim-enhanced-8.0.1763-15.el8.x86_64
vim-minimal-8.0.1763-13.el8.x86_64
vim-common-8.0.1763-15.el8.x86_64
```

それぞれの中身を簡単に調べてみたいと思います。

## vim-minimal
まずはパッケージの説明を確認してみます。
`dnf info vim-minimal` か `rpm -qi vim-minimal` あたりで確認するのが早そう。

前者は参照可能なリポジトリに存在するパッケージの情報であればインストールされていなくても参照できます。
後者はインストール済の rpm パッケージの情報しか参照することができません。

```
$ rpm -qi vim-minimal
... 省略(snip)
Source RPM  : vim-8.0.1763-13.el8.src.rpm
...
Summary     : A minimal version of the VIM editor
Description :
VIM (VIsual editor iMproved) is an updated and improved version of the
vi editor.  Vi was the first real screen-based editor for UNIX, and is
still very popular.  VIM improves on vi by adding new features:
multiple windows, multi-level undo, block highlighting and more.

The vim-minimal package includes a minimal version of VIM, which is
installed into /bin/vi for use when only the root partition is
present. NOTE: The online help is only available when the vim-common
package is installed.
```

説明によるこのパッケージは最小構成の vim を含んでいるようです（そのままですけど）。
次に実際に展開されるファイルの中身を確認してみたいと思います。

```
$ rpm -ql vim-minimal
/etc/virc
/usr/bin/ex
/usr/bin/rvi
/usr/bin/rview
/usr/bin/vi
/usr/bin/view

...(man ファイルなどにつき省略)
```

vim の設定情報といくつかのバイナリが含まれているようです。
ちなみに vi コマンドは sudo と依存関係にあるので、vim-minimal パッケージは無理に削除しないほうが良さそうです。
恐らく sudoers を編集する際に使うコマンド（visudo）で使うからだと思います。

```
$ sudo yum remove vim-minimal
エラー:
 問題: 操作は結果的に以下の保護されたパッケージを削除します: sudo
```

## vim-enhanced

```
$ rpm -qi vim-enhanced
...
Source RPM  : vim-8.0.1763-15.el8.src.rpm
...
Summary     : A version of the VIM editor which includes recent enhancements
Description :
...
The vim-enhanced package contains a version of VIM with extra, recently
introduced features like Python and Perl interpreters.
```

```
$ rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor

...(省略)
```

ここに vim コマンドがいました。
`/etc/profile.d` 下に配置されたスクリプトで vi コマンドから vim コマンドへの alias が設定されているようです。
vimtutor コマンド（vim のチュートリアル）もここにいるんですね。

## vim-common

```
$ rpm -qi vim-common
...
Source RPM  : vim-8.0.1763-15.el8.src.rpm
...
Summary     : The common files needed by any version of the VIM editor
Description :
...
The vim-common package contains files which every VIM binary will need in
order to run.
```

いずれのバージョンの vim にも共通で必要になるファイルが含まれている模様。

```
$ rpm -ql vim-common
/etc/vimrc
/usr/bin/xxd
...
# vim についてのドキュメント情報（各種OSのインストール方法など）
/usr/share/doc/vim-common/*

# man（マニュアル）情報
/usr/share/man/*

# :help の情報
/usr/share/vim/vim80/doc/*

# ライセンス情報
/usr/share/licenses/vim-common/LICENSE

# デフォルトの vimrc を定義する vim スクリプト
/usr/share/vim/vim80/defaults.vim

# vim が file の種類の検出を有効 / 無効にする vim スクリプト
# filetype on/off の時に読まれる
/usr/share/vim/vim80/filetype.vim
/usr/share/vim/vim80/ftoff.vim

# 実際にファイルタイプを判定する vim スクリプト
/usr/share/vim/vim80/scripts.vim

# filetype に応じたプラグインを有効 / 無効にする vim スクリプト
# filetype plugin on/off の時に読まれる
/usr/share/vim/vim80/ftplugin.vim
/usr/share/vim/vim80/ftplugof.vim

# filetype に応じたインデントを有効 / 無効にする vim スクリプト
# filetype indent on/off の時に読まれる
/usr/share/vim/vim80/indent.vim
/usr/share/vim/vim80/indoff.vim

# Evim 向け設定プラグイン
/usr/share/vim/vim80/evim.vim

# バグレポート作成のための vim スクリプト
/usr/share/vim/vim80/bugreport.vim

# vimrc のサンプル
/usr/share/vim/vim80/gvimrc_example.vim
/usr/share/vim/vim80/vimrc_example.vim

# GUI のメニュー表示 / 削除する vim スクリプト
/usr/share/vim/vim80/menu.vim
/usr/share/vim/vim80/delmenu.vim
/usr/share/vim/vim80/synmenu.vim (menu.vim から基本的に読まれる）

# windows 風のキーマッピングができるようになる vim スクリプト
/usr/share/vim/vim80/mswin.vim

# options コマンドで使われる
/usr/share/vim/vim80/optwin.vim

# RGB の色定義情報
/usr/share/vim/vim80/rgb.txt

# 必要に応じて自動読み込みされるスクリプトが含まれる
# plugin や vim の各種機能利用に必要になるもの
/usr/share/vim/vim80/autoload/*

# colorscheme 設定で使う色のテーマ情報
/usr/share/vim/vim80/colors/*

# 様々な言語のコンパイラを使うための vim スクリプト
/usr/share/vim/vim80/compiler/*

# filetype に応じたプラグイン
/usr/share/vim/vim80/ftplugin/*

# filetype に応じたインデントを設定する vim スクリプト
/usr/share/vim/vim80/indent/*

# keymap 情報
/usr/share/vim/vim80/keymap/*

# vim 上の各言語の情報（いわゆる i18n 的な気配）
/usr/share/vim/vim80/lang/*

# vim で標準提供されているプラグインや便利ツールなど
/usr/share/vim/vim80/macros/*

# vim で標準配布しているパッケージ(1つ以上のプラグインのまとまり)
/usr/share/vim/vim80/pack/*

# vim 標準のプラグイン（起動時に読まれる）
/usr/share/vim/vim80/plugin/*

# 印刷用ファイル
/usr/share/vim/vim80/print/*

# スペルチェック用ファイル
/usr/share/vim/vim80/spell/*

# syntax ハイライト用の vim スクリプト
/usr/share/vim/vim80/syntax/*

# vim のチュートリアル情報（vimtutor コマンドでも見られる）
/usr/share/vim/vim80/tutor/*
```

なかなか重厚なコンテンツでした。
xxd コマンド（16進ダンプの作成や戻しができるコマンド）はここにいたんですね。
調べれば調べるほど気になる事が出てくるのでここではあまり深追いしないことに。

## vim-filesystem

```
$ rpm -qi vim-filesystem
...
Source RPM  : vim-8.0.1763-15.el8.src.rpm
...
Summary     : VIM filesystem layout
Description :
This package provides some directories which are required by other
packages that add vim files, p.e.  additional syntax files or filetypes.
```

他のパッケージが必要とするいくつかのディレクトリを追加するらしい。

```
$ rpm -ql vim-filesystem
/usr/lib/rpm/macros.d/macros.vim
/usr/share/vim/vimfiles/*
```

確かにディレクトリを追加しているだけの模様。

# おわりに
現在の vim 環境がどのパッケージによってどんな風に構成されてているのかが大まかに見えました。
自前コンパイルを試す際に違いを見比べたりして参考にしたいと思います。
そのまえに rpm の spec ファイルを覗いて configure のオプション指定を見てみたいと思いますがそれはまたの機会に。