自己流! Vimの設定方針とディレクトリ構造の解説

# 始めに

今回は、自分のVimの設定方針のようなものを紹介・解説していきたいと思います。
`.vimrc`や`init.vim`の解説をしたいのですが、何分量が多いので、設定するうえで気にしていることを書いていきたいと思います。

https://github.com/yasunori-kirin0418/dotfiles/tree/master/.vim

まだまだ未熟な設定ばかりですが、自分はdotfilesの`.vim`内に設定をまとめてますので、合わせて読んでいただければ幸いです。


## 設定方針

まず始めに、Vimを使うようになって、基本のテキスト編集はVimでしたい状態になっています。
しかし、テキストエディタをVimに切り替えてからが日が浅いため、設定のほとんどがコピぺと言っても過言ではありません。
ですので、今回自分のdotfilesを元に解説をしていきますが、これらの設定は自分が管理しやすく、分かりやすいと思ったものを使用しています。

他の方のようなオリジナルのキーバインド設定や、スクリプトでいろいろするというより、プラグインに頼りつつ基本のVimキーバインドに関しては修行中といった感じです。


## `.vim/`について

`.vim`を開いて最初に見えるファイルは、`init.vim`と`ginit.vim`だけにしています。
内容としては、`rc/`以下の`*.vim`を読み込んでいるのが主で、お試しで使用していたGUIの設定が雑に書かれています。

この`.vim`は、`runtimepath`を通している訳ではないので、`autoload`等のディレクトリは配置していません。

また[前回の記事][1]では、自分がVimをカスタマイズする方向性のようなものを紹介しました。
そこでも触れましたが、プラグイン管理はShougo氏製作のdein.vimにしています。


### ディレクトリ名について

プラグインを管理するファイルやプラグインの設定で、ディレクトリがファイルだらけになるのは、自分は嫌です。
ですので、自分がVimの設定ファイルを配置する際に、ディレクトリの名前で何を管理しているのか分りやすくすることを気にしています。

|ディレクトリ名|説明                                                                                  |
|--------------|--------------------------------------------------------------------------------------|
|`rc/`         |起動時に必ず読み込まれる設定ファイル。                                                |
|`toml/`       |dein.vimで使用する、toml形式のプラグインを管理しているファイル。                      |
|`plugins`     |コード量の大目なプラグインの設定ファイル。基本的にはプラグイン名でファイルを作成する。|

`runtimepath`は通していないのですが、よりVimを触っていくなら、
「`runtimepath`を通して専用のディレクトリも配置しよう。」と思っています。

`runtimepath`については、Vim内のコマンドで`:h rutimepath`を実行してご覧ください。


### `rc/`内のファイル

|ファイル名   |説明                                                                                               |
|-------------|---------------------------------------------------------------------------------------------------|
|`option.vim` |`set {option}`関係の内容を記述しています。                                                         |
|`keybind.vim`|全体で使用するキーバインドを記述しています。                                                       |
|`dein.vim`   |dein.vimが起動時に必要なコードを記述しています。<br>読み込むtomlファイルの定義もしています。       |

Vimの紹介記事でよく見る`set {option}`系の内容は、`.vim/rc/option.vim`にまとめています。
使用者によって環境が変わってきますので、あえて紹介はしません。気になる方は、GitHubからご覧ください。
また、`set {option}`系の解説は各所で行われているため、ここで解説しても冗長になってしまうと思いました。


### `toml/`内のファイル

|ファイル名     |説明                                                                                    |
|---------------|----------------------------------------------------------------------------------------|
|`dein.toml`    |遅延読み込みを使用しないプラグインを管理しています。                                    |
|`lazy.toml`    |遅延読み込みを使用しているプラグインで、特別より分けていないプラグインを管理しています。|
|`filetype.toml`|`filetype`ごとに使用するプラグインを管理しています。                                    |
|`ddc.toml`     |ddc.vimで使用する`source`と`filter`や、連携するプラグインを管理しています。             |
|`lsp.toml`     |vim-lspと連携するプラグインを管理しています。                                           |

dein.vimの遅延読み込みは、さまざまなタイミングを指定できます。
ddc.vimやlspのように、連携するプラグインでファイルを分けるのが正解で、それ以外の単独のプラグインは`lazy.toml`に押し込めばよいのか。
または、タイミングの種類ごとにファイルを分割するべきか迷っているところです。

遅延読み込みの機能は一見便利ですが、各プラグインの特性を理解しないで遅延設定をしてしまうと、うまくプラグインが機能しないなどの問題が発生します。

### `plugins`内のファイル

こちらはファイルごとの解説を省かせていただきます。
「ディレクトリ名について」の所でも書きましたが、ここに置いてあるファイルはすべてプラグインの設定です。
これらの設定はいつか、プラグインの個別記事を書いたときに、説明したいと思います。
ファイル名を見てもらえると分かる通り、すべてのファイル中5/8は「闇のプラグイン」の設定です。

これらの設定ファイルはすべて、dein.vimの`hook_add/hook_source`で読み込まれるようになっています。
直接tomlファイル内に設定をVim-Scriptで記述できますが、nvim-treesitterのシンタックスハイライトが適用されません。
また、tomlファイルに設定を書くと、プラグインを管理しているのかプラグインの設定をしているのか分からなくなってしまいました。
ですので、`hook_add/hook_source`のタイミングでファイルを読み込むようにして、管理しやすくしています。


## まとめ

ディレクトリ構造に関しては、自分なりにきれいにできていると思っています。
より、Vimの環境がよくなるように、あれこれ考えるのは楽しいですよね。

まだまだ、修行の身だなと実感するのは、Kindleで購入した「[実践Vim][2]」を読んでいると感じます。
隙間時間には本を読んで新たな発見をしては、Vimで試すを繰り返しています。
しかし修行するより、Vimを触ってテキスト編集したり、こうやって記事書くのが楽しいのです。

もっと経験値を高めていきたいですね。


<!-- リンク集 -->
[1]:https://qiita.com/yasunori-kirin0418/items/32af601fb53285e06317
[2]:https://www.amazon.co.jp/gp/product/B00HWLJI3U/