vi - UNIX 標準エディタ


vi は、Unix や Linux に入っている標準のエディタです。 正直普通の入力はやりにくいですが、 検索、移動、文字置換などに威力を発揮するので、 設定ファイルを少し編集する際などによく使われます。

% vi [filename] 

のように起動します。使い方の基本としては k,j,h,l, i, x, :w, :q ぐらい知っておけばなんとかなると思います。 でもやはり、検索、切り取り、コピー、貼付け、置換、移動などを知っておかないとせっかくの利点が使えないのでもったいないと思います。

Table of Contents

モード Edit

viはいくつかのモードを持ちます。viの基本はカーソル移動モード*1です。そこから、入力モード、コマンドモードに切り替えて文字操作等を行います。カーソル移動モードへはESCキーで戻ります。

モード操作内容カーソル移動モードからの切り替え
カーソル移動モードj, k, h, lキーを使ってカーソルを移動します。デフォルト
入力モード文字を入力しますi, a, o
コマンドモードコマンドを入力します:
範囲選択モードカーソルで範囲指定しますv

移動、スクロール Edit

コマンド意味
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一行分画面を戻す
:行番号指定行へ移動

入力モード Edit

Esc キーで編集モードに復帰

コマンド意味
iカーソルのある位置から文字挿入
I行の先頭から文字挿入
aカーソルのある位置の次から文字挿入
A行の最後から文字挿入
oカーソルのある行の次の行を新しく挿入し文字挿入
Oカーソルのある行に新しく行を挿入し文字挿入

削除・コピー・移動 Edit

基本的に切り取り・コピー・貼り付けですべてを代用する。

コマンド意味
xカーソルのある文字を切り取り (nx で n 文字切り取り)
J改行削除(行の連結)
dwカーソルのある単語を切り取り (ndw で n 単語切り取り)
ddカーソルのある行を切り取り (ndd で n 行切り取り)
Dカーソルのあるところから行の最後までを切り取り
ylカーソルのある文字をコピー (nyl で n 文字コピー)
ywカーソルのある単語をコピー (nyw で n 単語コピー)
yyカーソルのある行をコピー (nyy で n 行コピー)
pカーソルの後ろに貼り付け
Pカーソル位置に貼り付け

検索 Edit

コマンド意味
/文字列文字列検索正規表現可。 (n で次の候補へ)
?文字列逆方向文字列検索正規表現可。 (n で次の候補へ)

置換 Edit

コマンド意味
r一文字置換
R連続して文字置換
s一文字置換後そのまま入力可
cw単語置換
cc行置換
:s/文字列1/文字列2/カレント行の最初に現れた文字列1を文字列2へ置換。
:s/文字列1/文字列2/gg フラグで全ての文字列1を対象に
:n,ms/文字列1/文字列2/gn 行から m 行までの文字列1をすべて文字列2へ置換。(最後の行までのときは m を $ にする)(n または m を省略すると現在の行という意味になる)
:%s/文字列1/文字列2/gすべての行で文字列1をすべて文字列2へ置換
:%s/文字列1/文字列2/gcc フラグで変換確認可能

保存・終了 Edit

コマンド意味
:w保存
:w ファイル名指定したファイル名で保存
:w! ファイル名指定したファイル名で強制保存
:n,mw ファイル名n 行目から m 行目までを指定したファイル名で保存
:q書き込まずに終了
:q!書き込まずに強制終了
:qw書き込んで終了
ZZ書き込んで終了。こちらのほうが楽か。

vi の機能ではなく、シェルの機能ですが C-z で一時停止しておき、fg で戻るのも便利です。

その他 Edit

コマンド意味
:r ファイル名ファイル名で指定したファイルの内容を次の行に挿入
:!コマンドコマンドを実行
r !コマンドコマンドを実行結果(標準出力)を次の行に挿入
u一つ前のコマンドを取り消し (undo)
.直前のコマンドを実行
>>カーソルのある行をインデント。ぶっちゃけ tab
<<カーソルのある行のインデントを一段解除
CTRL + [ESCと同じく、カーソル移動モードに遷移
ホームポジションでの入力が可能なため、ESCより便利


*1 正式名称があるかもしれません
xrea