Vim に入門してみた

# はじめに
この記事では、1週間前に Vim に入門してみた私が、入門する際に参考にした記事、私の Vim の設定ファイル、および設定ファイルの管理方法をメモとして残します。
これから Vim に入門する方、`.vimrc`（Vim の設定を記述するファイル）や `dein.vim` で扱う `tomlファイル`（Vim に追加するプラグインを管理するファイル）を参考にしたい方などの助けになればと思います。

# Vim についての所感
## 今まで
私は、ターミナルからファイルを編集するときには nano を使用していました。
何故なら、nano では**単にファイルを編集する**という目的を、とにかく簡単に達成できるからです。
実際に nano を使用してファイルを編集するときに最低限必要となるコマンドは、ファイルの書き込みを保存するための `C-o` とファイルの編集を終了するための `C-x` の2つです。
nano を使用していたときも Vim については何となくは知っていましたが、知っている Vim のコマンドが少なく（`i`, `:wq`, `Esc` など）、また、Vim 専用のコマンドを覚える学習コストも高そうに思えたので、敢えて Vim を使おうとは思いませんでした。

## Vim を勉強し始めてから
当初想定したよりも、**Vim のコマンドは覚えやすい**ことが分かりました。
何故なら、**Vim のコマンドを覚える ≠ 独立した数多のコマンドを覚える**と分かったからです。
実際にVim のコマンドは、独立したコマンドではなく、いくつかのコマンドの組合せから構成されることがあります。
例えば、カーソル上の `programming` のような単語を削除する `diw` コマンドが挙げられます。
ここで、`diw` とは、操作を示す `d`（delete）と操作の対象を示す `iw`（inner word）の組合せから成ります。
このように Vim のコマンドは、いくつかのコマンドから構成されていることが多く、コマンド自体を丸暗記する必要が少なくなります。
そのため、主要なコマンドなどについては、思っているよりも直ぐに覚えることができると思います。

