Dockerを使って気軽にVimに触れてみる

Vimをやってみようと思ってもどこから始めたらいいのかよくわからない方もいらっしゃるかもしれません。

Vimの使い手は皆それぞれ設定を工夫して俺俺のやり方でやっているようです。まずは、誰かの設定ファイルを拝借して形から入ってみてもいいんじゃないかと考えています。

Dockerを使えば仮想マシン上でいろんな方々の設定ファイルを試してみることができますし、また失敗を気にせずに気軽にVimを楽しむことができます。

## 目標

- Vimをあまり使ったことがない人が、Dockerコンテナのなかで安心してVimを楽しめるようにする。
- 人の設定ファイルを拝借してどんなことをやってるのか試してみる。

## 要件

多分Dockerさえインストールされていれば大丈夫と思います。

```bash
$ which docker
/usr/local/bin/docker

$ docker --version
Docker version 20.10.22, build 3a2c30b
```

手元の環境
- Apple M1 Pro
- macOS 12.6
- Docker 20.10.22
- [iterm2](https://iterm2.com/)

もちろん自信のある方はDockerなしでご自身のPCに直接Vimをインストールして設定をしても大丈夫です。

## .vimrc ファイル

Vimは何も設定しなくても使えるのですが、ほとんどの人が設定ファイルを作って自分の開発スタイルに適した環境を作っているようです。また、見た目や機能がかっこいいとそれがVimを使うモチベーションにもなります。

一番簡単な方法は `~/.vimrc` ファイルを作りそこに設定を記述することです。

大きく分けて3つのことを記述します。

- 利用したいプラグイン（第三者コード）
- Vimの設定
- 俺俺キーマップ（ショートカット）

## Vim script

[Vim](https://ja.wikipedia.org/wiki/Vim)に組み込まれた[スクリプト言語](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E)です。`~/.vimrc` ファイルは基本的に[Vim script](https://ja.wikipedia.org/wiki/Vim_script)で書くのですが、Vim9から新しい言語[Vim9script](https://www-vim-org.translate.goog/vim90.php?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=en&_x_tr_pto=wapp)が導入されたようなので今後どうなるのかは不明です。また、[Neovim](https://neovim.io/)では[Lua](https://ja.wikipedia.org/wiki/Lua)が使用されることが多いようです。

## Ubuntuコンテナを起動

PCのターミナルから以下のコマンドで[Ubuntu](https://ja.wikipedia.org/wiki/Ubuntu)コンテナを起動します。`docker run`コマンドにオプションをつけて仮想端末で対話できる(`-it`)使い捨てのコンテナ(`--rm`)にしてます。

```bash
docker run -it --rm ubuntu bash
```

起動コマンドが`bash`なので、起動後すぐに`bash`のシェルが開きます。

`cd`を打ちホームディレクトリに入ります。

```bash
cd
```

`pwd`を打ち、現行ディレクトリが`/root`であることを確認してください。

```bash
pwd 
```

![CleanShot 2023-02-19 at 13.58.40@2x.png](https://user-images.githubusercontent.com/7563926/219974993-5cf74951-7e77-42ce-a2ae-be19bcd25903.png)

## パッケージをインストール

[Ubuntu](https://ja.wikipedia.org/wiki/Ubuntu)コンテナの中で最低限必要なパッケージをゲットします。

- `vim`
- `curl` - ファイルをウエブからダウンロードするため
- `git` - `git clone` コマンドでコードをGithubからダウンロードするため

```bash
apt update
apt install curl git vim
```

![](https://user-images.githubusercontent.com/7563926/219975002-3b424efb-7ca3-4995-be72-effc55c083b2.gif)

## 何かコードをダウンロード

ホームディレクトリが空では寂しいのでなにかを`git clone`すると良いと思います。

```bash
ls -al
```

![CleanShot_2023-02-19_at_14.13.352x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82804/23640e30-7ef0-be8e-546f-2c565c97d39e.png)

ここでは闘魂プロジェクト（[TORIFUKUKaiou/toukon](https://github.com/TORIFUKUKaiou/toukon)）をダウンロードします。

```bash
git clone https://github.com/TORIFUKUKaiou/toukon
```

https://note.com/awesomey/n/n4d8c355bc8f7

## 初期設定のVimで遊んでみる

`vim`コマンドを打ちVimを起動します。ファイル名を指定するとそれが起点となります。ここでは`.`（現行ディレクトリ）を指定しています。

```bash
vim .
```

![CleanShot 2023-02-19 at 14.22.08@2x.png](https://user-images.githubusercontent.com/7563926/219975036-6988f2a7-0c8e-4b9c-92b5-1ad881314090.gif)

設定を何もしていないので、初期設定のVimが起動します。これでも色々遊べると思います。

失敗したと思ったら、[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)を押して`u`(undo)を打つと元に戻せるので安心してください。`u`の逆は`Ctrl-r`(redo)です。

[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)を押して、`:q`を打つとVimから抜け出せます。

ファイルに変更があった場合は`:q!`で強制終了するか`:wq`で保存してから終了するかの2択になります。

余談ですが、なぜ[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)を押すかというとVimにはモードが複数ありまして、[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)を押すとNORMALモードに戻れるからなんです。既にNORMALモードにいる場合は[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)を押さなくてもいいです。`Ctrl-c`でも[Escキー](https://ja.wikipedia.org/wiki/Esc%E3%82%AD%E3%83%BC)と同じことができます。`Ctrl-c`の方が押しやすいかもしれません。

`:Ex`（`:Explore`の短縮形）コマンドを打つとプロジェクト内のファイルのリストを表示することができます。

Vimにはバッファーとよばれるメモリー内に読み込まれたファイルが管理されていましてそれらを行ったりきたりすることができます。簡単なやり方は`Ctrl-o`と`Ctrl-i`です。試しに遊んでみてください。

文章を編集するテクニックについてはあえてここ詳しくは触れませんが、いろんな技があり楽しいのでぜひ開拓してみてください。

一例として、カーソルを数字の上に置き増減させる技です。

- `Ctrl-a` でふやす
- `Ctrl-x` でへらす

## 誰かの設定ファイルを拝借する

ここでは一例として自分の[.vimrc](https://github.com/mnishiguchi/dotfiles/blob/main/vimrc)を使います。ネット上で多くの人がVimの設定を公開されています。

https://github.com/search?l=Vim+Script&q=vimrc&type=Repositories

GithubのオンラインサイトのRawボタンを押すと、設定ファイルのURLが取得できます。

![CleanShot 2023-02-19 at 10.15.40.png](https://user-images.githubusercontent.com/7563926/219974987-4e4cf298-14fd-41ba-98a1-9152c9405efc.png)

URLの例：[https://raw.githubusercontent.com/mnishiguchi/dotfiles/main/vimrc](https://raw.githubusercontent.com/mnishiguchi/dotfiles/main/vimrc)

設定ファイルのURLを取得できたら、それをUbuntuコンテナ内でダウンロードします。

以下のスクリプトは`~/.vimrc`を上書きするので自分の`~/.vimrc`が既にある場合は使用しないように注意してください。新しく起動したUbuntuコンテナ内で使用するのが前提です。

```bash
SRC=https://raw.githubusercontent.com/mnishiguchi/dotfiles/659ac43fd5a0fcf049622342e03a441d189cc9e7/vimrc
curl --output ~/.vimrc --location "$SRC"
```

## Vimのプラグインマネージャ

たいていの人はVimのプラグインマネージャを利用してVimのプラグインを利用しています。世の中にはたくさんのプラグインマネージャがあるのでどれが使用されているのかを把握する必要があります。また、手順はプラグインマネージャにより異なると思われます。とはいってもプラグインのインストールを便利にするためのツールなのでどのプラグインマネージャでも簡単に使えるはずです。

https://qiita.com/nil2/items/ddcf23f1163d0abd805b

今回使う設定ファイルではプラグインマネージャとして[Jetpack.vim]が使われているのでそれを[取扱説明書](https://github.com/tani/vim-jetpack#installation)に沿ってインストールします。

[Jetpack.vim]: https://github.com/tani/vim-jetpack

```bash
curl -fLo ~/.vim/pack/jetpack/opt/vim-jetpack/plugin/jetpack.vim --create-dirs https://raw.githubusercontent.com/tani/vim-jetpack/master/plugin/jetpack.vim
```

Vimを起動します。

```bash
vim .
```

プラグインが何もインストールされていない状態なのでエラーが出ることがありますが、この時点では気にしなくても良いです。迷わずENTERを押してください。

```bash
Error detected while processing /root/.vimrc:
line   64:
E185: Cannot find color scheme 'molokai'
Press ENTER or type command to continue
```

プラグインをインストールする方法はプラグインマネージャにより異なります。

Jetpack.vimの[取扱説明書](https://github.com/tani/vim-jetpack#commands)によると `:JetpackSync`を打つと設定ファイルに記述されたプラグインがインストールされるそうなのでそのコマンドをVim起動後に打ちます。

![](https://user-images.githubusercontent.com/7563926/221374043-09c9b3ad-c879-4ac0-ad15-f96abc673c70.gif)

一旦Vimを閉じて再度起動すると見た目が変わっていると思います。


## 設定適用後のVimで遊ぶ

![](https://user-images.githubusercontent.com/7563926/219976534-773fddfd-f9ae-44e5-bf5d-41d17587cdd8.gif)

初期設定でも使いこなせるようキーマップ（ショートカット）は最小限にしています。いろんな人のをみて、いいなと思ったのを残しました。

スペースキーをリーダーキー（俺俺コマンドを打つ前に打つもの）としました。例として二、三上げると

- `space p v` - project view（プロジェクトのファイル一覧）
- `space p f` - project find (プロジェクト内を検索)
- `space .` - `~/.vimrc`を開く

個人的にはあまり細かいことにこだわると時間が燃えてしまうし、使わない設定をしても意味がないので、少しずつ設定事項を増やしていくのが得策と感じました。

## 設定を変更してVimで遊ぶ

世の中には無数の設定のアイデアがあるので、楽しんでみてください。

![](https://user-images.githubusercontent.com/7563926/219990874-0e18b6eb-ee65-40ef-b817-b79c39628142.gif)

Advent Calendar 2022完走賞をいただきました。ありがとうございます。

https://qiita.com/torifukukaiou/items/17d55cf896c24b13350e

https://qiita.com/torifukukaiou/items/57a40119c9eefd056cae

![20230216_133626.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82804/dc1ddba7-ab4c-5e20-1331-143c842be143.jpeg)

本記事は以下のモクモク会での成果です。みなさんから刺激と元氣をいただき、ありがとうございました。

https://okazakirin-beam.connpass.com/

https://autoracex.connpass.com

https://youtu.be/c0LP23SM7BU

## トラブルシューティング

### 色が変

マック標準のターミナルの中のUbuntuコンテナでやると色が変になる現象が起こると読者から寄せられました。@torifukukaiou さんありがとうございます。

原因はよく分かりません。:sweat_smile:

![CleanShot 2023-02-20 at 07.14.49@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82804/ed5e1262-f397-70c1-9124-c82d6bae6ebb.png)

### vim起動時にエラー

プラグインがインストールされていない状態でプラグイン関連のスクリプトが走るのが原因かもしれません。設定ファイルのよくわからない部分をコメントアウトしたり削除したりして小さく始めるのがいいかもしれません。興味のあるプラグインはあとからいつでも追加できます。

## Neovimに挑戦したい

Neovimに挑戦したい方にはこれらがおすすめです。

https://zenn.dev/koga1020/articles/6155ec679f9668

https://github.com/nvim-lua/kickstart.nvim

https://youtu.be/stqUbv-5u2s

https://github.com/ThePrimeagen/init.lua

https://youtu.be/w7i4amO_zaE