付録:vi コマンド


viとは?

vi とは、おそらく全てのUNIX系 OS 上で使えるテキストエディタです。世界には、さまざまなエディタが存在し、有名な所では emacs/xemacs、 Windowsのメモ帳(notepad)、 秀丸エディタ 等があります。多くの文章をタイプしない方であれば、メモ帳(notepad)で十分かもしれません。しかしプロのソフトウェア開発者や敏速な設定変更を余儀なくされる管理者の方にとって、使い慣れたテキストエディタが無いということは命取りとも成りかねます。その中でも少ないキーストロークでの編集作業や、カスタマイズ性に富んだエディタが vi です。

vi は Java、BSD、csh 等で有名な Sun Microsystems の Bill Joy 氏が 1976 年に作り始め、その後は UNIX 系 OS では標準のエディタとして君臨して来ました。さらには vi クローンと呼ばれる vi に似せたエディタまで登場し始めました。現在、viクローンとして代表的なものとしてnvi, vim, vileやelvisなどが挙げられます。

vi は他のエディタと異なり、「コマンドモード」(ex)と「入力モード」(vi)と言う二つのモードを切り替えながら使用します。この特異な操作方法で敬遠しがち人も多いですが、Linuxを使う上で最低限の操作方法を知っておいても損はないでしょう。

起動

※"vi"と書かれたところを"ex"と置き換えればコマンドモードで起動できます。

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

カーソル移動

h , BS 1文字左へ移動(←)
j , Ctrl + N 1行下へ移動(↓)
k , Ctrl + P 1行上へ移動(↑)
l , SPACE 1文字右に移動(→)
H画面の最上行に移動
M画面の中央行に移動
L画面の最下行に移動
Gファイルの最終行に移動
nGファイルのn行目に移動
 
0行の頭へ移動
$行の最後へ移動
 
Ctrl + F 1ページ下へ
Ctrl + B 1ページ上へ
Ctrl + D 半ページ下へ
Ctrl + U 半ページ上へ

入力・編集

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

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

削除

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

検索

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

置換

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

大文字/小文字を変更する

カットアンドペースト

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

Undo, Redo

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

ファイル操作

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

終了

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

UNIXコマンドの実行

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

その他

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