vi (visual display editorの略)は、UNIX系OSで利用可能な標準的なテキストエディタです。viはウインドウベースのエディタではないので、ターミナルなど各種端末のコマンドコンソールでさまざまなファイルのテキスト入力と編集ができます。ここではよく使うコマンドやキーをまとめてみました。
・viの起動
以下のコマンドでviを起動しファイルを編集します。
$ vi [ファイル名]
指定したファイルがすでに存在している場合は既存のファイルを開きます。存在しない場合は指定したファイル名で作成されます。
実行すると編集画面が表示されます。既存のファイルで何らかのデータがある場合は内容を表示します。新規のファイルや内容が空の場合は空白行が表示されます。
画面の一番下はステータス行で各種エラーが表示されたりコマンド実行時に使用します。
ファイルを編集せずに読み取り専用で開く場合はviewコマンドを使用します。
$ view [ファイル名]
・viのモード
viは入力モードとコマンドモードの操作モードがあり、モードを切り替えながら操作します。
[コマンドモード]
viでファイルを開くと最初はコマンドモードになります。いろいろな機能を実行するコマンドを入力しviを操作します。多くのコマンドはReturnキーを押さなくとも実行できますが、「:」で始まるコマンドは入力後にReturnキーを押して実行します。
[入力モード]
テキストを入力するために「i (insert)」や「a (append)」などの入力コマンドを押して入力モードにします。テキストを入力し終えたらEscキーを押してコマンドモードに戻ります。
コマンドモードで画面をスクロールしたり、カーソルを動かしたり、検索したりなどの操作をしながら、テキスト入力するときにモードを切り替えて、入力が完了するとまたコマンドモードに戻るのを繰り返しすのがviを使った編集作業の基本となります。
以下にviでよく使うコマンドの一覧をまとめます。
・viのコマンド
【保存と終了】
| コマンド名 | 説明 |
| :e filename | filenameを開く |
| :w | 保存 |
| :w filename | 指定したファイルに保存する |
| :q | 終了 |
| :q! | 保存せず終了 |
| :wq | 保存して終了 |
| ZZ | 保存して終了 |
| ZQ | 保存せずに終了 |
【カーソル移動】
| コマンド名 | 説明 |
| h, j, k, l | 左、下、上、右 |
| gj, gk | 下、上に1行移動 (画面の横幅によって行が折り返されている場合でも表示されている行に移動) |
| w | 1単語分進む |
| W | 1単語分進む(スペースで区切られた単語) |
| b | 1単語分戻る |
| B | 1単語分戻る(スペースで区切られた単語) |
| Returnキー | 下の行の先頭に移動 |
| Back Spaceキー | 左に移動 |
| Spaceキー | 右に移動 |
| gg | ファイルの先頭に移動 |
| G | ファイルの最後に移動 |
| [n]gg, [n]G, :[n] | [n]行に移動(例:10gg 10行目に移動) |
| H, M, L | 画面の先頭行(H)、画面の中央行(M)、画面の最後行(L)に移動 |
| 0 | 行の先頭に移動 |
| ^ | 行のテキスト部分の先頭に移動 |
| $ | 行の最後に移動 |
| % | 対応する括弧に移動 |
| Ctrl-U | 半画面分戻る |
| Ctrl-D | 半画面分進む |
| Ctrl-B | 1画面分戻る |
| Ctrl-F | 1画面分進む |
【文字と行の挿入とモード切り替え】
| コマンド名 | 説明 |
| a | カーソルの直後にテキストを追加 |
| A | 行末にテキストを追加 |
| i | カーソルの左にテキストを追加 |
| I | 行頭にテキストを追加 |
| o | カーソルがある下の行にテキストを挿入 |
| O | カーソルがある上の行にテキストを挿入 |
| esc | コマンドモードに戻る |
【テキストの削除、コピー、移動、変更、取り消し】
| コマンド名 | 説明 |
| x | カーソルの文字を削除 |
| X | カーソルの左の文字を削除 |
| s | カーソルの文字を削除して入力モードに入る |
| dd | カーソルがある行を削除 |
| dw | カーソルがある単語を削除 |
| cc | カーソルがある行を削除して入力モードに入る |
| cw | カーソル位置から1単語分削除して入力モードに入る |
| D | カーソル位置から行末まで削除 |
| C | カーソル位置から行末まで削除して入力モードに入る |
| dG | カーソル位置からファイルの最終行までを削除 |
| d1G | ファイル先頭行からカーソル位置の行までを削除 |
| :[ n1],[n2] d | [n1]行目から[n2]行目までを削除(例::5,10 d 5行目から10行目までを削除) |
| yy | カーソルがある行をコピー |
| Y | カーソルがある行をコピー |
| p | カーソル行の下の行にペースト |
| P | カーソル行の上の行にペースト |
| :[n1],[n2] co [n3] Returnキー | [n1]行目から[n2]行目までを[n3]行目の下にコピー |
| :[n1],[n2] m [n3] Returnキー | [n1]行目から[n2]行目までを[n3]行目の下に移動 |
| r | カーソルの文字を別の1文字に置換 |
| J | カーソルがある行とその下の行を連結 |
| xp | カーソルの文字とその右の文字を入れ替える |
| ~ | 大文字もしくは小文字に変える |
| u | 前回の変更などのコマンドを取り消す |
| U | カーソルがある行の全変更を取り消す |
【検索と置換】
| コマンド名 | 説明 |
| / string | 文字入力してReturnで後方検索する |
| ? string | 文字入力してReturnで前方検索する |
| * | カーソル下の単語を後方検索する |
| # | カーソル下の単語を前方検索する |
| :s/search/replace/g Returnキー | カーソル行のsearchをreplaceに置換 |
| n | 次の単語に移る |
| N | 前の単語に移る |
【設定】
| コマンド名 | 説明 |
| :set nu Returnキー | 行番号を表示 |
| :set nonu Returnキー | 行番号を表示しない |
| :set ic Returnキー | 検索時に大文字と小文字を区別しない |
| :set noic Returnキー | 検索時に大文字と小文字を区別する |

