Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim 8.0用のプラグインマネージャを作ってみた話

$
0
0

概要

Vim 8.0 では、Vim 本体にプラグイン/パッケージを扱うための機能が追加され、さらに外部プロセスを実行して非同期に通信を行う、ジョブ・チャンネル機能が追加されました。
今回、これらの機能を活用した Vim 8.0 専用のプラグインマネージャを作ってみました。

プラグインマネージャの歴史

本題に入る前に、Vim のプラグインマネージャの歴史を軽くおさらいしてみましょう。(以下の分類は、私による勝手な分類です。)

第 1 世代

Vim には、VimballGetLatestVimScriptsという標準プラグインが付属しており、これを使えば対応プラグインを簡単にインストールしたり、更新することができました。
しかし 'runtimepath'の管理は手動であり、すべてのプラグインを単一ディレクトリにインストールすることもよくありました。そのためプラグインを正しく管理するのは困難でした。

第 2 世代

pathogenunbundleなどがあります。特定のディレクトリ構成にしたがってプラグインを配置し、いくつかの設定を書けば、自動で 'runtimepath'を更新してくれるようになりました。

第 3 世代

VundleNeoBundleなどがあります。'runtimepath'の管理に加え、GitHub などから自動でプラグインをダウンロードしてインストールしてくれるようになりました。

第 3.5 世代

vim-plugdein.vimなど、第 3 世代の発展形です。速度などに重点を置いて開発されているようです。

Vim 8.0 のパッケージ機能

Vim 8.0 では、pathogen などと同様の 'runtimepath'管理機能が Vim 本体に搭載されました。
パッケージとは 1 つまたは複数のプラグインをまとめたものであり、それを 'packpath'オプションで指定したディレクトリに配置することで、Vim の起動時に自動でロードしたり、:packaddコマンドを使用して必要な時に手動でロードすることができるようになりました。
詳細は、:help packagesを参照してください。

minpac

今回、Vim 8.0 のパッケージ機能と Job 機能を活用した最小限のプラグインマネージャを作ってみました。

開発コンセプト

  • Windows, Linux 対応。
  • Vim 8.0 のパッケージ機能を活用。
  • Vim 8.0 の Job 機能を活用した、プラグインの並列インストール・更新。
  • シンプルかつ最小限度の機能。
  • 高速。
  • 10~20個程度の少数プラグイン向け。

前述のとおり Vim 8 では、'runtimepath'管理機能が Vim 本体に内蔵されているため、minpac では 'runtimepath'の管理は一切行っていません。プラグインの自動ダウンロード(インストール)、アンインストールのみを処理するようになっています。
これにより、minpac 自体の実装を非常にシンプルにすることができました。それに伴い、minpac のロードも高速 (1ms 以下) になっています。

なお、現時点では以下のような機能の対応は予定していません。

  • 見栄えの良い更新画面。
  • プラグインのインストール後のコマンド自動実行。
  • Vim 7.4 以前や Neovim への対応。

インストール例

'packpath'オプションで指定されたディレクトリのうち、先頭のディレクトリの下に、pack/minpac/opt/ディレクトリを作成し、そこに minpac を clone してください。

Windows の場合:

cd /d %USERPROFILE%
mkdir vimfiles\pack\minpac\opt
cd vimfiles\pack\minpac\opt
git clone https://github.com/k-takata/minpac.git

Linux, macOS の場合:

mkdir -p ~/.vim/pack/minpac/opt
cd ~/.vim/pack/minpac/opt
git clone https://github.com/k-takata/minpac.git

設定例

.vimrc
packadd minpac

call minpac#init()" minpac は、`packadd` でロードできるように {'type': 'opt'} を指定する必要がある。call minpac#add('k-takata/minpac', {'type': 'opt'})" 他のプラグインはここに追加call minpac#add('vim-jp/syntax-vim-ex')
...

" プラグインを直ちにロードするには以下を有効化。"packloadall

'packpath'の先頭に ~/.vimを追加すれば、Windows でも ~/vimfilesの代わりに ~/.vimディレクトリを使うことができます。

.vimrc
set packpath^=~/.vim
packadd minpac

call minpac#init()
...

使用例

プラグインをインストール、あるいは更新する:

call minpac#update()

使用していないプラグインを削除する:

call minpac#clean()

今後

vim-plug や dein.vim などとの速度比較は今後の課題です。

また、minpac の開発過程で、Vim 本体にあると便利だと判明した機能があれば、適宜本体にフィードバックしていく予定です。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>