Posted at
Vim 8.0Day 6

Vim 8.0 Advent Calendar 6 日目 パッケージ

More than 1 year has passed since last update.

この記事は Vim 8.0 Advent Calendar の 6 日目の記事です。

Vim のパッケージ機能を使うことで、簡単なプラグインの管理を行うことができます。


パッケージとは

まず、パッケージ機能におけるパッケージとはどんなものかについて説明します。

1 つのパッケージは、複数のプラグインを含んでいます。また、プラグインはそれぞれ、Vim 起動時に読み込まれるか、あとから指定して読み込まれるかに分けられます。

パッケージは以下のようなディレクトリ構造になっています。

package/

|- start/
| |- plugin1/
| |- plugin2/
| `- plugin3/
`- opt/
|- plugin4/
|- plugin5/
`- plugin6/

start/ ディレクトリ以下にあるものが Vim 起動時に読み込まれるプラグインで、opt/ ディレクトリ以下にあるものがあとから指定して読み込まれるプラグインです。

plugin1 plugin2 などがプラグイン名になります。この名前は後から読み込む際に指定する名前になります。


パッケージを配置する

パッケージは、'packpath' オプションで指定されたディレクトリの中の pack/ ディレクトリ内から探されます。

'packpath' の初期値は 'runtimepath' の初期値と同じです。

具体例を挙げて見ていきます。

~/.vim などが 'packpath' の 1 つとして登録されています。

この中の pack/ ディレクトリ内の、パッケージ名のディレクトリにパッケージを配置します。

つまり、パッケージ名を pack1pack2 とすると、以下のようになります。

~/.vim/

|- pack/
| |- pack1/
| | |- start/
| | `- opt/
| |- pack2/
| | |- start/
| | `- opt/
: :

このようにパッケージ、およびその中のプラグインを配置しておくことで、Vim は起動時、vimrc ロード後のプラグイン読み込み前に、各パッケージの start/ ディレクトリ内のプラグインを 'runtimepath' に自動的に追加し、その後プラグインを読み込みます。


オプショナルなプラグインのロード

opt/ 以下のプラグインは、:packadd Ex コマンドを使うことでロードできます。

:packadd plugin4

プラグイン名(=プラグインのディレクトリ名)を指定することで、未ロードだった場合はロードされます。プラグインは 'runtimepath' に追加され、プラグイン内の plugin/**/*.vim ファイルがロードされます。

また、vimrc 内からロードする場合は :packadd! を使います。! を付けると、'runtimepath' への追加のみが行われ、ロードはスキップされます。vimrc 内の場合、その後で別途ロード処理があるため、その場ではロードしないようにこちらを使用します。


パッケージの用途について

パッケージは Vim に標準で入った簡易プラグイン管理システムです。標準であることが強みでしょう。あまり多くのプラグインを使っていない人などは、この機能で十分な人もいるでしょう。

また、パッケージは見た限りだと、パッケージ単位でのプラグインの配布なども想定されていそうです。ディストリビューションなどでの配布や、関連したプラグインをまとめたものをパッケージにする用途が考えられます。

一方で、パッケージ機能はロード周りの世話はしてくれますが、昨今のプラグインマネージャプラグインが行ってくれるような、プラグイン自体のインストールや更新は行ってくれません。このレベルでプラグインを管理したい人は、やはりプラグインマネージャプラグインを利用するのが良いと思います。