Vimを使い始めた理由とカスタマイズの大筋について

# 始めに

この記事は、Atomを使ってきた自分がVimに切り替えて、Vim沼へ落ちた話です。
前回の投稿から何ヵ月も経過し、今までいったいなにをやってきたのか、そんな備忘録です。
なお今回の記事では大筋のみを語り、Vimにしてきた設定などは、別に記事を書く予定です。


## もともとVimmerというものにあこがれていた

zsh環境構築やdotfilesの構築について、いくつか記事を読んでいると、Vimの設定を整えてdotfilesをインストールしただけで使えるスマートさにあこがれました。
そして調べ物をするときに、マウスを使ってだらだらと「あーでもない、こーでもない」という操作は理解できます。
しかし、コーディングをしているときに、マウスを使うのはスマートじゃないと思っていました。

使い始めたのはAtomでしたが、バージョンアップで重くなってくるし、先に説明したとおりマウスを使うのでスマートではないと感じていました。
同様にVSCodeも似たようなものと偏見的に見てしまい、エディタの切り替え候補からは自然と外れていきました。
よく調べればVimキーバインドを設定できるので、今はVimキーバインドに慣れるにはちょうどよいと思っています。


## Gitの使い方を勉強しているときに、革命が起きた

テストプログラムを作ったり、本を読みながらコードを書いていると、ちょっと過去の状態に戻したくなるものです。
そこで方向転換をして、Gitをちゃんと勉強しようと思い以下の2冊を買いました。[^1]

<!-- textlint-disable -->

改訂2版 わかばちゃんと学ぶGit使い方入門

https://www.amazon.co.jp/gp/product/B096TH798S/

独習Git

https://www.amazon.co.jp/gp/product/B01C2TRNUG/

<!-- textlint-enable -->

この独習Gitという本は基本操作がTerminalのため、テキストの変更はコマンドかVimの操作が要求されます。
別にエディタに関してVimを指定している訳ではないですが、テキストを編集する際にAtomへ画面を切り替えるのが手間でした。
なんと言っても、Terminalで操作するGitとVimの親和性は高いものです。そういう理由で、Vimを使用してテキスト編集をするようになりました。
しかし、本を読み進めていく中で、プレーンなVimの不便さを感じカスタマイズせずにはいられなりVim沼へ落ちていきました。


## 海外生まれながらも、日本人ユーザーが多く情報が手に入りやすい

カスタマイズについて調べていくと、以外にも日本人のユーザーが多く参考になるコードがたくさんあります。
これのおかげでカスタムに困ることは少なく、`.vimrc`に書き込む内容はすぐ固まりました。

同時にさまざまなプラグインについて触れることになり、基本の`.vimrc`を弄るだけでは足りなくなってきました。


## 闇の力なるものに出会う

プラグインについて調べると、どの記事にも出てくる「闇の力」や「dark powered」という目を引く言葉。
この目を引く言葉は、ただ目を引くだけではなく、玄人向けの高性能なプラグイン達でした。

https://github.com/Shougo

その作者は、暗黒美無王ことShougo氏。Vimmerなら少なくとも一度は、お世話になっているのではないでしょうか。
この方のプラグインはインストールしただけでは使えず、必ず何かしらの設定を書く必要があります。

ここがVim初心者には難しいと言われる所以ですが、自分はそう思いません。
設定内容の例はヘルプを見れば出てくるし、その例を見て分からないことがあれば、ヘルプから調べれば良いのです。
そうやって試行錯誤を繰り返して、自分が使いやすいようにカスタマイズしていくのがShougo氏のプラグインの良さであり、いわゆる「闇の力」と呼ばれる物を体験することになるのです。
気がつけば、Vim-Scriptを理解できるようになり、よりVimを触るのが楽しくなります。

そもそも一般人から見れば、プログラマー自体が玄人であり、一般向けに作るプログラムのような設定済みである必要はないのです。
そういう考えが、Shougo氏のプラグインには反映されていると思います。

というわけで、闇のプラグインをメインに、Vimをカスタマイズしていくことにしました。[^2]


## NeoVim

導入するプラグインの方向性が決まり、`dein.vim`でプラグインの管理をすることにしました。
ですがこのタイミングで、NeoVimに切り替えました。[^3]
理由としては、多言語との連携がしやすくなり、プラグインの種類が豊富でNeoVimにしかないプラグインがあるためでした。


## Lightline

