# Vim クイックリファレンス

*モード、ナビゲーション、編集、検索、マクロ、バッファ*

> Source: Vim Documentation (vimdoc.sourceforge.net) · MIT

## モード

### モードの切り替え

| Command | Description |
|---------|-------------|
| `i` | 挿入モード（カーソルの前） |
| `a` | 挿入モード（カーソルの後） |
| `o` | 下に行を挿入して挿入モードへ |
| `O` | 上に行を挿入して挿入モードへ |
| `v` | ビジュアルモード（文字） |
| `V` | ビジュアルモード（行） |
| `Ctrl+v` | 矩形ビジュアルモード |
| `:` | コマンドラインモード |
| `R` | 置換モード |
| `Esc` | ノーマルモードに戻る |

## ナビゲーション

### 文字と行の移動

| Command | Description |
|---------|-------------|
| `h j k l` | 左、下、上、右 |
| `0 / ^` | 行頭 / 最初の非空白文字 |
| `$` | 行末 |
| `w / W` | 次の単語 / WORD |
| `b / B` | 前の単語 / WORD |
| `e / E` | 単語 / WORD の末尾 |
| `f{c} / F{c}` | 文字を前方 / 後方に検索 |
| `t{c} / T{c}` | 文字の直前 / 直後まで前方 / 後方に移動 |

### 画面とファイルの移動

| Command | Description |
|---------|-------------|
| `gg / G` | 最初 / 最後の行へ |
| `:{n}` | n 行目へ |
| `Ctrl+d / Ctrl+u` | 半ページ下 / 上 |
| `Ctrl+f / Ctrl+b` | 1 ページ下 / 上 |
| `H / M / L` | 画面の上 / 中 / 下 |
| `%` | 対応する括弧へジャンプ |

## 編集

### 挿入と追記

| Command | Description |
|---------|-------------|
| `I` | 行頭に挿入 |
| `A` | 行末に追記 |
| `ea` | 単語の末尾に追記 |
| `gi` | 最後の挿入位置に挿入 |

### 削除と変更

| Command | Description |
|---------|-------------|
| `x / X` | カーソル下 / 前の文字を削除 |
| `dd` | 行を削除 |
| `dw` | 単語を削除 |
| `d$ / D` | 行末まで削除 |
| `cc / S` | 行全体を変更 |
| `cw` | 単語を変更 |
| `c$ / C` | 行末まで変更 |
| `ci" / ci(` | クォート / 括弧内を変更 |

### コピーと貼り付け

| Command | Description |
|---------|-------------|
| `yy` | 行をヤンク（コピー） |
| `yw` | 単語をヤンク |
| `y$` | 行末までヤンク |
| `p / P` | カーソルの後 / 前に貼り付け |
| `J` | 下の行を現在の行に結合 |

### アンドゥと繰り返し

| Command | Description |
|---------|-------------|
| `u` | アンドゥ |
| `Ctrl+r` | リドゥ |
| `.` | 最後のコマンドを繰り返す |

## 検索と置換

### 検索

| Command | Description |
|---------|-------------|
| `/pattern` | 前方検索 |
| `?pattern` | 後方検索 |
| `n / N` | 次 / 前のマッチへ |
| `*` | カーソル下の単語を前方検索 |
| `#` | カーソル下の単語を後方検索 |

### 置換

```
:s/old/new/       " replace first on line
:s/old/new/g      " replace all on line
:%s/old/new/g     " replace all in file
:%s/old/new/gc    " replace all, confirm each
```

## ビジュアルモード

### 選択

| Command | Description |
|---------|-------------|
| `v` | 文字選択を開始 |
| `V` | 行選択を開始 |
| `Ctrl+v` | 矩形選択を開始 |
| `o` | 選択の反対側の端へ移動 |
| `gv` | 直前のビジュアル選択を再選択 |

### 選択に対するアクション

| Command | Description |
|---------|-------------|
| `d` | 選択を削除 |
| `y` | 選択をヤンク |
| `c` | 選択を変更 |
| `>` | 選択をインデント |
| `<` | 選択のインデントを解除 |
| `~` | 大文字・小文字を切り替え |
| `U / u` | 選択を大文字 / 小文字に |

## バッファとウィンドウ

### バッファ

| Command | Description |
|---------|-------------|
| `:ls` | 開いているバッファを一覧表示 |
| `:bn / :bp` | 次 / 前のバッファ |
| `:b{n}` | バッファ n へ |
| `:bd` | 現在のバッファを閉じる |
| `:e file` | 新しいバッファでファイルを開く |

