viはテキストエディタ(テキストを編集するプログラム)です。viエディタを使って、ファイルの作成、編集及び保存を行うことができます。Unixでは、viがあらかじめインストールされていてます。Microsoft Windowsでは、viから派生したVimをインストールすることで使うことができます。

目次

スポンサーリンク

viの起動方法

viの起動方法を次に示します。

vi [filename]

viを起動するときにファイル名を引数に指定することができます。既存ファイルのファイル名を指定したときは編集、存在しないファイル名を指定したときは新規作成になります。

ファイル名を省力した場合は、ファイル名を決めずにファイルの編集を行います。このときは、ファイルを保存する際にファイル名を指定します。

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

viには、コマンドモードと挿入モードという2種類の状態があります。viを起動した時点ではコマンドモードになっています。

コマンドモードのときにキーボードから何らかのキーを押すと、それはviのコマンドと解釈されます。たとえば、i のキーを押すと、現在のモードをコマンドモードから挿入モードに切り替えるコマンドと解釈されます。

挿入モードのときにキーボードから何らかのキーを押すと、その文字が画面に表示されます。つまり、テキストの入力と解釈されます。ただし、Esc キーを押した場合は、現在のモードを挿入モードからコマンドモードへ切り替えるコマンドと解釈されます。

現在のモードがコマンドモードと挿入モードのどちらであるかは、デフォルト(初期状態)では画面に表示されません。

viのコマンドはコマンドモードのコマンドとexモードのコマンドの2種類があります。

コマンドモードのコマンド一覧

viのコマンド一覧
コマンド 説明
$ カーソルを行の末尾へ移動します。
% カーソルが括弧にあるとき、対応する括弧へ移動します。
+ カーソルを次の行の先頭へ移動します。
- カーソルを前の行の先頭へ移動します。
. テキストの変更を繰り返します。
/ テキストの下へ向かって文字列を検索します。
: exモードに移ります。exモードに移ると、カーソルは最下行に移動します。exモードのコマンドはこの行に入力します。
? テキストの上へ向かって文字列を検索します。
_ カーソルを行の最初の空白やタブでない文字へ移動します。
~ カーソルがある文字の大文字/小文字を変換します。
0 カーソルを行の先頭へ移動します。
a カーソルの後ろにテキストを追加します。
A 行の末尾にテキストを追加します。
b カーソルを単語の先頭へ移動します。既にカーソルが単語の先頭にある場合は、前の単語の先頭へ移動します。
^b 画面を前のページに逆スクロールする。
cc 1行を別のテキストに置き換えます。Sコマンドと同じです。
cw 単語を削除し、挿入モードになる。
d + 移動コマンド カーソルから移動先までを削除して、バッファに記憶します。
dd カーソルがある行を削除します。削除した行はバッファに記憶されます。
e カーソルを単語の末尾へ移動します。既にカーソルが単語の末尾にある場合は、次の単語の末尾へ移動します。
^f 画面を次のページにスクロールする。
G 行数を入力してGを押すと、指定した行にカーソルを移動します。たとえば、120Gと入力すると、カーソルを120行目へ移動します。
^g 現在編集しているファイルのファイル名、現在カーソルがある行番号、全体の行数、表示しているファイルの割合などを表示します。
h カーソルを左に1文字移動します。
i カーソルの位置にテキストを挿入します。
I 行の先頭にテキストを挿入します。
j カーソルを下に1行移動します。
k カーソルを上に1行移動します。
l カーソルを右に1文字移動します。
n 直前に行った検索を繰り返します。
N 直前に行った検索を反対方向に繰り返します。
o カーソルの下に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。
O カーソルの上に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。
p カーソルの下にバッファの内容を書き出す。
P カーソルの上にバッファの内容を書き出す。
r + 1文字 カーソルの文字を置き換えます。挿入モードにならずに文字を変更することができます。
R カーソルの位置にテキスト上書きします。コマンドモードから挿入モードへ切り替わります。
u 直前に行ったコマンドを取り消します。取り消せるのはテキストの変更に関するコマンドで、カーソルの移動などのコマンドは取り消せません。
s カーソルの1文字を削除し、コマンドモードからテキスト挿入モードへ切り替わります。
S 1行を別のテキストに置き換えます。ccコマンドと同じです。
U カーソルがある行に対する変更を全て取り消し、元の状態に戻します。
w カーソルを次の単語の先頭へ移動します。
x カーソル位置の1文字を削除します。また、削除した文字をバッファに記憶します。
X カーソルの1つ前の文字を削除します。また、削除した文字をバッファに記憶します。
y + 移動コマンド カーソルから移動先までをバッファに記憶します。
yy カーソルがある行をバッファに記憶させる。
ZZ ファイルを保存して、viエディタを終了します。

コマンドモードのコマンド

コマンドモードから挿入モードへの切り替えに関するコマンド

viのコマンド
コマンド 説明
a カーソルの後ろにテキストを追加します。
A 行の末尾にテキストを追加します。
cc 1行を別のテキストに置き換えます。Sコマンドと同じです。
cw 単語を削除し、挿入モードになる。
i カーソルの位置にテキストを挿入します。
I 行の先頭にテキストを挿入します。
R カーソルの位置にテキスト上書きします。コマンドモードから挿入モードへ切り替わります。
o カーソルの下に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。
O カーソルの上に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。
s カーソルの1文字を削除し、コマンドモードからテキスト挿入モードへ切り替わります。
S 1行を別のテキストに置き換えます。ccコマンドと同じです。

