【脱初心者】最小限の暗記で効率化するVimコマンド集 -移動×操作 によるVimのコマンド体系

## この記事について
テキストエディタのVimを活用するために、最初に覚えるべきコマンドをまとめました。
**Vimはコマンドが多いので苦手**という人でも、最小限の暗記で使いこなすことが目標です。


整理の観点は、以下の2つです。
1. 法則性を理解してから暗記すべきコマンド
  → **【移動×操作】** という法則で整理しています。
2. 組み合わせで覚えるべきコマンド
    →「**定石**」として、操作の流れを紹介しています。 


なお、本記事は、**【超初心者向け】実務で詰まないためのVim - これだけ覚えればOK！** の続編です。

https://qiita.com/Inclusive_Solutions_LLC/items/2c4b18f1a1f77efa7449

「**Vimってなに？**」、「**Vimは全く触ったことがない**」という人は、まずは上記記事を読んでみてください。


## 移動系操作（カーソル移動・スクロール操作)
Vimのコマンドは大量にあるように見えますが、法則性があります。そのため、闇雲な丸暗記はほぼ不要です。

ポイントは、**【移動×操作】**　という組み合わせで理解することです。丸暗記ではなく、**忘れにくい・忘れかけても思い出せる** 覚え方をしておくと、学習の負担が軽くなります。

まずは移動の概念から。Vimの移動は、**カーソル移動** と、**スクロール移動**の二種類があります。

| 移動の種類 | 左 | 右 | 上 | 下 | 覚え方・備考 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| **1文字ずつ** | `h` | `l` | `k` | `j` | *hjklのキーボードを`←↓↑→`に見立てる* |
| **単語単位** | `b`（前の単語） | `w`（次の単語） | - | - | *単語（word)単位で前に、戻るときは、back(`b`)* |
| **行単位（行頭・行末）** | `0`（行頭） | `$`（行末） | - | - | *語呂合わせ「`0`からはじまり、最後はお金(`$`)」* |
| **画面単位（ページスクロール）** |- | - | `<Ctrl-u>`（半ページ上） | `<Ctrl-d>`（半ページ下） |  *スクロールは`Ctrl`を使う。上（up)が`u`、下（down)が`d`* |
| **ファイル全体（先頭・末尾）** | - | - | `gg`（ファイル先頭） | `G`（ファイル末尾）|*これはそのまま丸暗記* | 

小さな移動（カーソル・単語・行）から順番に覚えて、大きな移動（画面・ファイル全体）という順番で慣れてきましょう。
**これらが使えないと、挿入モード（`:i`）への切り替え → 「カーソルキーー`→`」で一文字ずつの移動**という苦行を毎回の作業で強いられます。

テキストファイルの記述量が多いときほど、**大きな移動**の必要性が高まります。
スクロールは、コントロールキー:`<Ctrl>`もセットにする点を忘れないようにしましょう。

## 操作系コマンド
最低限覚えるべきは、**削除**・**コピー**・**ペースト**・**変更**の4つです。
| 操作の種類 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **削除 (delete)** | `d` | 
| **コピー (yank)** | `y` |
| **ペースト (put)** | `p / P` | *`p`（カーソルの後ろ）、`P`（カーソルの前）* |
| **変更 (change)** | `c` | *指定範囲を削除し、挿入モードに入る。削除 (`d`) + 挿入モード (`:i`)と同じ* |

## 【移動 × 操作】の組み合わせで見えてくる、コマンド操作の広がり
移動と操作の二つを組み合わせることで、複雑な操作も統一的に整理できます。

### 削除系コマンド
| 削除の範囲 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **単語削除（前方向）** | `dw` | *`w`（次の単語へ移動）とセット* |
| **単語削除（後方向）** | `db` | *`b`（前の単語へ移動）とセット* |
| **行削除** | `dd` | *`d`（削除）を2回で「行全体」削除* |
| **カーソルから行頭まで削除** | `d0` | *`0`（行頭）まで削除* |
| **カーソルから行末まで削除** | `d$` | *`$`（行末）まで削除* |
| **カーソル行を含め、先頭まで削除** | `dgg` | *`gg`（先頭へ移動）と組み合わせ* |
| **カーソル行を含め、末尾まで削除** | `dG` | *`G`（末尾へ移動）と組み合わせ* |

### コピー系コマンド
| コピーの範囲 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **1文字コピー** | `yl` | *`y`（ヤンク）+ `l`（右へ移動）で1文字コピー* |
| **単語コピー** | `yw` | *`y`（ヤンク）+ `w`（次の単語）で単語コピー* |
| **行コピー** | `yy` | *`y`（ヤンク）を2回で「行全体」コピー* |
| **カーソルから行頭までコピー** | `y0` | *`0`（行頭）までコピー* |
| **カーソルから行末までコピー** | `y$` | *`$`（行末）までコピー* |
| **カーソル行を含め、先頭までコピー** | `ygg` | *`gg`（先頭へ移動）と組み合わせ* |
| **カーソル行を含め、末尾までコピー** | `yG` | *`G`（末尾へ移動）と組み合わせ* |

