Vimの1文字コマンドをまとめてみる (アルファベット編)

# 概要

このページは、Vimの1文字で操作内容が決まるコマンドをフォーカスしてまとめたページです。

**次ページ：記号・特殊キー・Ctrl編**
[Vimの1文字コマンドをまとめてみる (記号・特殊キー・Ctrl編)](http://qiita.com/jader/items/e069165d218b0edac854)

よくあるコマンドの紹介方法として「カーソル操作・編集操作」のようなカテゴリ別があります。基本的な操作の習得に対して優れている一方で、基本的ではないちょっと便利なコマンドなどは紹介されにくいです。
また、その次のステップとして 公式help が紹介されることもあるが、分量が非常に多いため読み切るのは辛いです。

この2つのステップのギャップを少しでも埋めるため、1文字コマンドにフォーカスしたページがあったら便利かなと思い作成しました。
1文字コマンドを選んだ理由は、おそらく重要なコマンドほど少ないタイプ数で打てるように割り当てられているだろうという予測から。

# 1文字コマンドの定義

1文字目で操作内容が決定するようなコマンドを1文字コマンドとする。
具体的には、次のどちらかの条件を満たすコマンドのことを指す。

* 1文字で完結するコマンド (a, A, CTRL-A, $, 0, <Space>など)
* 公式helpに 1文字+{***} で載っているコマンド (c{motion}, f{char}, 
m{A-Za-z}など)

このページでは、**ノーマルモードでアルファベットから始まる1文字コマンド**をまとめる。

# 予備知識
* {motion}: カーソル移動系のコマンドを表す。具体的には、表内で**太字**で示されているコマンド (hjkl...) などを表す
* {char}: 任意の1文字を表す
* word単位: vimにおける"word"。空白に加えて、数字やアンダースコア (_)も単語の区切りとする。詳細は``` :help word```参照
* WORD単位: vimにおける"WORD"。空白のみを単語の区切りとする単位。詳細は``` :help WORD```参照

# ノーマルモード：アルファベット小文字編

**太字**で示したコマンドは {motion} に対応するコマンドである。
説明に [buffer] のあるコマンドは、コマンドの前に```"x```のようにregisterを指定することができる。

| コマンド | 説明 |
|:--|:--|
| a | カーソルの後ろにテキストを追加 |
| **b** |  word単位でカーソルを前へ移動。カーソル位置は先頭文字に合わせる |
| c{motion} |   {motion}で指定したテキストを削除した後、挿入モード [buffer] |
| d{motion} |   {motion}で指定したテキストを削除 [buffer] |
| **e** |  word単位でカーソルを後ろへ移動。カーソル位置は末尾文字に合わせる |
| **f{char}** |  カーソル位置から右方向にある次の{char}へカーソルを移動 |
| **h** |  カーソルを左へ移動 |
| i |  カーソルの前にテキストを追加 |
| **j** |  カーソルを下へ移動 |
| **k** |  カーソルを上へ移動 |
| **l** |  カーソルを右へ移動 |
| m{A-Za-z} |  カーソル位置を記録 |
| **n** |  最後に行った検索 (```/``` or ```?```コマンド)を再実行 |
| o |  カレント行の下に新しい行を挿入し、テキストを追加 |
| p |  カーソルの後ろにregister内のテキストを貼り付ける[buffer] |
| q{0-9a-zA-Z"} |  文字の入力をregisterに記録 (記録中の場合は、記録を停止) |
| r{char} |  カーソル下の文字を{char}に置換。{char}には\<CR>も指定可能 |
| s |  カーソル下の文字を削除し、挿入モード。```cl```で代用可能 [buffer] |
| **t{char}** |  カーソル位置から右方向にある次の{char}の1文字前へカーソルを移動 |
| u |  アンドゥ |
| v |  Visualモード |
| **w** |  word単位でカーソルを後ろへ移動。カーソル位置は先頭文字に合わせる |
| x |  カーソル下の文字を削除 [buffer] |
| y{motion} |  {motion}で指定したテキストをヤンク [buffer] |

※ 1文字コマンドが存在しないアルファベット
g: extended commandに続く
z: z commandに続く

# ノーマルモード：アルファベット大文字編

太字で示したコマンドは {motion} に対応するコマンドである。
説明に [buffer] のあるコマンドは、コマンドの前に```"x```のようにregisterを指定することができる。

| コマンド | 説明 |
|:--|:--|
| A | カレント行の行末にテキストを追加 |
| **B** | WORD単位でカーソルを前へ移動。カーソル位置は先頭文字に合わせる |
| C | カーソル下から行末までを削除した後、Insertモード。```c$```で代用可能 [buffer] |
| D | カーソル下から行末までを削除。```d$```で代用可能 [buffer] |
| **E** | WORD単位でカーソルを後ろへ移動。カーソル位置は末尾文字に合わせる |
| **F{char}** | カーソル位置から左方向にある次の{char}へカーソルを移動 |
| **G** | カーソルをファイルの最終行の行頭へ移動 |
| **H** | カーソルをスクリーンの先頭行の行頭へ移動 |
| I | カレント行の行頭にテキストを追加 |
| J | カレント行とその次の行を連結。なお、連結される行に含まれるインデントは削除される |
| K | カーソル下の単語を調べるためにプログラムを実行。デフォルトでは ```:!man キーワード``` と同一 |
| **L** | カーソルをスクリーンの最終行の行頭へ移動 |
| **M** | カーソルをスクリーンの中央行の行頭へ移動 |
| **N** | 最後に行った検索 (```/``` or ```?```コマンド)を前回と反対方向に再実行 |
| O | カレント行の上に新しい行を挿入し、テキストを追加 |
| P | カーソルの前にregister内のテキストを貼り付ける[buffer] |
| Q | Exモードに切り替える |
| R | Replaceモードに切り替える |
| S | カレント行のテキストを全て削除し、Insertモード。```cc```で代用可能 [buffer] |
| **T{char}** | カーソル位置から左方向にある次の{char}の1文字後ろへカーソルを移動 |
| U | カレント行における最新の変更を全てアンドゥ |
| V | linewise Visualモード |
| **W** | WORD単位でカーソルを後ろへ移動。カーソル位置は先頭文字に合わせる |
| X | カーソル下の1文字前を削除 [buffer] |
| Y | カレント行のテキストをヤンク。```yy```で代用可能 [buffer] |

※ 1文字コマンドが存在しないアルファベット
Z: 単体ではなし (2文字ではZZ, ZQ)

# 動作がわかりにくい 数字+小文字1文字コマンド

コマンドの前に数字を加えることで、繰り返し回数や行数の指定できる。
しかし、その結果がわかりにくいコマンドがいくつかあるため、ここではそのコマンドをまとめる。
なおここでは、コマンド前に付与した数字を N とする。

### 数字をつけても操作内容が変化しないコマンド

* M : カーソルをスクリーンの中央行の行頭へ移動
* Q : Exモードに切り替える

### a : カーソルの後ろにテキストを追加
挿入モードで入力した文字列をN回繰り返して追加する

カーソル下の文字：```!```
コマンド：```3ahello<ESC>```
↓
```!hellohellohello```

### i : カーソルの前にテキストを追加
挿入モードで入力した文字列をN回繰り返して追加する

カーソル下の文字：```!```
コマンド：```3ihello<ESC>```
↓
```hellohellohello!```

### A : カレント行の行末にテキストを追加
挿入モードで入力した文字列をN回繰り返して追加する

カレント行：```hello```
コマンド：```3A!?<ESC>```
↓
```hello!?!?!?```

### I : カレント行の行頭にテキストを追加
挿入モードで入力した文字列をN回繰り返して追加する

カレント行：```hello```
コマンド：```3I><ESC>```
↓
```>>>hello```

### o : カレント行の下に新しい行を挿入し、テキストを追加
挿入モードで入力した文字列をN回、改行を含めて繰り返して追加する

カレント行：```---```
コマンド：```3ohello<ESC>```
↓
```---
hello
hello
hello
```

### O : カレント行の上に新しい行を挿入し、テキストを追加
挿入モードで入力した文字列をN回、改行を含めて繰り返して追加する

カレント行：```---```
コマンド：```3Ohello<ESC>```
↓
```hello
hello
hello
---```

### C : カーソル下から行末までを削除した後、Insertモード
カレント行のN行下の文末まで削除される

カーソル下の文字：
```The quick brown
fox jumps
over the lazy dog```の```b```
コマンド：```2C```
↓
```The quick 
over the lazy dog
```

### D : カーソル下から行末までを削除
コマンド```C```と同様

### G : カーソルをファイルの最終行の行頭へ移動
ファイルの先頭 から N行目 へ移動する

コマンド：```3G``` → ファイルの先頭行 から 3行下の行頭 へ移動。```3gg```と同一

### H : カーソルをスクリーンの先頭行の行頭へ移動
スクリーンの先頭 から N行目 へ移動する

コマンド：```5H``` → スクリーンの先頭行 から 5行下の行頭 へ移動

### L : カーソルをスクリーンの最終行の行頭へ移動
スクリーンの最終行 から N行目 へ移動する

コマンド：```5L``` → スクリーンの最終行 から 5行上の行頭 へ移動


### r{char} : カーソル下の文字を{char}に置換。{char}には\<CR>も指定可能
N文字連続で置換する。ただし、\<CR>のときは数字によらず1行改行となる

カーソル下の文字：```hello```の```h```
コマンド：```3rx```
↓
```xxxlo```

カーソル下の文字：```hello```の```e```
コマンド：```3r<Enter>```
↓
```h
o
```

### R : Replaceモードに切り替える
Replaceモードで入力した文字列をN回繰り返して置換する

カーソル下の文字：```abcdefgh ```の```b```
コマンド：```3Rxx<ESC>```
↓
```axxxxxxh```

# 最後に

より正確な情報は ```:help コマンド``` or ```:h コマンド``` で確認してください。
間違い・誤解を招く表現・追加すべきコマンド がある場合は、ご指摘 or 編集リクエスト していただけると幸いです。