vi エディタ: VIsual editor の操作方法
vi は通常の編集作業に耐える十分な機能を持ち非常に軽量なソフトウェアであるため、標準的にインストールされている。
UNIX 系のデータベースサーバーに影響がもっとも少ない DBA 向けのスクリーンエディタといえるだろう。
vi エディタでの開発作業は効率が良いとは思えない。デバッグ環境のある IDE をクライアントマシンで使用する方が効率がよい。
無償の開発環境 (SQL Developer、JDeveloper) やサードベンダにも該当する製品は多い
一般的な起動方法
vi には互換性のある多機能のクローンソフトが多数あり、そのシンボリックリンクの場合もある。
# vi [filename [filename2...]]
モードの切り替え
起動時はコマンドモード
コマンドモードからエディットモード
| 操作 | 分類 | 内容 |
| i | カーソル位置の前からの挿入でエディットモードへ(insert) | カーソル位置の直前に文字列を挿入 |
| I | カレント行の行頭に文字列を挿入 |
| a | カーソル位置の後ろから追記でエディットモードへ(append) | カーソル位置の直後に文字列を挿入 |
| A | カレント行の行末に文字列を追加 |
| R | カーソル位置から上書きでエディットモードへ(replace) | カーソル位置からの文字列置換 |
| o | 新規行を作成してエディットモードへ | カレント行の直後に新規行を追加 |
| O | カレント行の直前に新規行を挿入 |
エディットモードからコマンドモード
| 操作 | 分類 | 内容 |
| <ESC> | カーソル位置の直前からエディットモードへ | - |
カーソル、ページの移動
文字単位の移動
| 操作 | 分類 | 内容 |
| h | 1文字移動 (文字に意味無し、ホームポジション位置) | 左に1文字 |
| j | 下に1文字 |
| k | 上に1文字 |
| l | 右に1文字 |
繰り返し対象コマンド: 先頭に繰り返し実行したい回数を入力すれば同じ操作を繰り返す。 (例) 10j では 10 行分下へ移動する。 |
指定行への移動
| 操作 | 分類 | 内容 |
| [Num]G | 行移動(go) | 指定行へ移動 Num 省略時は最終行 |
行頭、行末への移動
| 操作 | 分類 | 内容 |
| $ | ^ と $ は 正規表現 で先頭と最後の意味 | 文末へ移動 |
| ^ | 文頭へ移動(先行する空白とタブを考慮) |
| 0 | 行頭へ移動 |
ページ単位の移動
| 操作 | 分類 | 内容 |
| <CTRL>+f | 1ページ移動
| 下に1ページ(forward) |
| <CTRL>+b | 上に1ページ(backward) |
| 繰り返し対象コマンド |
テキスト、改行の削除、
文字単位、行単位のテキスト削除
| 操作 | 分類 | 内容 |
| dd | カーソル位置の行削除(delete) | カーソル行の1行を削除してバッファへコピー。 同じ文字が2つ続く場合は行単位の処理をあらわす。 |
| x | カーソル位置および前後の文字削除(eXclude?) | カーソル位置の文字を削除してバッファへ |
| X | カーソル位置の前の文字を削除してバッファへ |
| J | 行の連結(join) | カレント行の文末の改行コードを削除して次の行を現在行に繰り上げ |
| 繰り返し対象コマンド |
コピー
バッファへのコピー
| 操作 | 分類 | 内容 |
| yy | カーソル行からのコピー(yank) | カレント行から行単位にバッファへコピー |
| 繰り返し対象コマンド |
ペースト
バッファからペースト
| 操作 | 分類 | 内容 |
| p | カーソル位置の前後のペースト(paste) | カレント行の直後に新規行を追加(行単位のコピーの場合) 文字単位のコピーの場合にはカーソルの直後 |
| P | カレント行の直前にコピーしたバッファ行を挿入(行単位のコピーの場合) 文字単位のコピーの場合にはカーソルの直前 |
| 繰り返し対象コマンド |
取り消しと再実行
直前の作業の取り消しと繰り返し
| 操作 | 分類 | 内容 |
| u | (undo) | 直前に行ったコマンドや編集操作を取り消す |
| ドット(.) | (redo) | 直前に行ったコマンドや編集操作を再度実行する |
ファイル書き込みと終了
ファイルへの書き込みと破棄
| 操作 | 分類 | 内容 |
| :w[q][!] [filename] | (write) | 指定したファイル(省略時は上書き)に書き込む。 q は書き込み後終了、 ! は強制上書きオプション |
| :q[!] | (quit) | vi の終了 ! は編集を破棄して終了するオプション |
これだけおさえておけば十分に使える
コマンド操作の組み合わせ
組み合わせ操作の代表例
文字単位、行単位のテキスト削除
| 操作 | 分類 | 内容 |
| d | カーソル位置からの削除 | |
| [Num]dh | h の併用 | カーソル位置の1つ前からの Num 文字を削除してバッファへ Num 省略時は1 |
| [Num]dl | l の併用 | カーソル位置から Num 文字を削除してバッファへ dl は x コマンドと同じ |
| [Num]dj | j の併用 | カーソル行と直後の Num 行(計 Num+1)を削除してバッファへ |
| [Num]dk | k の併用 | カーソル行と前 Num 行(計 Num+1)を削除してバッファへ |
| d$ | $ の併用 | カーソル位置から行末を削除してバッファへ D と同じ |
| d^ | ^ の併用 | カーソル位置の直前から行頭(先行インデント除く)を削除してバッファへ |
| d[Num]G | G の併用 | カーソル位置の行から指定行(省略時:最終行)までを削除してバッファへ |
文字単位、行単位のテキストコピー
| 操作 | 分類 | 内容 |
| y | カーソル位置からのコピー(ヤンク) | |
| [Num]yh | h の併用 | カーソル位置の1つ前から Num 文字をコピーしてバッファへ Num 省略時は1 |
| [Num]yl | l の併用 | カーソル位置から Num 文字をコピーしてバッファへ |
| [Num]yj | j の併用 | カーソル行と直後の Num 行(計 Num+1)をコピーしてバッファへ |
| [Num]yk | k の併用 | カーソル行と前 Num 行(計 Num+1)をコピーしてバッファへ |
| y$ | $ の併用 | カーソル位置から行末をコピーしてバッファへ |
| y^ | ^ の併用 | カーソル位置の直前から行頭(先行インデント除く)をコピーしてバッファへ |
vi には、これだけでなくコマンドモードのプロンプトから入力するコマンドなどがある。
:/hoge hoge を検索 (n / <SHFIT> + n) next / prev で次と前
:s/hoge/hogehoge/ (sed?) カレント行の置換
:s/hoge/hogehoge/c (confirm) 置換の確認
:s/hoge/hogehoge/g (global) 全体/指定無しは1回
:%s/hoge/moge/g % はすべての行全体が対象
:N,Ms/hoge/moge/g N,M は行をあらわす数値または $
関連事項