viはテキストエディタ(テキストを編集するプログラム)です。viエディタを使って、ファイルの作成、編集及び保存を行うことができます。Linuxでは、viがあらかじめインストールされていてます。Microsoft Windowsでは、viから派生したVimをインストールすることで使うことができます。
vimの起動方法を次に示します。
vim [options] [filename]
vi [options] [filename]
viを起動するときにファイル名を引数に指定することができます。既存ファイルのファイル名を指定したときは編集、存在しないファイル名を指定したときは新規作成になります。
ファイル名を省力した場合は、ファイル名を決めずにファイルの編集を行います。このときは、ファイルを保存する際にファイル名を指定します。
viには、コマンドモードと挿入モードという2種類の状態があります。viを起動した時点ではコマンドモードになっています。
コマンドモードのときにキーボードから何らかのキーを押すと、それはviのコマンドと解釈されます。たとえば、i
のキーを押すと、現在のモードをコマンドモードから挿入モードに切り替えるコマンドと解釈されます。
挿入モードのときにキーボードから何らかのキーを押すと、その文字が画面に表示されます。つまり、テキストの入力と解釈されます。ただし、Esc
キーを押した場合は、現在のモードを挿入モードからコマンドモードへ切り替えるコマンドと解釈されます。
現在のモードがコマンドモードと挿入モードのどちらであるかは、デフォルト(初期状態)では画面に表示されません。
viのコマンドはコマンドモードのコマンドとexモードのコマンドの2種類があります。
現在の状態が挿入モードの場合、Escキーを押すと、コマンドモードに切り替わる。
コマンド | 説明 |
---|---|
. |
テキストの変更を繰り返します。 |
: |
exモードに移ります。exモードに移ると、カーソルは最下行に移動します。exモードのコマンドはこの行に入力します。 |
? |
テキストの上へ向かって文字列を検索します。 |
~ |
カーソルがある文字の大文字/小文字を変換します。 |
a |
カーソルの後ろにテキストを追加します。 |
A |
行の末尾にテキストを追加します。 |
cc |
1行を別のテキストに置き換えます。S コマンドと同じです。 |
cw |
単語を削除し、挿入モードになる。 |
d + 移動コマンド | カーソルから移動先までを削除して、バッファに記憶します。 |
^g |
現在編集しているファイルのファイル名、現在カーソルがある行番号、全体の行数、表示しているファイルの割合などを表示します。 |
i |
カーソルの位置にテキストを挿入します。 |
I |
行の先頭にテキストを挿入します。 |
n |
直前に行った検索を繰り返します。 |
N |
直前に行った検索を反対方向に繰り返します。 |
o |
カーソルの下に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。 |
O |
カーソルの上に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。 |
r + 1文字 |
カーソルの文字を置き換えます。挿入モードにならずに文字を変更することができます。 |
R |
カーソルの位置にテキスト上書きします。コマンドモードから挿入モードへ切り替わります。 |
u | 直前に行ったコマンドを取り消します。取り消せるのはテキストの変更に関するコマンドで、カーソルの移動などのコマンドは取り消せません。 |
s |
カーソルの1文字を削除し、コマンドモードからテキスト挿入モードへ切り替わります。 |
S |
1行を別のテキストに置き換えます。cc コマンドと同じです。 |
U | カーソルがある行に対する変更を全て取り消し、元の状態に戻します。 |
x | カーソル位置の1文字を削除します。また、削除した文字をバッファに記憶します。 |
X | カーソルの1つ前の文字を削除します。また、削除した文字をバッファに記憶します。 |
y + 移動コマンド | カーソルから移動先までをバッファに記憶します。 |
yy | カーソルがある行をバッファに記憶させる。 |
vi でコマンドモードから挿入モードへ切り替えるコマンドには次のものがある。
コマンド | 説明 |
---|---|
A |
行の末尾にテキストを追加します。 |
cc |
1行を別のテキストに置き換えます。S コマンドと同じです。 |
cw |
単語を削除し、挿入モードになる。 |
I |
行の先頭にテキストを挿入します。 |
R |
カーソルの位置にテキスト上書きします。コマンドモードから挿入モードへ切り替わります。 |
o |
カーソルの下に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。 |
O |
カーソルの上に新しい行を追加し、コマンドモードから挿入モードへ切り替わります。 |
s |
カーソルの1文字を削除し、コマンドモードからテキスト挿入モードへ切り替わります。 |
S |
1行を別のテキストに置き換えます。cc コマンドと同じです。 |
vi/vim においてカーソルを移動するキーの割り当てのイメージ図を次に示す。
コマンドモードのとき、カーソルを左に1文字移動する。
h
コマンドの前に数字を入力することで、移動する文字数を指定することができる。
10h
コマンドモードのとき、カーソルを下に1行移動する
j
コマンドの前に数字を入力することで、移動する行数を指定することができる。
10j
コマンドモードのとき、カーソルを上に1行移動する
k
コマンドの前に数字を入力することで、移動する行数を指定することができる。
10k
コマンドモードのとき、カーソルを右に1文字移動する
l
コマンドの前に数字を入力することで、移動する文字数を指定することができる。
10l
カーソルを単語の先頭へ移動する。カーソルが既に単語の先頭にある場合は、前の単語の先頭へ移動する。
b
カーソルを単語の末尾へ移動する。カーソルが既に単語の末尾にある場合は、次の単語の末尾へ移動する。
e
コマンドモードのとき、カーソルを次の単語の先頭へ移動する。
w
コマンドの前に数字を入力することで、移動する単語数を指定することができる。
10w
行の最初の空白やタブでない文字へカーソルを移動する。
_
コマンドモードのとき、カーソルを行の先頭へ移動する。
0
コマンドモードのとき、カーソルを行の末尾へ移動する。
$
コマンドモードのとき、カーソルを次の行の先頭へ移動する。
+
コマンドモードのとき、カーソルを前の行の先頭へ移動する。
-
カーソルが括弧にあるとき、対応する括弧へ移動する。
%
vi/vim で画面を次のページにスクロールするには、コマンドモードのときに Ctrl + f キーを押下する。
^f
vi/vim で画面を前のページに逆スクロールするには、コマンドモードのときに Ctrl + b キーを押下する。
^b
コマンドモードのとき、挿入モードに切り替えて、カーソルの位置にテキストを挿入する。
i
コマンドモードのとき、挿入モードに切り替えて、カーソルの後ろにテキストを追加する。
a
カーソルがある行を削除する。削除した行はバッファに記憶される。
dd
コマンドの前に数字を入力することで、削除する行数を指定することができる。
10dd
コピーまたはカットによりバッファに記憶させた内容を、カーソルの下に書き出す。
p
コピーまたはカットによりバッファに記憶させた内容を、カーソルの上に書き出す。
P
ファイルを保存して、viまたはvimエディタを終了する。
ZZ
vi でカーソルを移動するコマンドには次のものがある。
コマンド | 説明 |
---|---|
$ |
カーソルを行の末尾へ移動します。 |
% |
カーソルが括弧にあるとき、対応する括弧へ移動します。 |
+ |
カーソルを次の行の先頭へ移動します。 |
- |
カーソルを前の行の先頭へ移動します。 |
_ |
カーソルを行の最初の空白やタブでない文字へ移動します。 |
0 |
カーソルを行の先頭へ移動します。 |
b |
カーソルを単語の先頭へ移動します。既にカーソルが単語の先頭にある場合は、前の単語の先頭へ移動します。 |
e |
カーソルを単語の末尾へ移動します。既にカーソルが単語の末尾にある場合は、次の単語の末尾へ移動します。 |
G |
行数を入力してGを押すと、指定した行にカーソルを移動します。たとえば、120G と入力すると、カーソルを120行目へ移動します。 |
数字に続けてコマンドを入力すると、その数だけコマンドを繰り返し実行します。例えば、4j
と入力したら、カーソルを下に4行移動します。3w
と入力したら、カーソルを3つ後の単語の先頭に移動します。
テキストの下方向へ向かって、指定した文字列を検索する。
/string
テキストの上方向へ向かって、指定した文字列を検索する。
?string
直前に行った検索を繰り返す。
n
直前に行った検索を反対方向に繰り返す。
N
/
や ?
を押すと、カーソルが画面の最下行に移動します。この行は編集しているテキストの中身とは別で、コマンドの続きを入力するための行です。ここで検索する文字列を入力してからEnterキーを押すと、指定した文字列を検索します。検索した文字列が見つかると、その位置にカーソルが移動します。
画面の最下行で検索する文字列を入力せずにEnterキーを押すと、前回検索した文字列を再度検索します。これは n
コマンドと同じ動作です。
コマンド | 説明 |
---|---|
e ファイル名 | 新しいファイルの編集に移ります。 |
r ファイル名 | 指定したファイルをカーソルの下に読み込みます。 |
r! コマンド名 | UNIXコマンドを実行して、その結果をカーソルのある行の下に付け加えます。 |
q | viエディタを終了します。 |
set | viの環境を設定する。 |
w | writeの省略形 |
write | テキストの内容をファイルに保存する。 |
カーソルがある行の 文字列1 を 文字列2 に置き換える。
s/文字列1/文字列2/
ファイル中の全ての 文字列1 を 文字列2 に置き換える。
%s/文字列1/文字列2/g
指定したLinuxコマンドを実行する。
!ls -l
行数を入力してGを押すと、指定した行にカーソルを移動する。たとえば、120G
と入力すると、カーソルを120行目へ移動する。
120G
コロンに続いて行番号を入力してEnterキーを押すと、指定した行番号へカーソルを移動する。
:100
viまたはvimを終了する。
:q
ファイルを編集した場合、ファイルが保存されていない旨のメッセージが表示され、viまたはvimを終了できない。
編集済みのファイルを保存せずにviまたはvimを終了するには、q! コマンドを使う。
編集したファイルを保存せずにviまたはvimを終了する。
:q!
viで改行したときに自動的にインデントを行うよう設定する例を示す。
:set autoindent
挿入モードで次の行に移動したとき、カーソルの位置を前の行の空白に揃えます。
set
コマンドで設定した内容は、viの起動中のみ有効です。いったんviを終了して再度viを起動した際には、あらためて設定しなおさなければなりません。viを起動するたびに設定を有効にするには、環境設定ファイルにset
コマンドを記述します。
自動的にインデント(字下げ)を行わないようにします。(デフォルト)
:set noautoindent
文字列を検索する際、大文字と小文字を区別しません。例えば文字列 "vi"
を検索すると、"vi"
だけでなく "VI"
や "Vi"
も検索対象になります。
:set ignorecase
文字列を検索する際、大文字と小文字を区別します。(デフォルト)
:set noignorecase
行番号を表示する。
:set number
行番号を表示しない。(デフォルト)
:set nonumber
括弧の対応を自動的にチェックします。挿入モードで閉じた括弧を入力すると、それに対応する開いた括弧に瞬間的にカーソルがジャンプします。
:set showmatch
括弧の対応をチェックしません。(デフォルト)
:set noshowmatch
挿入モードのときに、現在のモードが挿入モードである旨を画面下部に表示するようにします。
:set showmode
挿入モードのときに、現在のモードが挿入モードである旨を画面下部に表示しないようにします。(デフォルト)
:set noshowmode
タブを何文字分にするか指定します。
:set tabstop=4
:set tabstop=8
viまたはvimを起動するときにファイル名を指定した場合は、ファイル名を指定せずにファイルを保存できる。
:write
ファイルの保存は頻繁に行う操作なので、コマンドの省略形も用意されている。
:w
viまたはvimを起動するときにファイル名の指定を省略した場合は、ファイルを保存するときにファイル名を指定する必要がある。
viまたはvimを起動するときにファイル名を指定した場合は、ファイル名の指定を省略することもできるし、別のファイル名を指定することもできる。
:write example.txt
ファイルの保存は頻繁に行う操作なので、コマンドの省略形も用意されている。
:w /home/tsuka/example.txt
:wq
:wq example.txt
viのsetコマンドで行う環境設定を .exrc というファイル名で作成して、ホームディレクトリに配置しておくと、viを起動するたびにその設定が有効になります。次に.exrcの内容例を示します。
set number
set autoindent
set ignorecase