vi（vim）コマンドメモ

# 1. 起動

ファイルを指定して起動

```
vi <ファイル名> 
```

複数ファイルを指定して起動

```
vi <ファイル名1> <ファイル名2> … <ファイル名n>
```

複数のファイルを指定してタブで分割して起動

```
vi -p <ファイル名1> <ファイル名2> … <ファイル名n>
```

読み込み専用で起動

```
vi -R <ファイル名> 
```

```
view <ファイル名> 
```

初期カーソル位置を最後の行にして起動

```
vi + <ファイル名> 
```

初期カーソル位置を指定行にして起動

```
vi +行数 <ファイル名> 
```

初期カーソル位置を文字列が最初に見つかった行にして起動

```
vi +/文字列 <ファイル名>
```

リカバリモードで起動（スワップファイルを起動）

```
vi -r <ファイル名>
```

# 2. 複数ファイルを開いたときのファイルの移動

|コマンド|短縮コマンド|内容|
|:------|:-----------|:---|
|:next|:n|次のファイルへ移動|
|:next!|:n!|次のファイルへ強制的に移動|
|:wnext|:wn|現在のファイルを保存して次のファイルへ移動|
|:previous|:prev|前のファイルへ移動|
|:previous!|:prev!|前のファイルへ強制的に移動|
|:wprevious|:wp|現在のファイルを保存して前のファイルへ移動|
|:first|:fir|先頭のファイルへ移動|
|:first!|:fir!|先頭のファイルへ強制的に移動|
|:last|:la|最後尾のファイルへ移動|
|:last!|:la!|最後尾のファイルへ強制的に移動|
|:rew|-|先頭のファイルへ移動|
|:rew!|-|先頭のファイルへ強制的に移動|
|:rewind|-|現在のファイルを保存して先頭のファイルへ移動|
|:rewind!|-|現在のファイルを保存せず先頭のファイルへ移動|
|:e#|-|直前の編集ファイルへ戻る|
|:arg|-|編集中のファイルとファイルの一覧を確認|

# 3. カーソル移動

|コマンド１|コマンド２|コマンド３|内容|
|:------|:-------|:------|:----|
|h|←|[BackSpace]|左へ移動 [n有効]|
|j|↓|[Ctrl]+ n|下へ移動 [n有効]|
|k|↑|[Ctrl]+ p|上へ移動|
|l|→|[Space]|右へ移動|
|[数字]h|[数字]←|[数字][BackSpace]|数字分左へ移動|
|[数字]j|[数字]↓|[数字][Ctrl]+ n|数字分下へ移動|
|[数字]k|[数字]↑|[数字][Ctrl]+ p|数字分上へ移動|
|[数字]l|[数字]→|[数字][Space]|数字分右へ移動|

|コマンド|内容|
|:------|:----|
|^|現在行の行頭の空白を飛ばした先頭文字列に移動|
|0|現在行の行頭に移動|
|$|現在行の行末に移動|
|G|ファイルの最終行へ移動|
|gg|ファイルの先頭行へ移動|
|+|次行頭の空白を飛ばした先頭文字列に移動|
|-|前行頭の空白を飛ばした先頭文字列に移動|
|[Enter]|次行の先頭位置へ移動|
|[数字]$|(数字-1)行下の行末に移動|
|[数字]G|(数字)行の行頭に移動|
|[数字]+|(数字)行下の空白を飛ばした先頭文字列に移動|
|[数字]-|(数字)行上の空白を飛ばした先頭文字列に移動|
|[数字][Enter]|(数字)行下の行頭へ移動|
|:[数字]|(数字)行へ移動|

|コマンド|内容|
|:------|:----|
|w|1ワード次へ移動|
|b|1ワード前へ移動|
|e|単語の末尾へ移動（すでに単語末尾なら次の単語の末尾へ）|
|[数字]w|(数字)word分次へ移動|
|[数字]b|(数字)word分前へ移動|
|[数字]e|(数字)word分次の単語の末尾へ移動|

|コマンド|内容|
|:------|:----|
|(|文頭（ブロック単位）に移動|
|)|次文頭（ブロック単位）に移動|
|{|前段落に移動|
|}|次段落に移動|


# 4. 画面移動

|コマンド|内容|
|:------|:----|
|H|カーソルを画面先頭へ移動|
|M|カーソルを画面中央へ移動|
|L|カーソルを画面最終行へ移動|
|[Ctrl] + D|カーソルを1/2画面下へ移動|
|[Ctrl] + U|カーソルを1/2画面上へ移動|
|[Ctrl] + F|カーソルを1画面下へ移動|
|[Ctrl] + B|カーソルを1画面上へ移動|
|[数字]H|カーソルを画面先頭から(数字)行目へ移動|
|[数字]L|カーソルを画面最終行から(数字)行目へ移動|
|[数字][Ctrl] + D|カーソルを(数字)行下へ移動|
|[数字][Ctrl] + U|カーソルを(数字)行上へ移動|
|[数字][Ctrl] + F|カーソルを(数字)画面下へ移動|
|[数字][Ctrl] + B|カーソルを(数字)画面上へ移動|
|z[Enter]|現在のカーソル位置が画面のトップになるようにスクロール|
|zz|現在のカーソル位置が画面の中央になるようにスクロール|
	
