vi コマンドリファレンス

コマンドモードと入力モード

vi エディタは、 「コマンドモード」「入力モード」 があり、これらのモードを切り替えて使用する。

起動直後は 「コマンドモード」 になっている。任意のコマンドを入力し 「入力モード」 となると文字の入力が出来るようになる。

ESCキー を押すといつでも 「コマンドモード」 に戻れる。
今、どちらのモードになっているのか分からなくなってしまったら、とりあえず ESCキー を二回ほど押して「コマンドモード」に一旦戻ると良い。

尚、これから紹介するコマンド群は全て、大文字/小文字を区別して入力する必要がある。特に明記はしていないが、必要に応じて、Capslock を使用するか、又は Shift キーと組み合わせて入力せねばならない。

コマンド

起動

vi ファイル名 編集対象のファイルを開く(複数ファイルも可)
vi +n ファイル名 n 行目から表示する
vi + ファイル名 最後一画面を表示する
vi + /文字列 ファイル名 文字列が存在する行から表示する
vi -r ファイル名 壊れたファイルをリカバリする

カーソル移動

hBackSpace 1文字左へ移動(←)
jCtrl + N 1行下へ移動(↓)
kCtrl + P 1行上へ移動(↑)
lSpace 1文字右に移動(→)
H 画面の最上行に移動
M 画面の中央行に移動
L 画面の最下行に移動
G ファイルの最終行に移動
n G ファイルの n 行目に移動
 
0 行頭へ移動
$ 行末へ移動
 
Ctrl + f 1ページ下へ
Ctrl + b 1ページ上へ
Ctrl + d 半ページ下へ
Ctrl + u 半ページ上へ

入力・編集

コマンドモードでここのコマンドを入力すると入力モードになります)

a カーソルの右から入力開始
A 行末から入力開始
i カーソルの左から入力開始
I 行頭から入力開始
o 現在の行の下に1行挿入し、その行頭から入力開始
O 現在の行の上に1行挿入し、その行頭から入力開始
   
J 次の行と現在の行とを結合する
3J 下の2行を現在の行とを結合する

削除

x カーソル上の1文字削除
X カーソルの左の文字を1文字削除
dd 現在の行を削除(バッファにコピーされる)
d n d 現在の行から、n 行を削除
d 1 G 現在の行から、ファイルの先頭までを削除
d G 現在の行から、ファイルの最後までを削除
dw カーソル上の一語を削除
df カーソル位置から指定した までを削除
d$ カーソル位置から行の最後までを削除
d^ カーソル位置から行の先頭までを削除
:行1, 行2 d 行1 から行2 を削除

検索

/<文字列> 文字列 を検索する
?<文字列> 文字列 を検索する(逆方向)
n 順方向へ検索する
N 逆方向へ検索する

置換

   
r カーソル上の1文字を他の1文字に置換
R カーソル上の文字からEscが押されるまでの文字列を置換
s カーソルのある1文字を他の文字列で置換
S 現在の行を他の文字列で置換
cw カーソル位置からこの語の最後までを置換
cf カーソル位置から指定した までを置換
C カーソル位置から行の最後までを置換
:s/置換え前/置換え後/ 現在の行で、置換え前の文字列を、置換え後の文字列で置換
もっとも近くにある文字列一つに対してのみ実行
:s/置換え前/置換え後/g 現在の行で、置換え前の文字列を、置換え後の文字列で置換
:s/置換え前/置換え後/gc 現在の行で、置換え前の文字列を、置換え後の文字列で置換 (確認あり)
:%s/置換え前/置換え後/ 置換え前の文字列を、置換え後の文字列で置換
もっとも近くにある文字列一つに対してのみ実行
:%s/置換え前/置換え後/gファイルの中すべての文字列に対して、置換えを行う
:%s/置換え前/置換え後/gcファイルの中すべての文字列に対して、置換えを行う (確認あり)
∼ (チルダ) 大文字/小文字を変更する
:&& 直前の s(置換) コマンドの繰り返し

カット&ペースト

yy 現在の行をバッファにコピー
n yy n 行分をバッファにコピー
yw 単語をバッファにコピー
p バッファ内のテキストを挿入
(文字、単語はカーソルの右に、行は現在の行の下に挿入される)
P バッファ内のテキストを挿入
(挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される)

Undo・Redo

u 直前の操作を取りやめる
U 行全体の操作を取りやめる
.   (ドット) 直前の操作の繰り返し

ファイル操作

:w ファイル名 現在のファイル(指定ファイル)に保存
:w! ファイル名 書き込みを強行
:行1, 行2 ファイル名 行1 から行2 のテキストをファイルに保存
:w >> ファイル名 現行ファイルの最後に書き加える
:r ファイル名 現在の行の次の行にファイルを読み込み、挿入する
:r 現在の行の次の行に現在のファイルを読み込み、挿入する
   
:args 編集ファイルの一覧を表示する
:n 複数個のファイル編集時、次のファイルを編集対象とする
:e# 一つ前の編集ファイルに戻る
:e!% 現在のファイルを再ロードして、最初から編集をやり直す
:e ファイル名 指定ファイルを編集対象とする
:rewind 現在のファイルの変更内容を保存して、リストの最初から編集をやり直す
:rewind! 現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す

終了

ZZ viを終了(内容が変更されている場合は保存)
:wq ファイルに保存してvi終了
:q viを終了(内容が変更されている場合は警告)
:q! viの強制終了(内容が変更されていても保存されない)

UNIXコマンドの実行■

:!<コマンド> <コマンド>を実行する
:!! 直前の<コマンド>を再実行する
:sh 一時的にシェルに戻る。exitでviに戻る。

コマンドのフィルタリング

!<コマンド> <コマンド>を実行して結果を挿入
!!date date の結果の挿入
!!tr A-Z a-z カーソル行の大文字を小文字に変換

テキスト入力の略記

:ab <文字列> <置換え文字列> <文字列>と入力すると<置換え文字列>に置き換えるように設定する
:unab <文字列> <文字列>の置き換え設定を解除する
:ab 一覧表示

その他

Ctrl + G ファイル名、修正の有無、現在の行数などの情報を表示
Ctrl + L 画面を再表示
Shift + Q exで編集をする
vi exからviに戻る

コマンド

:set number:set nu 行番号を表示する
:set no number:set nonu 行番号の表示をやめる
:set showmode 現在のモードを表示する
:set showmatch () や {} の対応の報告をするようになる
:set ignorecase 大文字/小文字の区別なく検索する
:set autoindent 自動インデントモード
:set noautoindent 自動インデントモードをやめる
:set all すべてのオプションを表示する
環境設定

.exrcの例 (viの設定ファイル)

ホームディレクトリに .exrc というファイルを作成し、そのファイル内に以下のように記述する。

set tabstop = 4
set showmode
set autoindent
set nonumber
set showmatch

Produced by ...