エディター Vi の使い方

ビル・ジョイによって開発されたエディター Vi は軽くて高機能のエディターです。Linux や Mac OS にも標準で搭載されています。また、Windows 版もあります。現在は機能強化型のクローン Vim が使われていることが多いようです。

Vi には2つの操作モードがあり、コマンドモードの時はキー入力が文字の入力ではなく編集操作に割り当てられています。キーボードからの文字の入力は入力モードで行います。

Vi が起動した直後はコマンドモードになっており、キーボードから文字列が入力できないので初めての時は戸惑いますが、2つのモードがあるために、カーソル移動や、カット、コピー、ペースト、検索などの編集操作がキーボードのキーを押すだけで実行できるので、キーボードから全く手を放す必要がありません。使い慣れると操作の負担が少なく手放せなくなります。

Vi のコマンドモードから編集モードに移るには i (insert) コマンドを入力します。編集モードからコマンドモードへ移るときは Esc キーを押します。

Vi の編集コマンドには基本的に [数値引数] [コマンド] という文法があります。また、複数のコマンドを組み合わせて使うこともできます。たとえば fa はカーソルの位置から文字 a を探してカーソルを移動させるコマンドですが、dfa と入力するとカーソルの位置から a までの間を削除します。

数値引数を使うと同じ動作を複数回行うことができます。たとえば 3dd は 3 行削除します。

キーに割り付けられていない拡張コマンドは : (コロン) キーを押すと画面下のコマンドラインから :set のように単語でコマンドを入力することができます。

Vi の編集操作は行を単位に考えていることが多いので頭に入れておくと便利です例えば 3G は 3 行目に移動するコマンドですし、dd は1行削除です。

Vi の特徴は文字列の検索や置換に正規表現が使えることですが、ここでは説明は省きます。

Vi はとりつきは難しく感じますが、使い始めると多くの複雑な編集作業を最小限の手順で実行できるのでプログラムのソースの編集が快適にできます。

起動と終了

Vi の起動はコマンドラインから vi filename または vim filename とタイプします。

$ vi filename

終了はEsc キーを押してコマンドモードにした後、:(コロン)x を入力しリターンキーを押します。編集を破棄するときは :q! です。ほかのファイル名で保存するときは :w ファイル名です。

取消コマンド

操作を誤ったときはコマンドモードで u を押します。また、コマンドがうまく働かないときは数回 Esc を押していればコマンドモードの最初に戻ります。
アンドウ(編集操作の取消) UnDo: u

カーソルの移動

上: j 下: k 右: l 左: h
行頭: 0(数字の0) 行末: $ n 行の先頭: nG
文書の先頭: 1G 文書の末尾: G

編集モードへの移行

カーソルの位置から挿入: i
カーソルのある行の末尾から挿入: A
カーソルのある行の下の行に挿入: o
カーソルのある行の上の行に挿入: O

消去

編集モードでのカーソルの前の1文字消去: Backspace
コマンドモードでのカーソル位置の1文字消去: x
カーソル位置から行末までの消去: d$
カーソルのある行の削除: dd
カーソルのある行から 5 行削除: 5dd

消去した文字列は p で貼りつけることができます。

カット・アンド・ペースト

リージョンのカットは d コマンドとカーソル移動コマンドの組み合わせで行います。現在のカーソルから 5 文字削除するにはコマンドモードで d5l と入力します。d コマンドと f コマンドを組み合わせることもできます。dfa と入力すれば現在のカーソルから次に現れる文字 a までが削除されます。

カットした文字列は p (ペースト) コマンドでカーソルの後ろに張り付けることができます。

リージョンのコピーは y (ヤンク) コマンドの後に移動コマンドを組み合わせます。y5l でカーソル位置から5文字をコピーします。コピーした文字列は p コマンドで張り付けることができます。

行の削除は dd、行のコピーは yy で行います。

検索と置き換え

検索 :/word/

検索(上から下へ): コマンドモードで /word/ と入力しリターンキーを押すと検索した語がハイライトされます。n キーで次の検索語に移動できます。ハイライトを消すには :noh (no hilight) 。検索(下から上へ): ?word?。n キーは以前の選択後に順次カーソルを移動させます。

置き換え: 1,$s/total/sum/

1,$ は置換する行の範囲。sは置換。/total/sum/ は total を sum に置き換えます。

1行に複数の total があるときは1番目だけしか検索しないのでコマンドの末尾に g をつけて、1,$s/total/sum/g とします。

置き換えをインタラクティブにしたいときはコマンドの最後に c (conferm) をつけて 1,$s/totao/sum/c とします。y なら置き換え、n なら置き換えます。

カーソル位置の1文字を変更したいときは ra (a に置き換え) とします。単語の置き換えは cw(word)Esc です。

ファイルへの読み書き

これもマウスによるメニュー操作でやっても構いません。
セーブ: :w
他の名前でセーブ: :w ファイル名
他のファイルを読み込む: :行番号 r ファイル名

画面移動

Ctrl-f で1画面分先へ進みます。Ctrl-b で1画面分前にもどります。

ヘルプ画面の表示

:help でヘルプ画面を表示できます。:q でヘルプ画面を消すことができます。