# 5. INSERTの入力モードへ移行

|コマンド|内容|
|:------|:----|
|i|カーソルの左から入力開始|
|I|行頭から入力開始|
|a|カーソルの右から入力開始|
|A|行末から入力開始|
|o|カーソル行の下に空行を挿入し、その行頭から入力開始|
|O|カーソル行の上に空行を挿入し、その行頭から入力開始|

# 6. REPLACEの入力モードへ移行

|コマンド|内容|
|:------|:----|
|R|カーソルから上書きで入力開始|

# 7. 文字を削除してINSERTの入力モードへ移行

|コマンド|内容|
|:------|:----|
|s|カーソル位置の一文字を削除して入力開始|
|S|カーソル位置の行を削除して入力開始|

+ `2s`のように先頭に数字を入力することで、「カーソル位置の二文字を削除して入力開始」のように、数字分の動作をさせることができます。

|コマンド|内容|
|:------|:----|
|cl|カーソル位置の一文字を削除して入力開始|
|cc|カーソル位置の行を削除して入力開始|
|c^|カーソル位置の直前から行頭の空白を飛ばした先頭文字列まで削除して入力開始|
|c0|カーソル位置の直前から行頭まで削除して入力開始|
|c$|カーソル位置から行末まで削除して入力開始|
|cG|カーソル位置の行から文末まで削除して入力開始|
|cw|カーソル位置から次ワードの直前まで削除して入力開始|
|cb|カーソル位置からワードの先頭まで削除して入力開始|
|ce|カーソル位置からワードの最後まで削除して入力開始|
|cW|カーソル位置から区切り文字を飛ばして次ワードの直前まで削除して入力開始|

+ コマンドの2文字目はカーソル移動のコマンドを使用できます。（上記以外にも組み合わせでいろいろできます。）
また、`2cw`のように先頭に数字を入力することで、「カーソル位置から2つ先のワードの直前まで削除して入力開始」のように、数字分の動作をさせることができます。

# 8. コマンドモードへ移行

|コマンド|内容|
|:------|:----|
|[Esc]|コマンドモードへ移行|

# 9. 削除

|コマンド|内容|
|:------|:----|
|x|カーソル位置の一文字を削除|
|dl|カーソル位置の一文字を削除|
|dd|カーソル位置の行を削除|
|d^|カーソル位置の直前から行頭の空白を飛ばした先頭文字列まで削除|
|d0|カーソル位置の直前から行頭まで削除|
|d$|カーソル位置から行末まで削除|
|dG|カーソル位置の行から文末まで削除|
|dw|カーソル位置から次ワードの直前まで削除|
|db|カーソル位置からワードの先頭まで削除|
|de|カーソル位置からワードの最後まで削除|
|dW|カーソル位置から区切り文字を飛ばして次ワードの直前まで削除|

+ コマンドの2文字目はカーソル移動のコマンドを使用できます。（上記以外にも組み合わせでいろいろできます。）
また、`2dw`のように先頭に数字を入力することで、「カーソル位置から2つ先のワードの直前まで削除」のように、数字分の動作をさせることができます。

# 10. コピー

|コマンド|内容|
|:------|:----|
|yl|カーソル位置の一文字をコピー|
|yy|カーソル位置の行をコピー|
|y^|カーソル位置の直前から行頭の空白を飛ばした先頭文字列までコピー|
|y0|カーソル位置の直前から行頭までコピー|
|y$|カーソル位置から行末までコピー|
|yG|カーソル位置の行から文末までコピー|
|yw|カーソル位置から次ワードの直前までコピー|
|yb|カーソル位置からワードの先頭までコピー|
|ye|カーソル位置からワードの最後までコピー|
|yW|カーソル位置から区切り文字を飛ばして次ワードの直前までコピー|

+ コマンドの2文字目はカーソル移動のコマンドを使用できます。（上記以外にも組み合わせでいろいろできます。）
また、`2yw`のように先頭に数字を入力することで、「カーソル位置から2つ先のワードの直前までコピー」のように、数字分の動作をさせることができます。

# 11. ペースト

|コマンド|内容|
|:------|:----|
|p|コピーした内容をカーソルの後にペースト|
|P|コピーした内容をカーソルの前にペースト|

