Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  UNIXの教科書 基礎編

UNIXの教科書
〜はじめよう! WindowsとLinuxからのステップアップ〜

第5日目:viエディタの操作(基本編)

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
第5日目:viエディタの操作(基本編)
今回はUNIX系OSにおける定番テキストエディタのひとつであるviエディタについて説明します。非常に高機能なテキストエディタですが、慣れるのに多少時間がかかるかもしれません。今回は基礎編ということで、基本的な操作にしぼって解説していくことにしましょう。
UNIXの教科書〜はじめよう! WindowsとLinuxからのステップアップ〜 5日目
viを使ってみよう
viでテキストファイルを編集する
2008年3月
大津 真

UNIXの教科書:登場人物紹介 このリンクをクリックすると、新しいウィンドウが開きます

マリー先生
マリー先生:
今回は、UNIXにおけるテキストエディタの西の横綱ともいえるviエディタ(以下、vi)について説明しましょう。viは、最初はちょっととっつきにくい印象があるかもしれないけれど、慣れてくるに従って手放せないツールとなること請け合いよ! なお、東の横綱といえるのがemacsエディタです。viとemacsはどちらも熱狂的なユーザを抱えていて、どちらが優れているかという話になると白熱した議論が朝まで……ということにもなりかねないので注意してね。

その前に、前回の説明に関してなにか質問ありますか?
タックス君:
前回学習したmvコマンドと「?」や「*」といったワイルドカードを使用して、ファイルの拡張子をまとめて変更するということはできるのでしょうか? たとえば、カレントディレクトリの下に「.text」という拡張子のファイルが複数あったとして、それらをまとめて「.txt」という拡張子へ変更するのに、次のようにすることはできますか?

$ mv *.text *.txt
タックス君
マリー先生
マリー先生:
それは無理ね。ワイルドカード「*」はmvコマンドではなくシェルによって展開されるから。たとえばカレントディレクトリに「a.text」「b.text」、「c.txt」というファイルがあると、次のように展開されてしまうの。

$ mv a.text b.text c.txt

mvコマンドは引数にファイルを2つしか指定できないので、これを実行するとエラーになってしまうわ。拡張子をまとめて変更するといった処理は、普通はシェルスクリプトと呼ばれるシェルを使ったプログラムを作成して、for文という繰り返しを制御するコマンドで行う必要があるの。

今日の時間割 viを使ってみよう viでテキストファイルを編集する 練習問題

1時間目:viを使ってみよう

viが、Windowsの「メモ帳」のようなGUIのテキストエディタに比べて習得に時間が多少かかる理由のひとつに、「インサートモード」と「コマンドモード」という2つのモードの存在があります。両者の相違を理解し、現在どちらのモードにいるかを把握しておくことがvi使いになるための最初の関門といえます。まずはその相違について説明し、その後でviの起動と終了方法について説明しましょう。

インサートモードとコマンドモード

インサートモードとコマンドモードの相違は、ユーザがキーボードからタイプした文字がviでどのように扱われるかです。まずインサートモード(テキスト入力モード)ですが、これは一般的なGUIのテキストエディタと同じく、タイプした文字がカーソル位置に挿入されていくモードです。それに対してコマンドモードはタイプした文字がviに対するコマンド、つまり指令として扱われるモードです。たとえば、インサートモードでユーザが「x」をタイプすると「x」という文字がカーソル位置に挿入されます。それに対して、コマンドモードでは「x」コマンドとして扱われます。この「x」コマンドはカーソル位置の文字を削除するコマンドです。

インサートモードとコマンドモードとでは同じ文字をタイプしても扱われ方が違う
図1:インサートモードとコマンドモードとでは同じ文字をタイプしても扱われ方が違う

四色君:
なぜ、コマンドモードが必要なのですか?
四色君
マリー先生
マリー先生:
ひとつには、GUIのエディタと違って、ターミナル上で動作するviにはメニューがないし、マウスも使えないからよ。なんらかの方法でコマンドを入力しなければいけないわけ。
タックス君:
でも、普通のキーボードには文字の削除用にDeleteキーがあるし、カーソルの移動は矢印キーでできるような気がするのですが……。
タックス君
マリー先生
マリー先生:
設定によっては、文字の削除やカーソルの移動にはそれらのキーが使えるわ。でも、viを終了したりファイルを開いたりといった操作や、文字列の検索や置換にはコマンドを実行する必要があるでしょう?
タックス君:
コマンドの入力を、CtrlキーやAltキーとのキーコンビネーションで行うタイプのテキストエディタもありますよね。
タックス君
マリー先生
マリー先生:
そうね、viのライバルといえるemacsなんかはそのタイプね。
四色君:
あと、HP-UXにもCDE上で動作するGUIのテキストエディタもありますよね?
四色君
マリー先生
マリー先生:
GUI環境が利用できるケースではCDEのテキストエディタを使ってかまわないわ。ただしシステム管理者になると、別のホストからリモートログインしてシステムをメインテナンスするという状況も少なくないので、viの基本的な使い方くらいはマスターしておいたほうがいいわね。

viを起動する

前置きはこれくらいにして、実際にviエディタを使ってみましょう。viを起動してファイルを編集するには、次の書式でviコマンドを実行します。

vi ファイルのパス

引数に存在しないファイルを指定した場合には、新規のファイルが作成されます。たとえば、存在しないファイル「test.txt」を引数に、「vi test.txt 【Enter】」を実行すると次のような画面になります。

存在しないファイルを指定すると新規のファイルを作成して起動する
図2:存在しないファイルを指定すると新規のファイルを作成して起動する

