vi - UNIX 標準エディタ
vi は、Unix や Linux に入っている標準のエディタです。 正直普通の入力はやりにくいですが、 検索、移動、文字置換などに威力を発揮するので、 設定ファイルを少し編集する際などによく使われます。
% vi [filename]
のように起動します。使い方の基本としては k,j,h,l, i, x, :w, :q ぐらい知っておけばなんとかなると思います。 でもやはり、検索、切り取り、コピー、貼付け、置換、移動などを知っておかないとせっかくの利点が使えないのでもったいないと思います。
| Table of Contents |
モード 
viはいくつかのモードを持ちます。viの基本はカーソル移動モード*1です。そこから、入力モード、コマンドモードに切り替えて文字操作等を行います。カーソル移動モードへはESCキーで戻ります。
| モード | 操作内容 | カーソル移動モードからの切り替え |
| カーソル移動モード | j, k, h, lキーを使ってカーソルを移動します。 | デフォルト |
| 入力モード | 文字を入力します | i, a, o |
| コマンドモード | コマンドを入力します | : |
| 範囲選択モード | カーソルで範囲指定します | v |
移動、スクロール 
| コマンド | 意味 |
| k | 上へ移動(nkでn行移動。n は数字) |
| j | 下へ移動(njでn行移動) |
| h | 左へ移動(nhでn文字移動) |
| l | 右へ移動(nlでn文字移動) |
| w | 次の単語の先頭へ移動(nwでn単語移動) |
| e | 次の単語の末尾へ移動(neでn単語移動) |
| b | 前の単語の先頭へ移動(nbでn単語移動) |
| $ | 行の最後へ移動 |
| ^ | 行の先頭の文字へ移動 |
| 0 | 行の先頭の文字へ移動 |
| gg | ファイルの先頭へ移動 |
| G | 最終行へ移動 |
| nG | 先頭から n 行目へ移動 |
| % | 対応する括弧へ移動 |
| CTRL + f | 次の画面へ進む |
| CTRL + b | 前の画面に戻る |
| CTRL + u | 画面半分上へ |
| CTRL + d | 画面半分下へ |
| CTRL + e | 一行分画面を進める |
| CTRL + y | 一行分画面を戻す |
| :行番号 | 指定行へ移動 |
入力モード 
Esc キーで編集モードに復帰
| コマンド | 意味 |
| i | カーソルのある位置から文字挿入 |
| I | 行の先頭から文字挿入 |
| a | カーソルのある位置の次から文字挿入 |
| A | 行の最後から文字挿入 |
| o | カーソルのある行の次の行を新しく挿入し文字挿入 |
| O | カーソルのある行に新しく行を挿入し文字挿入 |
削除・コピー・移動 
基本的に切り取り・コピー・貼り付けですべてを代用する。
| コマンド | 意味 |
| x | カーソルのある文字を切り取り (nx で n 文字切り取り) |
| J | 改行削除(行の連結) |
| dw | カーソルのある単語を切り取り (ndw で n 単語切り取り) |
| dd | カーソルのある行を切り取り (ndd で n 行切り取り) |
| D | カーソルのあるところから行の最後までを切り取り |
| yl | カーソルのある文字をコピー (nyl で n 文字コピー) |
| yw | カーソルのある単語をコピー (nyw で n 単語コピー) |
| yy | カーソルのある行をコピー (nyy で n 行コピー) |
| p | カーソルの後ろに貼り付け |
| P | カーソル位置に貼り付け |
検索 
置換 
| コマンド | 意味 |
| r | 一文字置換 |
| R | 連続して文字置換 |
| s | 一文字置換後そのまま入力可 |
| cw | 単語置換 |
| cc | 行置換 |
| :s/文字列1/文字列2/ | カレント行の最初に現れた文字列1を文字列2へ置換。 |
| :s/文字列1/文字列2/g | g フラグで全ての文字列1を対象に |
| :n,ms/文字列1/文字列2/g | n 行から m 行までの文字列1をすべて文字列2へ置換。(最後の行までのときは m を $ にする)(n または m を省略すると現在の行という意味になる) |
| :%s/文字列1/文字列2/g | すべての行で文字列1をすべて文字列2へ置換 |
| :%s/文字列1/文字列2/gc | c フラグで変換確認可能 |
保存・終了 
| コマンド | 意味 |
| :w | 保存 |
| :w ファイル名 | 指定したファイル名で保存 |
| :w! ファイル名 | 指定したファイル名で強制保存 |
| :n,mw ファイル名 | n 行目から m 行目までを指定したファイル名で保存 |
| :q | 書き込まずに終了 |
| :q! | 書き込まずに強制終了 |
| :qw | 書き込んで終了 |
| ZZ | 書き込んで終了。こちらのほうが楽か。 |
vi の機能ではなく、シェルの機能ですが C-z で一時停止しておき、fg で戻るのも便利です。
その他 
| コマンド | 意味 |
| :r ファイル名 | ファイル名で指定したファイルの内容を次の行に挿入 |
| :!コマンド | コマンドを実行 |
| r !コマンド | コマンドを実行結果(標準出力)を次の行に挿入 |
| u | 一つ前のコマンドを取り消し (undo) |
| . | 直前のコマンドを実行 |
| >> | カーソルのある行をインデント。ぶっちゃけ tab |
| << | カーソルのある行のインデントを一段解除 |
| CTRL + [ | ESCと同じく、カーソル移動モードに遷移 ホームポジションでの入力が可能なため、ESCより便利 |
*1 正式名称があるかもしれません