カーソルの移動に関するコマンド

viのコマンド
コマンド 説明
$ カーソルを行の末尾へ移動します。
% カーソルが括弧にあるとき、対応する括弧へ移動します。
+ カーソルを次の行の先頭へ移動します。
- カーソルを前の行の先頭へ移動します。
_ カーソルを行の最初の空白やタブでない文字へ移動します。
0 カーソルを行の先頭へ移動します。
b カーソルを単語の先頭へ移動します。既にカーソルが単語の先頭にある場合は、前の単語の先頭へ移動します。
e カーソルを単語の末尾へ移動します。既にカーソルが単語の末尾にある場合は、次の単語の末尾へ移動します。
h カーソルを左に1文字移動します。
G 行数を入力してGを押すと、指定した行にカーソルを移動します。たとえば、120Gと入力すると、カーソルを120行目へ移動します。
j カーソルを下に1行移動します。
k カーソルを上に1行移動します。
l カーソルを右に1文字移動します。
w カーソルを次の単語の先頭へ移動します。

数字に続けてコマンドを入力すると、その数だけコマンドを繰り返し実行します。例えば、4jと入力したら、カーソルを下に4行移動します。3wと入力したら、カーソルを3つ後の単語の先頭に移動します。

文字列の検索に関するコマンド

viのコマンド
コマンド 説明
/ テキストの下へ向かって文字列を検索します。
? テキストの上へ向かって文字列を検索します。
n 直前に行った検索を繰り返します。
N 直前に行った検索を反対方向に繰り返します。

/? を押すと、カーソルが画面の最下行に移動します。この行は編集しているテキストの中身とは別で、コマンドの続きを入力するための行です。ここで検索する文字列を入力してからEnterキーを押すと、指定した文字列を検索します。検索した文字列が見つかると、その位置にカーソルが移動します。

画面の最下行で検索する文字列を入力せずにEnterキーを押すと、前回検索した文字列を再度検索します。これは n コマンドと同じ動作です。

exモードのコマンド一覧

exモードのコマンド
コマンド 説明
! コマンド名 指定したUNIXコマンドを実行します。
e ファイル名 新しいファイルの編集に移ります。
r ファイル名 指定したファイルをカーソルの下に読み込みます。
r! コマンド名 UNIXコマンドを実行して、その結果をカーソルのある行の下に付け加えます。
s/文字列1/文字列2/ カーソルがある行の 文字列1文字列2 に置き換えます。
%s/文字列1/文字列2/g ファイル中の全ての 文字列1文字列2 に置き換えます。
q viエディタを終了します。
set viの環境を設定する。
w writeの省略形
write テキストの内容をファイルに保存する。

setコマンドで設定した内容は、viの起動中のみ有効です。いったんviを終了して再度viを起動した際には、あらためて設定しなおさなければなりません。viを起動するたびに設定を有効にするには、環境設定ファイルにsetコマンドを記述します。

viの環境を設定する

setコマンドでviの環境を設定できる。

set property
property
設定するプロパティを指定する。
プロパティ 説明
autoindent 挿入モードで次の行に移動したとき、カーソルの位置を前の行の空白に揃えます。
noautoindent 自動的にインデント(字下げ)を行わないようにします。(デフォルト)
number 行番号を表示するようにします。
nonumber 行番号を表示しないようにします。(デフォルト)
ignorecase 文字列を検索する際、大文字と小文字を区別しません。例えば文字列 "vi" を検索すると、"vi" だけでなく "VI""Vi" も検索対象になります。
noignorecase 文字列を検索する際、大文字と小文字を区別します。(デフォルト)
showmatch 括弧の対応を自動的にチェックします。挿入モードで閉じた括弧を入力すると、それに対応する開いた括弧に瞬間的にカーソルがジャンプします。
noshowmatch 括弧の対応をチェックしません。(デフォルト)
showmode 挿入モードのときに、現在のモードが挿入モードである旨を画面下部に表示するようにします。
noshowmode 挿入モードのときに、現在のモードが挿入モードである旨を画面下部に表示しないようにします。(デフォルト)
tabstop=数値 タブを何文字分にするか指定します。

viで改行したときに自動的にインデントを行うよう設定する例を示す。

:set autoindent

ファイルの保存

write(省略形はw)コマンドでファイルを保存できる。

write [filename]
filename
保存するファイル名を指定する。viを起動するときにファイル名を指定した場合は、ファイル名の指定を省略することもできるし、別のファイル名を指定することもできる。viを起動するときにファイル名の指定を省略した場合は、ファイル名の指定を省略できない。

テキストの内容を指定したファイル名で保存する例を示す。

:w /home/marina/foo.txt

viの環境設定ファイル

viのsetコマンドで行う環境設定を .exrc というファイル名で作成して、ホームディレクトリに配置しておくと、viを起動するたびにその設定が有効になります。次に.exrcの内容例を示します。

set number
set autoindent
set ignorecase
スポンサーリンク