## 現在
何故人が Vim を推すのか分かるようになり、この記事も Vim で書くようになりました。
が、[VSCode NeoVim拡張 使うまでに詰まったところ](https://zenn.dev/bun913/articles/02785aed0ba50e)という記事を見つけ、
VSCode + NeoVim拡張という形に一旦落ち着きました。VSCode と Vim コマンド の両方の利点を活かせているように感じます。
まだ Vim 初心者の私は、Vim それ自体というより、Vim のコマンドが好きなのかもしれません。


# Vim に入門する際に参考にした記事
私は、以下の順番で Vim に入門しました。
1. Vim のコマンドを覚える
2. Vim をより便利にするための設定を書く
3. Vim をより便利にするためのプラグインをインストールする


# Vim のコマンドを覚える
以下の順番で記事を読みました。
どの記事も面白く分かりやすいので、楽しみながら読めると思います。
1. [知識0から始めるVim講座](https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d)
2. [vimを使うとき十字キーで移動して、vimmerに殺されるその前に](https://qiita.com/fasahina/items/2767891134028648f288)
3. [Vim幼稚園からVim小学校へ](https://qiita.com/hachi8833/items/7beeee825c11f7437f54)
4. [脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)](https://qiita.com/jnchito/items/57ffda5712636a9a1e62)


# Vim をより便利にするための設定を書く
一通りコマンドを覚えた後は、少しは Vim は便利だと感じるかもしれません。
しかし、現状の Vim では、VSCode のようなエディタとは、かけ離れた状態にあると思います。
例えば、画面左端には、ファイルの行数が表示されていません。
また、コマンドに割り当てられたキーを、自分好みにカスタマイズしたくなるかもしれません。
このようなときに活躍するのが、`.vimrc` です。

最初は、人の `.vimrc` を真似れば良いと思います。
私が最初に参考にしたのは、[何も考えず~/.vimrcにこれを書くんだ！ 〜vim初心者によるvim初心者のためのvim入門〜](https://qiita.com/morikooooo/items/9fd41bcd8d1ce9170301)です。
一つ一つの設定にコメントが書かれており、初心者の私にもとても分かりやすかったです。
また、コマンドのキーマッピングに関しては、[【vimめも】 10. マッピング](https://qiita.com/r12tkmt/items/b89df403f587216802f1)がとても参考になりました。

私の Vim の `.vimrc` に関しては、この記事の最後に書いています。よければご参照ください。


# Vim をより便利にするためのプラグインをインストールする
`.vimrc` に設定を書くことで、Vim がより便利になったと思います。
しかし、まだ VSCodeのようなエディタとはかけ離れた状態にあると思います。
例えば、現状の Vim では画面左端にファイルツリーを表示したり、文字列によるファイル検索を行ったりすることが、簡単にはできません。
そこで、Vim にプラグインを追加し、このような機能を実現します。

## dein.vim で Vim のプラグインを管理する
Vim のプラグインを管理する方法は色々ありますが、この記事では `dein.vim` を用いる方法を紹介します。

### dein.vim のインストール
- 下記のコマンドを実行し、`dein.vim` をインストール
  - `$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh`
  - `$ sh ./installer.sh ~/.cache/dein`

- 下記のコマンドを実行し、`dein.vim` で使用するディレクトリ・ファイルを作成
  - `$ mkdir ~/.vim/dein`
  - `$ touch ~/.vim/dein/toml/dein.toml`
  - `$ touch ~/.vim/dein/toml/dein_lazy.toml`

### .vimrc に dein.vim でプラグイン管理するための設定を書く
```vim: .vimrc
let s:dein_dir = expand('~/.cache/dein')
let s:toml_dir = expand('~/.vim/dein/toml')
let s:toml = s:toml_dir . '/dein.toml'
let s:lazy_toml = s:toml_dir . '/dein_lazy.toml'

set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

call dein#begin(s:dein_dir)

call dein#load_toml(s:toml, {'lazy': 0})
call dein#load_toml(s:lazy_toml, {'lazy': 1})

call dein#end()

if dein#check_install()
  call dein#install()
endif
```

### dein.toml に追加するプラグインを書く
`dein.toml` の記述方法は、[deinでのvimのプラグイン管理の最終形](https://sy-base.com/myrobotics/vim/dein/)が参考になりました。
私の上の設定には、`dein_lazy.toml` に関する記述がありますが、これは遅延ロードによる Vim の起動速度の高速化を行うための設定です。不要であれば、削除しても大丈夫です。
Vim の起動速度が気になりだしたら、触れてみると良いと思います。
私の場合は、今の所 Vim の起動速度は気になっていないので、まだ足を踏み入れていません。

### 便利だと感じたプラグイン
以下は、私が便利だと感じたプラグインです。特に fzf はターミナルからも利用できるのでお勧めです。
- [VimをVSCodeライクにする](https://qiita.com/youichiro/items/b4748b3e96106d25c5bc)で紹介されているプラグイン
  - vim-airline：ステータ表示
  - vim-code-dark：カラースキームをVSCodeライクに
  - fern.vim：ファイルツリーを表示
  - fzf.vim：ファイル検索

- その他
  - 私の [dein.toml](https://github.com/0machi/dotfiles/blob/master/.vim/dein/toml/dein.toml) に記載があるもの


# Vim の設定を Git で管理する
私は 画像のように Vim の設定を `~/dotfiles/.vim` にまとめています。[私の dotfiles](https://github.com/0machi/dotfiles) 。
<img width="200" alt="~/dotfiles/.vim" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242339/8489b69c-ccab-fb45-b727-f1e3faccb25b.png">
また、`.vimrc` に直接設定を書くのではなく、設定ごとに.vimファイルを作成し、それらを `.vimrc` から読み込む構成にしています。
Git で管理するのは `~/dotfiles` 以下です。
`setup.sh` を実行し、画像のように `~/dotfiles/.vim` から `~/.vim` 、`~/.vimrc` などにシンボリックリンクを貼るようにしています。
<img width="200" alt="~/.vim" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242339/964ce886-1f7c-110a-b615-43e9515c408b.png">


# おわりに
この記事では、1週間前に Vim に入門してみた私が、入門する際に参考にした記事、私の Vim の設定ファイル、および設定ファイルの管理方法をメモとして残しました。
私の Vim の設定は [GitHub](https://github.com/0machi/dotfiles) に上げているので、よければご参照ください。
私のようにこれまで nano を使っていた人が、Vim を使い始めるきっかけを作れたら良いなと思います。