カーソルが左上隅で点滅し、その下の各行の先頭には「~」が表示されています。これは実際にその行に「~」という文字が格納されているわけではありませんので注意してください。viの編集画面では、「~」は、まだなにも入力されていない行を表します。なお、編集中のファイルは「バッファ」と呼ばれるメモリ上の一時的な領域に格納され、保存コマンドを実行するまでファイルに書き込まれません。

インサートモードに移行する

起動した直後のviはコマンドモードになっていますので、文字を入力するためにはインサートモードに移行する必要があります。ここで、「i」をタイプしてみてください。「i」はインサートモードに移行するためのコマンドのひとつです。画面には何の変化もありませんが、モードはインサートモードになるはずです。試しに、適当な文字列をタイプしてみましょう。今度はタイプした文字がカーソル位置に挿入されます。

インサートモードでは文字がカーソル位置に挿入される
図3:インサートモードでは文字がカーソル位置に挿入される

続いて、再びコマンドモードに戻ってみましょう。インサートモードからコマンドモードに移行するにはescキーを押します。するとカーソルが1文字文戻りますが、他に見た目上の変化はありません。ただし、モードは確実にコマンドモードです。試しに「h」をタイプしてみましょう。「h」はカーソルを1文字左に移動するコマンドです。「h」をタイプするごとにカーソルが左に移動していきます。

Hello UNI[X]
	↓	「h」をタイプ【Enter】
Hello UN[I]X
	↓	「h」をタイプ
Hello U[N]IX
※[]はカーソルです

ここまでの説明で、インサートモードとコマンドモードの相違がなんとなく理解できたでしょうか? インサートモードとコマンドモードの行き来をなんども繰り返して確実に覚えるようにしてください。

「i」コマンドとescキーとでモードを行き来する
図4:「i」コマンドとescキーとでモードを行き来する

タックス君:
どちらのモードにいるのかわからない場合は?
タックス君
マリー先生
マリー先生:
モードがわからなくなったら、とりあえずescキーを押してみるといいわ。コマンドモードにいるときにescキーを押してもモードは変わらないので、どちらのモードにいる場合でもescキーを押すとコマンドモードになるというわけね。

バッファの内容をファイルに書き込んでviを終了する

次に、viを終了してみましょう。まず、コマンドモードで「:」をタイプします。 すると最下行の左に「:」が表示されます。

コマンドモードで「:」をタイプする
図5:コマンドモードで「:」をタイプする

続いて「wq」とタイプして【Enter】キーを押します。「w」はファイルの書き込み(Write)、「q」は終了(Quit)の略です。

「:」に続けて「wq」とタイプするとファイルに書き込み・終了
図6:「:」に続けて「wq」とタイプするとファイルに書き込み・終了

変更内容をファイルに書き込まずに終了する

なお、バッファの内容を破棄してviを終了するには「:q」コマンドを実行します。このときファイルが編集されていた場合には、誤って変更内容を破棄するのを防ぐため終了できないようになっています。強制的に終了するには最後に「!」を付けて、「:q!」とします。

マリー先生
マリー先生:
viの前身はexエディタという「ラインエディタ」なの。viのコマンドモードで「:」をタイプすると、exエディタのコマンドを実行する、いわゆる「exモード」に移行するのね。exモードでは「w」はファイルの書き込み、「q」は終了するためのコマンドなわけ。
四色君:
ラインエディタって何ですか?
四色君
マリー先生
マリー先生:
一般的なテキストエディタのように、画面全体にファイルの内容が表示されて、カーソルを動かしながら自由に編集できるテキストエディタを「スクリーンエディタ」と呼ぶの。ラインエディタは、スクリーンエディタが一般的になる前に使用されていたタイプのテキストエディタで、コマンドと数値で行を指定して、内容を表示させたり、置換や挿入をしたりといった編集を行うものよ。現在ではラインエディタそのものが使用されることはあまりないけど、viは、ファイルの書き出しや、viの終了、文字列の検索や置換といった処理にexエディタのコマンドを引き継いでいるの。それから、「:wq」の代わりに「ZZ」コマンドを実行してもviを終了できるわよ。

インサートモードに移行するためのコマンドたち

前述の例ではインサートモードに移行するのに「i」コマンドを使用しました。「i」コマンドは、現在のカーソル位置に文字を入力します。それ以外にも多くのインサートモードに移行するコマンドが用意されていますので、適宜使い分けるようにしましょう。

コマンド インサートモードに移行したときの状態
i カーソル位置に文字を入力する
a カーソルの右側に文字を入力する
I 現在行の先頭に文字を入力する
A 現在行の末尾に文字を入力する
o 現在行と次の行の間に行を挿入する
O 現在行と前の行の間に行を挿入する
表1:インサートモードに移行するためのコマンド

たとえば「o」コマンドは、現在行の下に新たな行を挿入した状態で、インサートモードに移行します。

line1[ ]
line2
↓	「o」コマンド【Enter】
line1
[ ]
line2
※[]はカーソルです
四色君:
viのコマンドは大文字/小文字を区別するのですか?
四色君
マリー先生
マリー先生:
するわよ。たとえば「o」コマンドと「O」コマンド(Shiftキーを押しながらOキーを押す)は、どちらもインサートモードに移行するコマンドだけど、前者はカーソル位置の次の行に、後者は前の行に新しい行を挿入するの。

休み時間:CDEのテキストエディタ

CDE環境には、Windowsのメモ帳に似たシンプルなテキストエディタである「テキスト・エディタ」(dtpad)が用意されています。

CDEで利用できる「テキスト・エディタ」
図7:CDEで利用できる「テキスト・エディタ」

「テキスト・エディタ」は、パネルのアイコンをクリックして起動します。あるいは、ターミナルのコマンドラインで、次のように実行すると指定したパスのファイルを開くことができます。

$ dtpad ファイルのパス

連載記事一覧 1  |  2 次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

オンラインサポート
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項