💖

.vimrc を packadd で整理するとめっちゃ便利だった!

2021/08/30に公開

お前が思うんならそうなんだろう。お前ん中ではな

話の前提

私は普段プログラミングやテキスト管理に NeoVim を使っていて、.vimrc (NeoVim だと init.vim)に色々な場面で必要になる設定や関数、あるいは機能拡張などを記述していました。

しかし最初は機能ごとにファイルを分けたり init.vim を一つに統一したりと、色々と調整していたものの、どの方法も上手くファイルを整理するに至らず、

さてどうしたもんかな……これは……

と考え込んでいたところで、

あ! 試しに vim 組み込みのパッケージ管理機能を使ってみるか!

と思いつき、実際にやってみたら結構イケると言うことが分かったので、今回はその辺りの知見を共有したいと思います。

そもそも Vim 組み込みのパッケージ管理機能とは?

実際のところ packadd に関連する Vim 組み込みのパッケージ管理機能の情報は、

https://qiita.com/thinca/items/cdc0169e3bcc5a55a5ba

が詳しいので細かいところは省きますが、Vim8 以降、vim には必要最低限のパッケージ管理システムが実装されています。

そして今回の話の内容としては、その Vim8 以降に実装された vim が持つパッケージ管理システムを使い、.vimrc を分割していった結果、.vimrc の中身が非常にスッキリした、と言う話です。

Vim の組み込み機能で .vimrc を分割する

私の .vimrc がどう言った構成になっているか、と言う点については、

https://github.com/nyarla/dotnvim/tree/9d8a40211593aa2df703a8db5936bf4bce374089

を見てもらった方が正確に分かるのですが、 .vimrcpackadd を使って整理する流れとしては:

  1. Vim やプラグイン自体の設定は .vimrc に書く
  2. 独自の拡張コマンドや複雑なキーバインドはプラグインとして分離する
  3. 既存のプラグインの拡張や syntax highlight の拡張もプラグインとして分離する

と言った様な感じです。

そしてこの方法の利点としては:

  1. 複雑な設定をプラグインとして分離することで機能管理がしやすくなる
  2. 汎用性のある設定や機能拡張は単独のプラグインとして切り出しが出来る
  3. 特定の場合だけに利用する機能を必要な時にだけ読み込むことが出来る

と言った辺りです。

そして特に(2)の利点に関しては、Vim のプラグインを作りまくっている人には大変有用だと考えていて、

オレ得で育てていたこの設定、プラグインとして切り出せるな……!

と言うところまで至った場合、プラグインとして分離してあった設定をそのまま単独のリポジトリとして切り出し、あとはドキュメントなどの体裁を整えれば立派な Vim プラグインとして GitHub などで提供が出来るようになるため、そう言った意味でこれは大変に有益だと私は考えています。

以上

個人的に .vimrc を vim組み込みのパッケージ管理システムで分離する方法は、.vimrc が混沌になりがちな、

設定以上プラグイン未満

と言った機能を整理するのにとても有益だと感じていて、この方法論のおかげで私の .vimrc は非常に分かり易くなりました。

なお私はこの方法論を思いついた時に dein.vim で管理していた vim plugin も packadd で管理する様に移行していて、 既存の vim plugin に関しては git submodule で直接リポジトリで管理する様にしてます。

と言うのもこうすることによって、自分がプラグインとして分離した設定と他の方が作った vim plugin も同様の方法で管理できる様になり、同じような方法でプラグインの遅延読み込みが出来たりするので、そう言う点が便利だと私個人として感じています。

Discussion