viはページャであり、エディタ(編集コマンド)でもあります。
viでファイルを開いた場合はコマンドモードと言って、ページングによる行やページ単位の移動や、行の削除、コピー、カット、ペーストなどの編集操作を行うことができるモードと文字入力を受け付けるインサートモードがあります。
エディタを開始する方法は、viコマンドに続いて編集したいファイルのファイル名を指定することで作業を開始できます。エディタを終了する方法は「コマンドモード」で終了コマンドを実行することでviエディタによる編集作業を終えることができます。
【頻繁に使う操作】
ファイルを開く
viコマンドでファイルを開くにはviコマンドの後に編集したいファイルを指定します。すると、以下のような画面が表示されます。
1 |
vi ファイル名 |
ファイルを閉じる
viコマンドを使って開いたファイルを閉じるには、Escキーを押した後、:qと入力します。qはquitの略です。
【演習】
viで/etc/hostsファイルを開いて、閉じてみましょう。
※編集はしないようにしてください。
ファイルを保存する/保存して終了する
viコマンドを使って開いたファイルを保存するには、Escキーを押した後、:wと入力します。
wはwriteの略です。ファイルに変更内容が書き込まれて、編集作業を継続できます。
保存して終了する場合は、:wqと入力します。
ファイルを保存せずに強制的に保存する
viコマンドを使って開いたファイルを保存せずに閉じるには、Escキーを押した後、”q!”と入力します。
通常、編集済みのファイルはそのまま閉じることはできません。:qコマンドのあとに”!”をつけることで、ファイルを保存せずに強制的に終了できます。
【演習】
viを使って、様々な操作を行ってみましょう。
1.viでeditfile.txtを作成し、インサートモードに切り替えて”Apple”と入力した後コマンドモードに切り替えてファイル保存してみましょう。
2.次の行に移動して、インサートモードに切り替えて”Orange”を追記した後、コマンドモードに切り替えて:qを行ってみましょう。その後:wqを行ってみましょう。
3.さらに次の行に移動して、インサートモードに切り替えて”Banana”と追記した後、コマンドモードで保存せずに強制終了してみましょう。
編集中の大きな移動
viコマンドは小さなファイルから大きなファイルまで編集することができます。1画面に収まらないような大きなファイルを編集する場合は、1文字ずつカーソルを移動するのは大変です。ページ単位で移動するコマンドや、指定の行へ移動するコマンドや、目的の文字列へ移動するコマンドを使います。
ページ単位の移動
素早く編集するために、画面をページ単位で前後するコマンドを使います。
次のページへの移動は Ctrl+F、前のページへの移動は Ctrl+B コマンドです。
【演習】
/var/log/dmesgログファイルをviで開き、上記のコマンドでページ移動してみましょう。
操作を終えたら、保存せず強制終了してください。
行を指定した移動
素早く編集を行うために、指定行へのカーソルを移動するコマンドを使います。
ファイルに行番号を表示させるときは[:set nu]、ページ番号を消すには[:set nonu]をコマンドモードで入力します。
指定行への移動は”:行番号”で移動します。
また、文書の頭に戻るにはggコマンド、文書の末尾に移動するにはGコマンドを実行します。
【演習】
/var/log/dmesgログファイルをviで開き、上記のコマンドでページ移動してみましょう。
操作を終えたら、保存せず強制終了してください。
様々な編集操作
viの編集の基礎であるカットやペースト、コピー、アンドゥについて説明します。
【演習】
viコマンドで以下のファイルを作成してください。(※わざと間違えています。)
上記のコマンドを用いて、正しく修正してみましょう。
また、カットやコピー、ペーストを用いてファイルを編集してみましょう。
置換と検索
巨大であったり、全体像を把握していないファイルにおいて、カーソル移動やページ移動のコマンドだけを駆使して目的の位置にたどり着くのは非常に困難です。Viエディタでは、テキストファイルの中にある文字列を検索するコマンドを使うと、素早く目的の位置に移動することができます。また、置換コマンドを使えば、文章中の文字列を探して別の文字列に置き換えることもできます。
テキストの中から目的の文字列へカーソルを移動するためには、/コマンドを使います。
/コマンドの後検索したい文字列を続けて入力します。
1 |
/文字列 |
【演習】
viコマンドで/var/log/dmesgファイルを開き、このファイルからCPUという文字列を検索してみましょう。
文字列の置換
Viコマンドでは文字の置換を行うことも簡単です。置換する対象は行範囲を指定することも文章全体を対象にすることもできます。
1 |
対象の行s/検索文字列/置換文字列/オプション |
【演習】
Viコマンドで以下のファイルを作成してください。
①1行目のbananaをBANANAに置換してみましょう。②2行目のorangeをORANGEに置換してみましょう。③3行目の全てのbananaをBANANAに置換してみましょう。
④ファイル全体のmelonを*MELON*に置換してみましょう。
⑤gcオプション付きで確認しながら、ファイル全体のlemonを@LEMON@に置換してみましょう。