viは、UNIXに標準で備わっているテキストエディタである。多少とっつき にくい面があるが、慣れると高速で編集作業ができるようになる。 ここでは、viの使い方について紹介する。
viを起動するには、単純に
と入力しても構わないし、またファイル名が決まっていれば (または既に存在するファイルを開くのであれば)下記のように入力する。
viを起動直後は、コマンドモードになっていてファイル上で移動などの 処理ができる。注意すべきことは、 コマンドモードのままでは文字入力できず、 文字入力するためには入力モードへ切り替える必要がある、 ということである。
以下、移動に関するコマンドを記述する。
| 操作 | 結果 | |
|---|---|---|
| 1文字の移動 | h | 左 |
| j | 下 | |
| k | 上 | |
| l | 右 | |
| 1単語の移動 | w | 次の単語の先頭 (word) |
| b | 現在または前の単語の先頭 | |
| e | 現在または次の単語の末尾 | |
|
文字、単語の移動には、数字を組合わせる事で、一気に 移動できる。例えば、 「5w」 と入力すると、5つ先の単語の先頭に移動する |
||
| 行での移動 | 0 | 行頭 |
| ^ | 行の最初の文字(スペースは除く) | |
| $ | 行末 | |
| 半画面分の移動 | Ctrl + d | �[ (down) |
| Ctrl + u | 上 (up) | |
| 1画面分の移動 | Ctrl + f | �[ (forward) |
| Ctrl + b | 上 (backward) | |
| 特定の行への移動 | 行数G |
指定した行への移動※1 (例えば「10G」と入力すると、10行目へ移動) (ファイルの先頭へ移動するには「1G」と入力) |
| G | 最終行への移動 | |
※1: 行数を表示させるには、コマンドモードにて、
逆に行数を表示させないためには、
と入力する。nu (number), nonu (no number)と覚えよう。
| 操作 | 結果 | |
|---|---|---|
| コマンドモード→入力モード | i | カーソルの位置に文字を入力 |
| I | カーソルのある行頭に文字を入力 | |
| a | カーソルの右側に文字を入力 | |
| A | カーソルのある行末 に文字を入力 | |
| o | カーソルのある行の次の行頭 に文字を入力 | |
| O | カーソルのある行の前の行頭 に文字を入力 | |
| 入力モード→コマンドモード | Esc |
| 操作 | 結果 | |
|---|---|---|
| コピー | yl |
1文字
のコピー
(3文字のコピーはy3l, 3yl のどちらでも可) |
| yw |
1単語
のコピー
(3単語のコピーはy3w, 3yw のどちらでも可) |
|
| yy |
1行
のコピー
(3行のコピーはy3y, 3yy のどちらでも可) |
|
| y0 | 行頭からカーソルの直前まで のコピー | |
| y$ | カーソルの位置から行末まで のコピー | |
| 削除 | x | 1文字 の削除 |
| dl |
1文字
の削除
(3文字の削除はd3l, 3dl のどちらでも可) |
|
| dw |
1単語
の削除
(3単語の削除はd3w, 3dw のどちらでも可) |
|
| dd |
1行
の削除
(3行の削除はd3d, 3dd のどちらでも可) |
|
| d0 | 行頭からカーソルの直前まで の削除 | |
| d$ | カーソルの位置から行末まで の削除 | |
| 貼り付け | p | カーソル の右側に貼り付け |
| P | カーソル の左側に貼り付け |
上記の操作で コピー、または削除された内容がバッファに 記録され、その内容はコピー、削除の操作の度に上書きされる。 コピー、削除を繰り返しても同一の内容を貼り付けたい場合には、 下記のように名前つきバッファを利用する。 貼り付けたい内容が多数に上るとき、非常に役立つ。
例えば、3行分のコピーをaという名前のバッファに保存するには、
のように行う。コピーでも削除でも基本は同じであり、 名前つきバッファは、a~zの26個使用できる。 名前つきバッファに保存した内容を貼り付けるには、上記の例では、
のように行う。pでもPでもどちらでも使える。
複数のファイルを開くには、下記のように、viの後にファイル名を 記述する。
ファイル間を移動するには、コマンドモードで以下のような操作を行う。
| 操作 | 結果 | |
|---|---|---|
| ファイル間の移動 | :n | ファイルn → n+1(次のファイルへ移動: next) |
| :rew | 最後のファイル → 先頭のファイル(rewind) |
複数のファイル間でコピー、貼り付けを行いたい場合には、 名前つきバッファを使用する。 上書きしない限り、viを終了するまで 名前つきバッファの内容は保持される。
| 操作 | 結果 |
|---|---|
| :w | 保存 |
| :w 別ファイル名 | 別名で保存 |
| :q | 終了 |
| :wq | 保存して終了 |
| :wq 別ファイル名 | 別名で保�[ して終了 |
| :q! | 強制終了(保存なし) |
| 操作 | 結果 | |
|---|---|---|
| 置換 | s | 1文字置換(置換後は入力モードになる) |
| r | 1文字置換(置換後はコマンドモードになる) | |
| R | 上書き(入力をやめるまで上書きで置換される) | |
| cw | カーソルの位置から単語の終わりまで置換 |
また、ファイル全体、あるいは一定区間の置換を一気に行いたい場合には、 下記のように実行すると便利である。
| 操作 | 結果 | |
|---|---|---|
| 検索 (同一行) | f 文字 | 文字 を検索(右方向へ) |
| F 文字 | 文字 を検索(左方向へ) | |
| ; | 次の検索 | |
| 検索 (ファイル全体) | /キーワード | キーワードを検索(下方向へ) |
| ?キーワード | キーワードを検索(上方向へ) | |
| n | 次の検索 | |
| N | 前の検索 | |
| 置換 | :s/文字列A/文字列B/ |
文字列Aを文字列Bに置換 (カーソルのある行で、最初に合致するパターンのみ置換) |
| :s/文字列A/文字列B/g |
文字列Aを文字列Bに置換 (カーソルのある行で、合致するパターン全てを置換) |
|
| :s/文字列A/文字列B/c |
文字列Aを文字列Bに置換 (カーソルのある行で、最初に合致するパターンのみ置換 (置換前に確認:yで置換、nで置換なし) |
|
| :%s/文字列A/文字列B/g |
文字列Aを文字列Bに置換 (全ての行で、合致するパターン全てを置換) |
|
| :10,50s/文字列A/文字列B/g |
文字列Aを文字列Bに置換 (10行目から50行目までの間で、合致するパターン全てを置換) |
|
| :10,$s/文字列A/文字列B/g |
文字列Aを文字列Bに置換 (10行目から最終行までの間で、合致するパターン全てを置換) |
より複雑な置換を実現するためには、正規表現を利用することも可能で あるが、ここでは説明しない。
| 操作 | 結果 |
|---|---|
| U | 取り消し(Undo) |
| J | 行の連結(カーソルのある行へ、下の行が連結) |