### 変更系コマンド
| 変更の範囲 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **単語変更（前方向）** | `cw` | `w`（次の単語へ移動）とセット |
| **単語変更（後方向）** | `cb` | `b`（前の単語へ移動）とセット |
| **行変更** | `cc` | `c`（変更）を2回で「行全体」変更 |
| **カーソルから行頭まで変更** | `c0` | `0`（行頭）まで変更 |
| **カーソルから行末まで変更** | `c$` | `$`（行末）まで変更 |
| **カーソル行を含め、先頭まで変更** | `cgg` | `gg`（先頭へ移動）と組み合わせ |
| **カーソル行を含め、末尾まで変更** | `cG` | `G`（末尾へ移動）と組み合わせ |

### ポイント・注意点
**操作＋移動**という順番でコマンドを組み合わせましょう。
操作コマンドを組み合わせると、**行全体**という移動範囲になります。（dd,yyなど。）

## 流れで覚えたほうがいいコマンド「定石」集
実務のユースケースに即してまとめるなら、以下の感じ。
複雑なコマンドの組み合わせも、**【移動×操作】** の概念を頭に入れておけば、丸暗記の苦痛が緩和されます。

| 操作内容 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **同じ単語を何回もコピペ** | `yw` → `P` | *`yw`（単語コピー）→ `P`（カーソル前にペースト）で増殖* |
| **1行を複製（コピー＆ペースト）** | `yy` → `p` | *`yy`（行コピー）→ `p`（次の行にペースト）* |
| **カット＆ペースト（行の移動）** | `dd` → `p` / `P` | *`dd`（行削除）→ `p`（次の行に貼る）or `P`（前の行に貼る）* |
| **ファイルのすべてをコピー** | `ggVGy` | *`gg`（先頭へ移動）+ `V`（ビジュアルモード）+ `G`（末尾へ移動）+ `y`（コピー）* |
| **ファイルのすべてを削除** | `ggdG` | *`gg`（先頭へ移動）+ `dG`（末尾まで削除）* |


## 追加で、個別に覚えるべきコマンドも少しだけ
以下も頻出です。
【移動×操作】の法則からは漏れますが、これらは覚えるしかありません。
| 操作内容 | コマンド | 覚え方・備考 |
| ---- | ---- | ---- |
| **直前の操作を繰り返す** | `.` | *直前に行った操作（削除・ペースト・置換など）をもう一度実行。例: `yy`（行コピー）→ `p`（ペースト）→ `.` を押せば、さらに同じ行が複製される。* |
| **1文字削除** | `x` | *`x` はカーソル位置の1文字を削除（Backspace 的な使い方）。`3x` で3文字削除も可能。* |

## 結局、どうやって慣れていくのがいいか？
洗練されたVimの操作に慣れて、使いこなせるようになるには、**時間をかけて繰り返し使ってみて、使い込んでいくことが重要**だと思います。

### 挿入モード(`:i`への依存を減らそう)
カーソル移動で、挿入モード(`:i`)→カーソルキー（`↑↓→←`）という組み合わせに頼ることをやめましょう。これだと一文字ずつの移動になり、作業が非効率になります。日々の作業で極力コマンドモードを使い、

- 単語(`w`)・行頭(`0`)・行末(`$`)などといった単位で、まとめて移動する
- ファイルの先頭(`gg`)・ファイルの末尾(`G`)・スクロール(`<Ctrl-d>`)などの、大きな移動を活用する

ことを意識するのがコツです。
### 自分の作業でよく出てくる「定石」を探そう
順番は気にせず、試したいものから試しましょう。また、本記事で紹介した定石（=コマンドの組み合わせ）は、あくまで一例です。

たとえば、テキストの一括編集や文字の検索置換が必要な場面では、Vimは圧倒的に早くて便利だと思います。

https://qiita.com/Inclusive_Solutions_LLC/items/ad0dc0f96383e52d87d8

コマンド操作だけでシステマチックに作業が進む快適さを、上記記事では解説しています。

**自分の作業を振り返って、繰り返し行っている作業があれば、コマンド操作に落とし込みましょう。** それがあなたにとっての「定石」になります。

## まとめ・筆者から一言
本記事では、**【移動×操作】** の概念を中心に据えて、Vimコマンドの体系的な整理を試みました。

※Vimの基本操作には検索・置換など、ほかにも大事なテクニックがあると思いますが、本記事からは除外しました。

ほかにも、ややこしい（数が多い）Vimのコマンドの楽な覚え方を知っている人がいたら、コメントください。