** ファイルの中を見る [#wbba8b59]
viエディタは、vi, view, exのコマンドを提供しています。
最初は、読込専用のviewを使ってファイルの中身を覗いてみましょう。
投稿が完了したので、このページの内容は削除しました。

/etc/protocolsファイルの内容を見てみましょう。
端末ソフトから以下のコマンドを入力して下さい。
((最初の$ は、プロンプトで入力しません。))
コメントを下さった方々に感謝申し上げます。

#pre{{
$ view  /etc/protocols
}}

&ref(th_Fig1.jpg);


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

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

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

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

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

&ref(th_Fig2.jpg);

また、行が長くてすべてを表示できない場合には、表示できない行を@で表示します(図3参照)。
((/etc/protocolsには、長い行はないので、少し加工して表示しています))


&ref(th_Fig3.jpg);




*** 指定した行を表示 [#n5470c6f]
コンパイルエラー等で表示したい行数が分かっている場合には、行番号に続けてGを入力します。
行番号も一緒に表示するには、:set numberまたは省略して:set nuと改行を入力します(図4参照)。
((:を入力すると画面の最下部にカーソルが移動し、ラインエディタモード(exモードと記す)になり、exコマンドの機能を使うことができます。))


&ref(th_Fig4.jpg);

行番号表示では、行番号の列と内容が重ならないように表示されます(図5参照)。
((Mac OSXのviでは、行番号が色分けして表示されます))

&ref(th_Fig5.jpg);

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


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


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


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

&ref(th_Fig6.jpg);



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

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

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

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

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

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

#pre{{
search hit BOTTOM, continuing at TOP
}}

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

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

viでは、ファイルの内容を変更した後に、保存しないで終了しようとすると図7の様な警告が表示されます。
#pre{{
E37: No write since last chage (add ! to override)
}}

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

&ref(th_Fig7.jpg);



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

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

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

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

&ref(th_Fig8.jpg);



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


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

#pre{{
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!と改行で終了できます。

#pre{{
E173: xx more fiels to edit
}}

*** ファイルの中身を見るのに使ったコマンド一覧 [#b68c4715]
これまで、使ってきたviewのコマンドを表1にまとめて示します。

| コマンドの機能 | 呼び出し形式 | 使用例 |h
| viewの起動 | view ファイル名... | view /etc/protocols: /etc/protocolsを読込専用で表示 |
| 順方向1画面スクロール | [n]Ctrl-F | Ctrl-F: 1画面順方向にスクロール、 3Ctrl-F: 3画面分順方向にスクロール |
| 逆方向1画面スクロール | [n]Ctrl-B | Ctrl-B: 1画面逆方向にスクロール、 2Ctrl-B: 2画面分方向にスクロール |
| 順方向半画面スクロール | [n]Ctrl-D | Ctrl-D: 半画面順方向にスクロール、20Ctrl-D: 20行順方向にスクロール |
| 逆方向半画面スクロール | [n]Ctrl-U | Ctrl-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つの顔をもつエディタ) [#d9b76f7b]

vi, view, exは同じプログラムで、呼び名によって振る舞いを変えています。
- viで起動された場合には、通常のviエディタとして機能
- viewで起動された場合には、読込専用のビューアとして機能
- exで起動された場合には、ラインエディタとして機能

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

更にMac OSXのvi, view, exを調べるとvimコマンドへのリンクになっています。
((時代の流れを感じますね。))

#pre{{
$ 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

}}



** 編集者のコメント [#a503d979]
内容についての感想をお聞かせ下さい。

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


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