# 12. undoとredo

|コマンド|内容|
|:------|:----|
|u|undo（直前の編集作業の取り消し）|
|[Ctrl] + r|redo（undoの取り消し）|

# 13. 検索

|コマンド|内容|
|:------|:----|
|/文字列 + [Enter]|カーソルの後方に文字列を検索|
|?文字列 + [Enter]|カーソルの前方に文字列を検索|
|n|次の検索該当文字列へ移動|
|N|前の検索該当文字列へ移動|
|/ + [Enter]|次の検索該当文字列へ移動|
|? + [Enter]|前の検索該当文字列へ移動|

# 14. 置換

|コマンド|内容|
|:------|:----|
|r[文字]|カーソルの1文字を入力した文字に置換|
|[数字]r|カーソルから数字分の文字を入力した文字で置換|

|コマンド|内容|
|:------|:----|
|:s/文字列1/文字列2/[Enter]|カーソル行の最初の「文字列1」のみを「文字列2」に置換|
|:s/文字列1/文字列2/g[Enter]|カーソル行の「文字列1」を全て「文字列2」に置換|
|:s/文字列1/文字列2/c[Enter]|カーソル行の最初の「文字列1」を「文字列2」に置換（確認有り）|
|:[行数]s/文字列1/文字列2/[Enter]|指定行で最初の「文字列1」のみを「文字列2」に置換|
|:[行数]s/文字列1/文字列2/g[Enter]|指定行で「文字列1」を全て「文字列2」に置換|
|:%s/文字列1/文字列2/g[Enter]|全ての行で「文字列1」を全て「文字列2」に置換|
|:[開始行],[終了行]s/文字列1/文字列2/[Enter]|指定範囲行内で各行の最初の「文字列1」を「文字列2」に置換|
|:[開始行],[終了行]s/文字列1/文字列2/g[Enter]|指定範囲行内の「文字列1」を全て「文字列2」に置換|
|:[開始行],$s/文字列1/文字列2/g[Enter]|指定開始行から最終行までの「文字列1」を全て「文字列2」に置換|
|&|直前のsコマンドの繰り返し|
|:&[Enter]|直前のsコマンドの繰り返し|

|コマンド|内容|
|:------|:----|
|~|カーソルの文字を小文字から大文字、大文字から小文字に変換|
|[数字]~|カーソルから指定文字数分の文字を小文字から大文字、大文字から小文字に変換|

|コマンド|内容|
|:------|:----|
|J|現在行と直下の行の改行をスペースに置換|
|[数字]J|現在行から指定行数分下の行の改行をスペースに置換|

# 15. ファイル操作

|コマンド|内容|
|:------|:----|
|:w[Enter]|上書き保存|
|:w![Enter]|強制上書き保存|
|:w ファイル名[Enter]|ファイル名で保存|
|:w! ファイル名[Enter]|ファイル名で強制保存|
|:[開始行],[終了行] w[Enter]|開始行から終了行までを保存|
|:wq[Enter]|上書き保存して終了|
|:q[Enter]|終了|
|:q![Enter]|保存せずに終了|
|:e[Enter]|現在開いているファイルを再度読込み|
|:e![Enter]|現在開いているファイルを強制的に再度読込み|
|:e ファイル名[Enter]|ファイルを編集用に読込み|
|:e! ファイル名[Enter]|ファイルを編集用に強制的に読込み|

|コマンド|内容|
|:------|:----|
|:e ++enc=euc-jp[Enter]|文字コードをeuc-jpに設定|
|:e ++enc=shift_jis[Enter]|文字コードをshift_jisに設定|
|:e ++enc=utf-8[Enter]|文字コードをutf-8に設定|

|コマンド|内容|
|:------|:----|
|:e ++ff=dos[Enter]|文字コードをdos（CR + LF）に設定|
|:e ++ff=mac[Enter]|文字コードをmac（CR）に設定|
|:e ++ff=unix[Enter]|文字コードをunix（LF）に設定|

# 16. setコマンド

|コマンド|省略|内容|
|:------|:----|:----|
|:set number[Enter]|:set nu[Enter]|行番号を表示|
|:set nonumber[Enter]|:set nonu[Enter]|行番号を非表示|
|:set all[Enter]|-|すべてのオプションを表示|
|:set fenc?[Enter]|-|ファイルエンコードの確認|
|:set ff?[Enter]|-|改行コードの確認|

# 17. ファイルの内容を挿入

|コマンド|内容|
|:------|:----|
|:r[Enter]|カーソル行の直下に現在のファイルの内容を挿入|
|:r ファイル名[Enter]|カーソル行の直下にファイルの内容を挿入|
|:r! コマンド[Enter]|カーソル行の直下にシェルコマンドの結果を挿入|

---

以上