ファイルの中を見る

viエディタは、vi, view, exのコマンドを提供しています。 最初は、読込専用のviewを使ってファイルの中身を覗いてみましょう。

/etc/protocolsファイルの内容を見てみましょう。 端末ソフトから以下のコマンドを入力入力して下さい。 *1

$ view  /etc/protocols

th_Fig1.jpg

画面の一番下には、ファイル名、"[readonly]"、行数、文字数が表示されます(図1参照)。 viewコマンドを使うことでファイルが読み込み専用として扱われていることがこれで分かります。

画面スクロール

矢印キーでカーソルを動かし、画面をスクロールさせることも可能ですが、 スクロールコマンドを使うと素速くスクロールさせることができます。 順方向のスクロールにはコントロールキーとfキーを同時に押す (以降Ctrl-F形式で表し、慣例でコントロールキーの後のキーは大文字で表記します。) ことで、最後の2行が重なるようにスクロールします。 逆方向の複ロールは、Ctrl-Bです。

プログラムを追いかけるときには、1画面ではなく、ページの半分を動かしたくなりますが、 このような場合には、Ctrl-D(順方向半画面スクロール)とCtrl-U(逆方向半画面スクロール) を使います。

viでは、通常コマンドの前に数値を入力するとその回数分繰り返すとか行数を指定する意味に 解釈されます。 2Ctrl-Fと2画面分順方向にスクロールし、20Ctrl-Dとすると20行分順方向にスクロールします。 色々試してみて下さい。

表示画面が一部でファイルの終わりになった場合には、残りの行にはチルダ−(~)が表示されます(図2参照)。

th_Fig2.jpg

また、行が長くてすべてを表示できない場合には、表示できない行を@で表示します(図3参照)。 *2

th_Fig3.jpg

指定した行を表示

コンパイルエラー等で表示したい行数が分かっている場合には、行番号に続けてGを入力します。 行番号も一緒に表示するには、:set numberまたは省略して:set nuと改行を入力します(図4参照)。 *3

th_Fig4.jpg

行番号表示では、行番号の列と内容が重ならないように表示されます(図5参照)。 *4

th_Fig5.jpg

行番号表示を解除して、元に戻すには、:set nonumberまたは省略してset nonuと入力します。

Gコマンドで行番号を指定しないと最後の行にカーソルが移動します。また、exモードで :行番号と改行を入力することもできます。

タブを見る

タブ区切りのデータファイルやMakefileでは、タブキーが重要な役割をしますが、 通常の画面表示では、タブの場所が確認できません。

:set listと改行を入力するとリスト表示に切り替わります。 タブキー等のコントロールコードは、^+コントロールコード形式で表示され、 タブの場合、^Iと表示されます。また、行の終わりには$が追加されます(図6参照)。

th_Fig6.jpg

リスト表示から通常の表示に戻すには、:set nolistと改行を入力します。

文字列の検索

ファイルの中身を見るときによく使うのが、文字列検索です。

viエディタでは、/の後に検索する文字列を入力して改行を押すことで、 文字列検索ができます。 また、ファイルの先頭に方向に向かって検索する場合には、?の後に検索する文字列を入力します。

早速、/etc/protocolsファイルで試してみましょう。 /protocol改行と入力すると2行目のprotocolsの先頭にカーソルが移動します。

同じ検察文字列を続けてサーチするには、nを押します。検索したときと逆方向に サーチするには、Nを押します。

検索文字がファイルの終わりに達したら、またファイルの先頭から検索します。 その時、以下のメッセージを表示します。

search hit BOTTOM, continuing at TOP

/etc/protocolsでprotocolという文字列は多く現れていますので、検索の練習によいでしょう。

エディタの終了

これまで、viewを使ってファイルの中身を見てきましたが、エディタを終了には:qと改行を入力します。

viでは、ファイルの内容を変更した後に、保存しないで終了しようとすると図7の様な警告が表示されます。

E37: No write since last chage (add ! to override)

ファイルへの変更を保存しないで、強制的に終了する場合には、:q!改行のようにコマンドの後に!を付けます。

th_Fig7.jpg

複数のファイルを扱う

viewを含めviエディタでは複数のファイルを扱うことができます。

例として、/etc/apache2でhttpd関連の設定ファイルの中身を見てみましょう。

端末ソフトで以下の様に入力してください。MacOSXの場合、最初に/etc/apache2/httpd.conf が表示されました。

$ view /etc/apache2/httpd*.conf

どんなファイルを表示しようとしたかは、:argsと改行で知ることができます。 []で括られたファイルが現在表示しているファイルです。改行を押すと元の画面に戻ります。