### ウィンドウ

| Command | Description |
|---------|-------------|
| `:sp file` | 水平分割 |
| `:vsp file` | 垂直分割 |
| `Ctrl+w h/j/k/l` | ウィンドウへ移動 |
| `Ctrl+w =` | ウィンドウサイズを均等化 |
| `Ctrl+w q` | ウィンドウを閉じる |

### タブ

| Command | Description |
|---------|-------------|
| `:tabnew file` | 新しいタブでファイルを開く |
| `gt / gT` | 次 / 前のタブ |
| `:tabclose` | 現在のタブを閉じる |

## レジスタ

### レジスタの使用

| Command | Description |
|---------|-------------|
| `"ay` | レジスタ a にヤンク |
| `"ap` | レジスタ a から貼り付け |
| `"Ay` | レジスタ a にヤンクを追記 |
| `:reg` | すべてのレジスタを表示 |

### 特殊レジスタ

| Command | Description |
|---------|-------------|
| `""` | 無名（最後の削除/ヤンク） |
| `"0` | 最後のヤンク |
| `"+` | システムクリップボード |
| `"/"` | 最後の検索パターン |
| `".` | 最後に挿入したテキスト |
| `"_` | ブラックホール（破棄） |

## マクロ

### 記録と再生

| Command | Description |
|---------|-------------|
| `q{a}` | レジスタ a へのマクロ記録を開始 |
| `q` | 記録を停止 |
| `@{a}` | レジスタ a のマクロを再生 |
| `@@` | 最後のマクロを再実行 |
| `5@a` | マクロ a を 5 回再生 |

### マクロの例

```
qa        " start recording into a
I//       " insert // at line start
Esc j     " return to normal, move down
q         " stop recording
10@a      " comment next 10 lines
```

## 設定

### 一般的なオプション

```
:set number         " show line numbers
:set relativenumber  " relative line numbers
:set tabstop=4      " tab width
:set expandtab      " spaces instead of tabs
:set ignorecase     " case-insensitive search
```

### 表示と動作

```
:set wrap / nowrap   " toggle line wrapping
:set hlsearch        " highlight search matches
:set incsearch       " incremental search
:set cursorline      " highlight current line
:syntax on           " enable syntax highlighting
```

## ファイル操作

### 保存と終了

| Command | Description |
|---------|-------------|
| `:w` | 保存 |
| `:w file` | 名前をつけて保存 |
| `:q` | 終了（未保存ならエラー） |
| `:q!` | 保存せずに終了 |
| `:wq / :x / ZZ` | 保存して終了 |
| `:wa` | すべてのバッファを保存 |
| `:qa` | すべてのバッファを終了 |

### ファイル情報と外部コマンド

| Command | Description |
|---------|-------------|
| `Ctrl+g` | ファイル情報を表示 |
| `:!cmd` | シェルコマンドを実行 |
| `:r !cmd` | コマンドの出力を挿入 |
| `:r file` | ファイルの内容を挿入 |

## テキストオブジェクト

### 内側と周囲のオブジェクト

| Command | Description |
|---------|-------------|
| `iw / aw` | 単語の内側 / 周囲 |
| `is / as` | 文の内側 / 周囲 |
| `ip / ap` | 段落の内側 / 周囲 |
| `i" / a"` | ダブルクォートの内側 / 周囲 |
| `i' / a'` | シングルクォートの内側 / 周囲 |
| `i( / a(` | 括弧の内側 / 周囲 |
| `i{ / a{` | 波括弧の内側 / 周囲 |
| `it / at` | HTML タグの内側 / 周囲 |

### よく使うコンビ

```
ciw     " change inner word
di"     " delete inside quotes
ya{     " yank around braces
vip     " select inner paragraph
```

## マークとジャンプ

### マーク

| Command | Description |
|---------|-------------|
| `m{a}` | カーソル位置にマーク a を設定 |
| `'a` | マーク a の行へジャンプ |
| ``a` | マーク a の正確な位置へジャンプ |
| `:marks` | すべてのマークを一覧表示 |

### ジャンプリスト

| Command | Description |
|---------|-------------|
| `Ctrl+o` | 前の位置へジャンプ |
| `Ctrl+i` | 次の位置へジャンプ |
| `:jumps` | ジャンプリストを表示 |
| `''` | 最後のジャンプ位置へジャンプ |