以前に投稿した[Oh-my-zshをやめてZinitに変えた話][1]では、プロンプトデザインを弄ることのできるプラグインを入れてましたが、Vimには`status line`があります。
このLightlineを導入することで`status line`をカスタマイズできます。[^4]

自分はこのLightlineに、さまざまな情報を表示できるように、カスタマイズをしています。


## Skkeleton

Vimとは基本Terminalで操作する物ですが、一部のTerminalでは、IMEの切り替えが得意ではありません。
と言うのも、切り替えには難しい設定や、そもそもサポートしていない場合もあります。
しかし、Skkeletonを導入すれば、そういった問題には左右されることはありません。
このプラグインを導入すれば、SKKという入力方式で、Vimの中で日本語入力ができます。
SKKはEmacsで生まれた日本語入力です。それをVimでも使えるようにしたものですね。

SKKで日本語入力するプラグインだとeskk.vimが有名ですが、Vim-Scriptで作られていて動作が重いです。
SkkeletonはTypeScriptで作られていて、非同期で処理が行われるので、動作が軽いです。


## nvim-treesitter

Vimには`colorscheme`という物があり、コードにシンタックスハイライトを適用してくれます。
しかし、ハイライトしてくれる色は少なく、ほかのGUIのエディタのようなカラフルさはありません。

このnvim-treesitterを導入すれば、ほかのエディタにも負けないカラフルなコードにしてくれます。
対応の`colorscheme`の導入が必要ですが、[公式Wikiのリスト][2]から一覧を見ることができるので、気に入ったものがあれば導入してみてください。

ちなみに、自分はnight foxと言うものを導入しています。

https://github.com/EdenEast/nightfox.nvim

このtreesitterという技術は、もともとはAtomで使われていたものみたいですね。[^5]


## Language-Server-Protocol

こちらは、Microsoftが開発した技術ですね。Vimではプラグインを導入することでLanguage-Server-Protocol(以下:lsp)を使うことができますが、いくつか選択肢があります。

|プラグイン名                    |説明(個人的見解を含む)                                                                                                                                            |
|:------------------------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|coc.nvim                        |NeoVimでlspを使うならコレっていうくらい、一番人気のプラグインですね。<br>このプラグイン一つで入力補完もできるので、インストールすればIDE化できると言われています。|
|nvim-lspconfig                  |NeoVimに組み込まれたlspの機能を使うために、ほぼ必須のプラグインです。<br>luaで設定を書く必要があったり、別に補完プラグインが必要ですので、導入難易度は高めです。    |
|vim-lsp|上記の2つはNeoVimである必要がありますが、こちらはVimでも導入できます。<br>ただVim-Scriptで作られているため、上記2つには速度では負けてしまいます。<br>こちらも別に補完プラグインを導入する必要があります。    |
|ale                             |非同期でリンターを実行してくれるプラグインなのですが、lspクライアントとしても動くようです。                                                         |

本当はnvim-lspconfigを導入して軽快に補完操作をしたいのですが、luaで書く設定が難しいので自分はvim-lspを使っています。
vim-lspの良いところは、同時にインストールすると便利になるvim-lsp-settingsがあります。
本来ですとLanguage-Serverを使うためには、vim-lspに設定する必要がありますが、その設定をvim-lsp-settingsというプラグインが代わりに行ってくれます。
また、Language-Serverがインストールされていない言語のファイルを開くと、使えるLanguage-Serverを提案してくれて、コマンドを実行すればローカル環境にインストールできます。


## まとめ

今回書いた内容は、本当に大筋のみで、この記事を書くための必要な環境まで、詳細には書いていません。
ですので、この記事を軸にVimの記事をいっぱい書いていきたいと思います。
「まだまだ、書き足りない。」これが、書き終わった感想です。

さぁ、次の記事もがんばって書くぞ！


## 注釈

[^1]: いつか、この2冊のレビューもしっかり書きたいと思います。
[^2]: いろいろなすばらしいプラグインがありますので、個別紹介するくらいの勢いで記事を書きたいと思います。
[^3]: VimかNeoVimかで変わってくるところがありますので、ここではNeoVimに切り替えたことを明示的に説明しました。
[^4]: このプラグインもカスタマイズの幅があり、個別紹介したいプラグインです。
[^5]: [参考記事][3]

<!-- リンク集 -->
[1]:https://qiita.com/yasunori-kirin0418/items/3557150582a1f7e08ecb
[2]:https://github.com/nvim-treesitter/nvim-treesitter/wiki/Colorschemes
[3]:https://www.google.com/amp/s/forest.watch.impress.co.jp/docs/news/1149/887/amp.index.html