th_Fig8.jpg

次のファイルに切り替えるには、:nと改行を入力し、一つ前のファイルに切り替える場合には:Nと改行を入力します。

他のviコマンドと同様にnやNの前に数値を入力するn個後のファイルやn個前のファイルに切り替えることができます。 試しに、上記の状態で:3nと改行を入力してみます。 ファイルが3つ後のhttpd_corecollaboration_webauth.confに切り替わりました。 :argsと改行を入力すると、httpd_corecollaboration_webauth.confが[]で囲まれています。

httpd.conf httpd_ACSServer.conf httpd_corecollaboration_required.conf [httpd_cor
ecollaboration_webauth.conf] httpd_corecollaboration_webcal.conf httpd_deviceman
agement.conf httpd_mailman.conf httpd_passwordreset_required.conf httpd_podcastl
ibrary.conf httpd_webdavsharing.conf httpd_webdavsharing_sharepoints.conf httpd_
webdavsharing_template.conf httpd_webmailserver.conf
Press ENTER or type command to continue

また、最初のファイルから見直す場合には、:rewまたは:rewindと改行を入力します。

複数ファイルを表示している途中(最後のファイルを表示する前)で終了しようとすると、 以下のエラメッセージを表示します。 この場合、:q!と改行で終了できます。

E173: xx more fiels to edit

ファイルの中身を見るのに使ったコマンド一覧

これまで、使ってきたviewのコマンドを表1にまとめて示します。

コマンドの機能呼び出し形式使用例
viewの起動view ファイル名...view /etc/protocols: /etc/protocolsを読込専用で表示
順方向1画面スクロール[n]Ctrl-FCtrl-F: 1画面順方向にスクロール、 3Ctrl-F: 3画面分順方向にスクロール
逆方向1画面スクロール[n]Ctrl-BCtrl-B: 1画面逆方向にスクロール、 2Ctrl-B: 2画面分方向にスクロール
順方向半画面スクロール[n]Ctrl-DCtrl-D: 半画面順方向にスクロール、20Ctrl-D: 20行順方向にスクロール
逆方向半画面スクロール[n]Ctrl-UCtrl-U: 半画面逆方向にスクロール、40Ctrl-D: 40行逆方向にスクロール
指定行を表示[n]Gまたは:n改行n行目が画面の中央に来るように表示、Gとすると最後の行を表示する
行番号を表示:set nu改行または:set number改行:set nuで画面左端に行番号を付加して表示
リスト表示:set list改行:set listでタブは、^Iで行の終わりはで表示
順方向文字列検索/検索文字列改行/protocol: ファイルのprotocolという文字列を順方向に検索
逆方向文字列検索?検索文字列改行?http: ファイルのhttpという文字列を現在位置から逆方向に検索
前の検索文字列と同じ方向に検索n/protocol改行の後にnを入力すると次のnにカーソルを移動
前の検索文字列と逆方向に検索N/protocol改行の後にNを入力すると前のprotocolnにカーソルを移動
引数で与えたファイル一覧を表示:args改行:args: 現在表示中のファイルを[]で囲んで引数の一覧を表示
次のファイルに切替:[n]n改行:n改行 : 次のファイルを表示、:2n改行 : 2つ後のファイルを表示
前のファイルに切替:[n]N改行:N改行 : 一つ前のファイルを表示
引数の先頭に切替:rew改行または:rewind改行:rew改行 : 先頭のファイルを表示
コマンドの終了:q [!]:q改行 : コマンドの終了、:q!改行 : 強制終了

コラム(3つの顔をもつエディタ)

vi, view, exは同じプログラムで、呼び名によって振る舞いを変えています。

このように、unixのコマンドにはargv[0]の文字列で処理を変える物が存在します。

更にMac OSXのvi, view, exを調べるとvimコマンドへのリンクになっています。 *5

$ ls -l /usr/bin/{vi,ex,view}
lrwxr-xr-x  1 root  wheel  3  4 10  2012 /usr/bin/ex -> vim
lrwxr-xr-x  1 root  wheel  3  4 10  2012 /usr/bin/vi -> vim
lrwxr-xr-x  1 root  wheel  3  4 10  2012 /usr/bin/view -> vim

編集者のコメント

内容についての感想をお聞かせ下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)

*1 最初の$ は、プロンプトで入力しません。
*2 /etc/protocolsには、長い行はないので、少し加工して表示しています
*3 :を入力すると画面の最下部にカーソルが移動し、ラインエディタモード(exモードと記す)になり、exコマンドの機能を使うことができます。
*4 Mac OSXのviでは、行番号が色分けして表示されます
*5 時代の流れを感じますね。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc