; -*- Text -*- PAGERについて 今回は、PAGER について解説する。PAGERとはあるファ イルやコマンドの標準出力などを一画面分ずつ表示する ためのコマンドである。PAGERとして普通使われるのは more, less がある。これらのコマンドの使い方や PAGER に関連したコマンドなどを解説する。 more まず大抵のOSに標準で備わっている more について説明 する。moreコマンドは普通システムのデフォルトの PAGERとして使われている。more コマンドは指定された 入力ファイルを一画面ずつ表示するためのコマンドであ る。また別のコマンドの出力をパイプを通して more コ マンドに入力することにより一画面ずつ表示させたりし て使う。 - --------------------図1 はじめ---------------------------- more コマンドの使いかた - ---------------------------------------------------------- % more ファイル名 % コマンド | more - --------------------図1 おわり---------------------------- more コマンドが使われると一画面分表示すると --More-- などと表示されて、出力がそこで一旦停止す る。その先を読む場合には単にスペースを入力すればよ い。そうすると more コマンドは次の一画面を出力して またキー入力をまつ。 画面のサイズは、普通 stty で設定されている rows, columnsを使う。これらが設定されていない時はその次 に termcap 等に書かれている値を利用する。実際の画 面のサイズと more コマンドの振舞いがあっていない時 は stty コマンドを使って設定しなおさないといけない。 - --------------------図2 はじめ----------------------------- 画面サイズの設定 - ----------------------------------------------------------- % stty cols 桁数 rows 行数 - --------------------図2 おわり----------------------------- また、X window system などをインストールしている場 合には resize コマンドを使えば、端末によっては rows, columns を適切に設定してくれる。当然環境変数 TERM はあらかじめちゃんと設定しておく必要がある。 うまく行数、桁数が設定されていれば、一番下の行に --More (XX%) -- などと表示されるはずだ。XX% という のは、そのファイルの全体の何% 目のところを表示して いるかをあらわしている。基本的にmoreコマンドでは スペースキーで次のページを見ていくくらいにしか使わ ないが ほかにもいろいろとできることがある。例えば h を入力すれば help を見ることができる(SunOS, NetBSDなど)。 - --------------------図3 はじめ----------------------------- more コマンドのヘルプ (NetBSDの場合) - ---------------------------------------------------------- Commands flagged with an asterisk (``*'') may be preceeded by a number. Commands of the form ``^X'' are control characters, i.e. control-X. h Display this help. f, ^F, SPACE * Forward N lines, default one screen. b, ^B * Backward N lines, default one screen. j, CR * Forward N lines, default 1 line. k * Backward N lines, default 1 line. d, ^D * Forward N lines, default half screen or last N to d/u. u, ^U * Backward N lines, default half screen or last N to d/u. g * Go to line N, default 1. G * Go to line N, default the end of the file. p, % * Position to N percent into the file. r, ^L Repaint screen. R Repaint screen, discarding buffered input. m[a-z] Mark the current position with the supplied letter. '[a-z] Return to the position previously marked by this letter. '' Return to previous position. /pattern * Search forward for N-th line containing the pattern. /!pattern * Search forward for N-th line NOT containing the pattern. ?pattern * Search backward for N-th line containing the pattern. ?!pattern * Search backward for N-th line NOT containing the pattern. n * Repeat previous search (for N-th occurence). !command Execute command in a subshell. :!command Execute command in a subshell. :a Display the list of files. E [file] Examine a new file. :n, N * Examine the next file. :p, P * Examine the previous file. :t [tag] Examine the tag. v Run an editor on the current file. =, ^G Print current file name and stats. q, :q, or ZZ Exit. - --------------------図3 おわり----------------------------- - ---------------------------------------------------------- 注) NetBSD-current では more を help を見ようとし てもすぐに画面の外にでてしまうバグがあるようだ。 help のファイル自体は /usr/share/misc/more.help にあるのでそれを more などで読めばいいだろう。 - ---------------------------------------------------------- SunOS などでもこれよりは機能は少ないが逆向きのスク ロールや正規表現サーチなどもできる。 ヘルプをみればわかる通り、--More-- がでている時に b を入力すれば一画面前の出力を見ることができる。 また、/ を入力すれば検索文字列入力が始まるので そこで検索する文字列(本当は正規表現が使える)を入力 すれば、見つかった所が表示されるようになる。 また、v を入力すればそのファイルのその位置にカーソ ルが来るようにエディタ(デフォルトは vi)が起動され る。more で見ていてちょっと修正したいな と思った時 などは v を入力すれば、その位置でエディタが起動で きるので便利である。エディタを終了すれば more にま た戻ってくる。 またスペースなどに対して何行分かを示す引数を指定で きる。この引数は、スペースなどを入力する前に数字を 入力すればよい。例えば '1' '0' スペース と入力すれ ば現在の位置から 10行分スクロールする。b (backward)などでも同じように行数を指定することがで きる。 moreコマンドと同じものとして pageコマンドというも のがある。この2つは link されていて実体は同じであ り、動作もほとんど同じである。SunOS では pageコマ ンドは最初に画面をクリアするところがmoreコマンドと 違う。NetBSD では more と page はまったく同じであ る。 moreコマンドをパイプラインの最後で使わないと(つま り、moreの出力をパイプで何かのコマンドの入力にした りすると)、more コマンドは cat と同じ動作をするだ けである。ただし、SunOS 等では、入力ファイルが複数 の時、図4のように、そのファイル名が先頭に挿入され るという点が cat と違う。 - --------------------図4 はじめ----------------------------- more をパイプラインの最後で使わない場合 (SunOS) - ---------------------------------------------------------- % more .cshrc .login .logout | less :::::::::::::: <- .cshrc <- この3行は more によって挿入される :::::::::::::: <- # # .cshrc 1991/05/26 Ukai # source /.commoncshrc set noclobber set ignoreeof set path=( /home/ukai/bin /home/ukai/bin/$arch $path . ) set cdpath=(. ~ /home ) : (以下略) : - --------------------図4 おわり----------------------------- moreコマンドのコマンドラインオプションでいろいろと 動作を変更できる。例えば -s オプションで複数の空行 を一つにまとめて表示してくれる。NetBSD ではいつも 同じオプションを使う場合、環境変数 MORE にセットし ておけばそれが使われる。もちろんコマンドラインで指 定した場合はそちらが優先される。 less moreコマンドをさらに使いやすくしたのが lessコマン ドである。最近では moreコマンドもいろいろと拡張さ れているのだが、lessコマンドの方が便利な機能が用意 されている。また日本語パッチをあてれば漢字コードを 自動認識して、端末で使える漢字コードに変換して表示 してくれるので日本語のドキュメントなどを見る場合で はやはり less を使うほうがよい。現在の less の version は less-178 と呼ばれるものである。ただ、 less-178 とは GNU の autoconf を使うかどうかの差だ けなので less-177 でもほぼ同じはずである。日本語を 使う場合なら、これに1991年 8月頃に 丸川@クボタコ ンピュータさんがfj.sources に投稿した 'less-177 patch for Japanese' と、ほぼ同じ時のfj.sources.d の'Re: less-177 patch for Japanese(in fj.sources )'をあてて使えばよい。fj.source に投稿された patch をあてることで入力テキストの漢字コードを自動認識し、 出力するテキストの漢字コードを指定できるようになる。 また、fj.source.d に投稿されたパッチにより、ujisや sjisのファイルで改行が2つづつ表示されるバグがフィッ クスできる。less-178 に対するパッチもある。これら のファイルは例えば次のようなところから入手できる。 - --------------------図5 はじめ----------------------------- less の archive - ---------------------------------------------------------- ftp.kuis.kyoto-u.ac.jp[130.54.20.1]: ~/utils less-177.tar.gz less-177のパッケージ less-177-patch-kanji.tar.gz less-177-jp パッチ less-177-kanji-unofficial.patch 現在の漢字コードを表示する ためのパッチ less-178.tar.gz less-178のパッケージ less-178-kanji.patch.gz less-178-jp パッチ - --------------------図5 おわり----------------------------- less177jp のインストール まず less177jp のインストールの仕方を簡単に説明す る。まず less-177 のパッケージと 日本語patch を anonymous ftp などから入手する。そして、less-177 パッケージを適当なところで展開して日本語パッチを図 6のようにしてあてる。 - --------------------図6 はじめ----------------------------- less177日本語パッチのあてかた - ---------------------------------------------------------- % tar zxf less-177.tar.gz % tar zxf less-177-patch-kanji.tar.gz % ls Patch#01 less-177-kanji-unofficial-patch Patch#02 less-177-patch-kanji.tar.gz less-177/ less-177.tar.gz % cd less-177 % patch < ../Patch#01 % patch < ../Patch#02 % patch < ../less-177-kanji-unofficial-patch - --------------------図6 おわり----------------------------- このようにすれば問題なくパッチがあたるはずである。 README に less-177 のインストール方法が書いてある ので基本的にその通りにインストールすればよい。ここ では、とりあえず NetBSD にインストールする場合につ いて簡単に説明する。まず README に書いてあるとおり linstall というシェルスクリプトを実行する。 - --------------------図7 はじめ----------------------------- linstall の実行 - ---------------------------------------------------------- % sh linstall This script will build a makefile for less. If you already have a file called "makefile" it will be overwritten, as will the file "defines.h". Press RETURN to continue. I will ask you some questions about your system. If you do not know the answer to any question, just press RETURN and I will choose a default for you. Press RETURN now. One moment... Most Unix systems are derived from either System V or Berkeley BSD 4.1, 4.2, 4.3, etc. Is your system closest to: 1. System V 2. BSD 4.1 3. BSD 4.2 or later 4. Xenix Enter a number, or just RETURN if you don't know: - --------------------図7 おわり----------------------------- このように Sytem V か BSD のどれかを聞いてくるので インストールするシステムがどれかに応じた番号を入力 する。NetBSD では 3 を入力する。次に - --------------------図8 はじめ----------------------------- linstallの実行2 - ---------------------------------------------------------- Enter a number, or just RETURN if you don't know: 3 Do you want to use ALL the defaults for BSD 4.2? Enter "yes" if you have a STANDARD BSD 4.2. Enter "no" if you want to change any of the defaults. [yes] - --------------------図8 おわり----------------------------- 基本的には yes でいいのだが、NetBSD (386BSDなども) yes で実行すると REGCMP, RECOMP のところでコンパイ ル時にひっかかってしまう。これをさけるためにはここ で no として 図9 で示す regcmp(), re_comp() を決定 するところで 3 (neither どちらでもない)を選べばよ い。(ただし、この場合正規表現サーチはできなくなる) - --------------------図9 はじめ----------------------------- regcmp(), re_comp() の決定 - ---------------------------------------------------------- Most System V systems have the regcmp() function. Most Berkeley-derived systems have the re_comp() function. Does your system have: 1. regcmp 2. re_comp 3. neither [2] - --------------------図9 おわり----------------------------- もしくは 後で defines.h を修正すればよい。 ここでは defines.h を修正するという方針で、一応デ フォルトを使うということで yes で次にすすむ。 - --------------------図10 はじめ----------------------------- linstallの実行3 - ---------------------------------------------------------- Do you want to use ALL the defaults for BSD 4.2? Enter "yes" if you have a STANDARD BSD 4.2. Enter "no" if you want to change any of the defaults. [yes] yes Do you want to use all the optional features of less? Less has several features which you may or may not wish to include, such as shell escapes. Enter "yes" if you want to include ALL the optional features. Enter "no" if you want to select individual features. [yes] yes Do you have the setlocale function in your library? [yes] - --------------------図10 おわり----------------------------- 次に setlocale() 関数があるかないかだが、NetBSD で はまだ C locale しかサポートしていないので no でよ いだろう。 - --------------------図11 はじめ----------------------------- linstallの実行4 - ---------------------------------------------------------- Do you have the setlocale function in your library? [yes] no You use belows as default the character set. 1. ascii 2. latin1 3. japanese-jis: treat all kanji-code and output jis-code 4. japanese-ujis: and output ujis-code 5. japanese-sjis: and output sjis-code 6. jis: treat only jis-code 7. ujis: treat only ujis-code 8. sjis: treat only sjis-code Enter a number, or just RETURN if you don't know[3]: - --------------------図11 おわり----------------------------- 次にデフォルトのキャラクタセットを聞いてくる。日本 語を使うのなら 3,4,5 のどれかにすればよい。これら にしておくと入力ファイルはどの漢字コードでも自動的 に認識して 3 なら jis, 4 なら ujis(EUC), 5 なら sjis で出力するということである。出力を何にするか はそれぞれの環境依存なので適切なものを選んでおけば よい。とりあえずここでは、デフォルトになっている 3. japanese-jis にしておく。 - --------------------図12 はじめ----------------------------- linstallの実行5 - ---------------------------------------------------------- Enter a number, or just RETURN if you don't know[3]: The makefile and defines.h have been built. You should check them to make sure everything is as you want it to be. When you are satisfied, just type "make", and "less" will be built. - --------------------図12 おわり----------------------------- これで linstall の実行は終了である。これで makefile と defines.h が設定にしたがって生成される。 一応これらのファイルをチェックしておいたほうがいい だろう。 さて、386BSD や NetBSD 等では regcmp(), re_comp() はない。が、そのかわり regcomp() がある (/usr/include/regexp.h参照)。よって regcmp(), re_comp() のかわりに regcomp() を使えばいいという ことである。これらのルーチンを使っているのは search.c だが、このファイルをみると '#if REGCOMP' というのがある。よって、NetBSD などでは 図13 のよ うにREGCMP, RECOMP を 0 にして、'#define REGCOMP 1' にしておけばいいのである。 - --------------------図13 はじめ----------------------------- defines.h の修正 (NetBSD等の場合) - ---------------------------------------------------------- /* * REGCMP is 1 if your system has the regcmp() function. * This is normally the case for System 5. * RECOMP is 1 if your system has the re_comp() function. * This is normally the case for BSD. * If neither is 1, pattern matching is supported, but without metacharacters. */ #define REGCMP 0 #define RECOMP 0 #define REGCOMP 1 - --------------------図13 おわり----------------------------- 以上のことができたら make を実行すると less および lesskey がコンパイルできる。make install を実行す れば /usr/local/bin にこれらのコマンドがインストー ルされる。これで less が使えるようになった(シェル によっては rehash しないといけないし、ちゃんと /usr/local/bin にパスをとおしておく必要がある)。 less177jp の使用方について less の使い方はほぼ more の場合と同じである。 スペースで次の画面にすすむし、b で逆方向にスクロー ルする。h を入力すれば less の中で使えるコマンドの ヘルプを見ることができる。このヘルプから抜けるため には一番下の行にでているように q を入力すればよい。 - --------------------図14 はじめ----------------------------- less のヘルプ - ---------------------------------------------------------- SUMMARY OF COMMANDS Commands marked with * may be preceded by a number, N. Notes in parentheses indicate the behavior if N is given. h H Display this help. q :q :Q ZZ Exit. e ^E j ^N CR * Forward one line (or N lines). y ^Y k ^K ^P * Backward one line (or N lines). f ^F ^V SPACE * Forward one window (or N lines). b ^B ESC-v * Backward one window (or N lines). z * Forward one window (and set window to N). w * Backward one window (and set window to N). d ^D * Forward one half-window (and set half-window to N). u ^U * Backward one half-window (and set half-window to N). F Forward forever; like "tail -f". r ^R ^L Repaint screen. R Repaint screen, discarding buffered input. NOTE: default "window" is the screen height. default "half-window" is half of the screen height. /pattern * Search forward for (N-th) matching line. ?pattern * Search backward for (N-th) matching line. NOTE: search commands may be modified by one or more of: ! search for NON-matching lines. * search multiple files. @ start search at first file (for /) or last file (for ?). n * Repeat previous search (for N-th occurrence). N * Repeat previous search in reverse direction. ESC-n * Repeat previous search, spanning files. ESC-N * Repeat previous search, reverse dir. & spanning files. g < ESC-< * Go to first line in file (or line N). G > ESC-> * Go to last line in file (or line N). p % * Go to beginning of file (or N percent into file). { * Go to the } matching the (N-th) { in the top line. } * Go to the { matching the (N-th) } in the bottom line. ( * Go to the ) matching the (N-th) ( in the top line. ) * Go to the ( matching the (N-th) ) in the bottom line. [ * Go to the ] matching the (N-th) [ in the top line. ] * Go to the [ matching the (N-th) ] in the bottom line. ESC-^F * Go to the c1 matching the (N-th) c2 in the top line ESC-^B * Go to the c2 matching the (N-th) c1 in the bottom line. m Mark the current position with . ' Go to a previously marked position. '' Go to the previous position. ^X^X Same as '. E [file] Examine a new file. :e ^X^V Same as E. :n * Examine the (N-th) next file from the command line. :p * Examine the (N-th) previous file from the command line. = ^G :f Print current file name. V Print version number of "less". - Toggle a command line flag [see FLAGS below]. _ Display the setting of a command line flag. +cmd Execute the less cmd each time a new file is examined. !command Passes the command to $SHELL to be executed. |Xcommand Pipe file between current pos & mark X to shell command. v Edit the current file with $EDITOR. FLAGS Most flags may be changed either on the command line, or from within less by using the - command. -? Display help (from command line). -a Set forward search starting location. -b [N] Number of buffers. -B Automatically allocate buffers. -c -C Repaint by scrolling/clearing. -d Dumb terminal. -e -E Quit at end of file. -f Force open non-regular files. -h [N] Backward scroll limit. -i Ignore case in searches. -j [N] Screen position of target lines. -k [file] Use a lesskey file. -m -M Set prompt style. -n -N Use line numbers. -o [file] Log file. -O [file] Log file (unconditionally overwrite). -p [pattern] Start at pattern (from command line). -P [prompt] Define new prompt. -q -Q Quiet the terminal bell. -r Translate control characters. -s Squeeze multiple blank lines. -S Chop long lines. -t [tag] Find a tag. -T [tagsfile] Use an alternate tags file. -u -U Change handling of backspaces. -w Display ~ for lines after end-of-file. -x [N] Set tab stops. -y [N] Forward scroll limit. -z [N] Set size of window. - --------------------図14 おわり----------------------------- よく使うコマンドについて簡単に説明しよう。 まず一画面分スクロールするのは more と同じくスペー スが使える。また vi と同じように ^F やemacs と同じ ように^V が使える。逆方向に一画面戻るのも more と 同じくb が使える。また、vi のように ^B、emacs のよ うに ESC-v でもよい。これらの前に数字を入力してお くとスクロールする行数分を指定できる。 - --------------------図15 はじめ--------------------------- 一画面スクロール - ---------------------------------------------------------- 順方向 スペース ^F ^V 逆方向 b ^B ESC-v more-like vi-like emacs-like - --------------------図15 おわり--------------------------- 時には一画面スクロールではスクロールのしすぎという 場合がある。そういう時は半画面スクロールを使えばよ い。半画面スクロールは 順方向は d または ^D、逆方 向は u または ^U である。 - --------------------図16 はじめ----------------------------- 半画面スクロール - ---------------------------------------------------------- 順方向 d ^D 逆方向 u ^U vi-like - --------------------図16 おわり----------------------------- また一行ずつのスクロールもできる。一行ずつの場合は j, k や ^N, ^P を使えばよい。 - --------------------図17 はじめ----------------------------- 一行スクロール - ---------------------------------------------------------- 順方向 e j ^N ^E,CR 逆方向 y k ^P ^Y,^K vi-like emacs-like - --------------------図17 おわり----------------------------- また F を入力すれば tail -f のように振舞う。これは あるコマンドの出力を実行しながら見る場合などは便利 である。止める場合は ^C を入力してやればよい。 またスクロールなどして画面がみだれてきた場合は r や ^R, ^L を入力すれば書きなおしてくれる。 ドキュメントやマニュアルなどを読む時、スペースなど で一画面ずつ見ていくのもいいが、調べる単語とかが決 まっている場合はサーチしたほうがはやい。less の中 でサーチするには / または ? を入力する。これは vi のように / の場合は順方向サーチ、? の場合は 逆方 向サーチである。/ を入力すると、一番下の行に / が 出てその後にカーソルが移動する。そこで検索文字列を 入力してリターンを入力すれば、その文字列を含む行ま で進んでくれる。? の場合もほぼ同じで検索する向きが 違うだけである。同じものを続けて検索する場合は n、 逆方向に検索する場合は N である。また複数のファイ ルを見ようとして less を起動して、それらのファイル を通して検索する場合には ESC-n, ESC-N を使えばよい。 検索文字列を含むファイルをさがし、検索文字列のある 行のところを表示してくれる。 - --------------------図18 はじめ----------------------------- less の検索 - ---------------------------------------------------------- 順方向サーチ /文字列 逆方向サーチ ?文字列 前のサーチを続ける n それを逆方向で N 複数のファイル間で ESC-n サーチを続ける それを逆方向で ESC-N - --------------------図18 おわり----------------------------- 指定した行へ移動するコマンドもたくさんある。例えば 何行目に移動するか決まっている場合は g や G を使え ばよい。行数を入力した後 g または G を入力すればそ の行のあたりを表示してくれる。ファイルの一番先頭を 見たい場合は g を入力する。逆にファイルの一番最後 を見たい場合は G を入力すればよい。p を使えば全体 の 何% あたりめを見るかを指定できる。例えば真中あ たりが見たいのなら 50p と入力すればよい。 - --------------------図19 はじめ----------------------------- 移動 - ---------------------------------------------------------- 一番先頭へ g < ESC-< 一番最後へ G > ESC-> emacs-like 指定した行へ 行番号 g 行番号 G など % で指定 数 p 数 % - --------------------図19 おわり----------------------------- 複数のファイルを less で見ている時は :n や :p で違 うファイルを見るようにすることができる。次のファイ ルを見る時は :n 、以前のファイルを見るときは :p と する。 また、E や :e などで次に見るファイルをファイル名で 指定することもできる。 :e と入力すると一番下の行に Examine: と表示されるので見たいファイルのファイル名を入力す ればよい。 複数のファイルを見ていて今、どのファイルを見ている かわからなくなったら = と入力すると一番下の行にファ イル名 および現在そのファイルのどのあたりを見てい るかを表示してくれる。 - --------------------図20 はじめ----------------------------- 複数のファイル - ---------------------------------------------------------- 次のファイル :n 前のファイル :p 別のファイル E :e 今どのファイル? = ^G f - --------------------図20 おわり----------------------------- less では、vi のような mark をセットできる。現在の 行に mark をセットするには m文字 と m の後に1文字 mark を識別する文字を入力する。例えば ma と入力す ると現在の行に a という mark がセットできる。この ように mark しておくと後でその場所がみたくなったら '文字 というように ' の後にその mark を識別する文 字を入力すればよいのである。つまり 'a とすれば a という mark がセットされていれば、その行に移動する。 また、'' とすれば 最後にセットした mark のところへ 移動する。mark しておいて別のところを見たあと、 mark したところに戻る時には '' と入力すればいいの である。 - --------------------図21 はじめ----------------------------- mark - ---------------------------------------------------------- mark セット mマーク文字 mark の位置に移動 'マーク文字 前の mark位置に移動 '' - --------------------図21 おわり----------------------------- mark を使って、現在の位置から mark の位置までを パ イプで別のコマンドに渡すなどということもできる。| を入力すれば mark を聞いてくるので範囲を指定するマー ク文字を入力する。すると現在の位置から markまでの 位置が次に入力するコマンドの標準入力へパイプで渡さ れる。例えば、指定した範囲で grep などを実行したり するために使うことができる。 単にちょっと外部のコマンドを実行したい時は !コマン ドを使えばよい。 また、今見ているファイルを編集したくなったら v を 入力する。すると環境変数 EDITOR で指定されている エディタに現在のファイルとその位置がわたされる。 EDITOR が指定されていない時は vi が使われる。 - --------------------図22 はじめ----------------------------- 外部コマンド - ---------------------------------------------------------- パイプに渡す |マーク文字 コマンド 外部コマンド起動 !コマンド エディタを起動 v - --------------------図22 おわり----------------------------- less では { } などの対応も見ることができる。例えば C のソースファイルなどを見ていて、この { はどこで 閉じているのか知りたい時などに便利である。ただし、 less では C の構文まで調べていないので、文字列の中 やコメントの中に中途半端な } などがあったりすると そこにマッチしたりする。 とりあえず less では、{ と }, ( と ), [ と ] の対 応を見てくれる。対応を見るためには例えば { を一番 上の行にもっていって そこで { を入力する。するとそ の { にマッチする } のある行を一番下の行になるよう にスクロールする。ここで逆に } を入力するとこの } に対応する { (すなわち元いた所) に戻ることができる。 {,} 以外 の (,) や [,] も同様である。 - --------------------図23 はじめ----------------------------- 括弧の対応の例 - ---------------------------------------------------------- ============================================================ { extern int optind; register struct disklabel *lp; FILE *t; int ch, f, error = 0; char *name = 0, *type; /* check whether you realy run on PC98 - ukai */ { :■ ============================================================ ↓ ↑ ここで { を入力すると ここで } を入力すると ↓ ↑ ============================================================ break; case WRITEABLE: { int flag = 1; if (ioctl(f, DIOCWLABEL, (char *)&flag) < 0) Perror("ioctl DIOCWLABEL"); break; } } exit(error); } :■ ============================================================ - --------------------図23 おわり----------------------------- - --------------------図24 はじめ----------------------------- 括弧の対応をとるコマンド - ---------------------------------------------------------- 一番上の行の { に対応するのはどこ? { 一番下の行の } に対応するのはどこ? } 一番上の行の [ に対応するのはどこ? [ 一番下の行の ] に対応するのはどこ? ] 一番上の行の ( に対応するのはどこ? ( 一番下の行の ) に対応するのはどこ? ) - --------------------図24 おわり----------------------------- less のオプション less のオプションは起動時にコマンドラインオプショ ンとしても設定できるし、また実行中にも -N などと設 定することもできる。また実行中にオプションフラグの 状態を知りたい時は _フラグ のように - のかわりに _ を使う。 検索時に大文字・小文字を区別するか/しないか? (-i) ここではよく使うと思われるオプションについて簡単に 説明する。まず -i オプションは検索する時に大文字・ 小文字を区別するかしないかを設定するために使う。 -i を指定すると 区別する/しない がいれかわる。less でファイルを見ている時に _i として Case is significant in searches (press RETURN) と出れば、検索時に大文字・小文字は区別される。また Ignore case in searches (press RETURN) と出れば、検索時に大文字・小文字は区別しない。 行番号を表示するか/しないか? (-N) -N オプションを使うと行頭に行番号が追加されて表示 される。さらに -N とすると元にもどる。 長い行を折り返すか/折り返さないか? (-S) -S オプションを使うと長すぎる行はおりかえさずに、 後を表示しなくなる。-N オプションで行番号を付けた 時は -S オプションで長い行はおりかえさないようにし たほうが見やすいだろう。 複数の空行をまとめるか/まとめないか? (-s) 空行が意味もなくたくさんあるような場合、例えば cpp に通した C のソースファイルなどを less で見る場合 は -s オプションを指定すればよい。-s オプションを 指定すると複数の連続した空行は一行の空行にまとめら れて表示される。 タブストップ位置を指定 (-x 数字) タブストップの位置を何文字ごとにするかは -x オプショ ンで指定できる。4タブにする場合は -x 4 とすればい いのである。デフォルトは 8タブ。 表示できない文字を変換するか/しないか? (-r) デフォルトでは less はコントロール文字などは ^A の ように ^ + 文字 を反転表示させる。また ^文字で あ らわせないものは \177 などのようにして表示する。-r オプションでこの変換をさせないようにすることがで きる。また、変換する時、less は LESSBINFMT という 環境変数をみてどのように変換するかを決定する。デフォ ルトでは '\%o' なので、バックスラッシュに 8進数に したものになるのである。例えば LESSBINFMT を '\%x' にすれば 16進数で表現したものになる。また *k はブ リンク、*d はボールド、*u はアンダーライン、*n は ノーマル(すなわちアトリビュート指定なし)を意味する。 log ファイル出力 (-oファイル名, -Oファイル名) 入力ファイルが標準入力の時、その入力をファイルに出 力したい時に使る。つまり tee みたいな使いかたがで きるわけである。-o と -O の違いは -O の場合は既に そのファイルがあっても上書きしてしまうということだ けである。 バックスペース、改行を表示可能文字にするか/しない か? (-u, -U) less はデフォルトでは、バックスペースなどが入力ファ イルにあると、それがアンダーラインなどになる場合は、 termcapなどで設定されている端末の適切な方法を使っ て表示しようとする。 -u オプションを指定すると バックスペースなどは単な る文字と見なしてそのまま出力するようになる。 -U オプションを指定すると バックスペースなどはコン トロール文字と見なして、^H で出力するようになる。 - --------------------図25 はじめ----------------------------- less の主なオプション まとめ - ---------------------------------------------------------- 検索時に大文字・小文字を区別するか/しないか? -i 行番号を表示するか/しないか? -N 長い行を折り返すか/折り返さないか? -S 複数の空行をまとめるか/まとめないか? -s タブストップ位置を指定 -x 数字 表示できない文字を変換するか/しないか? -r log ファイル出力 -oファイル名 -Oファイル名 バックスペース、改行を表示可能文字にするか -u /しないか? -U - --------------------図25 おわり----------------------------- 環境変数 LESSCHARSET less177に日本語patch をあてて使う場合環境変数 LESSCHARSET を端末に応じて適切な値を設定しておく必 要がある。LESSCHARSET のデフォルトはコンパイル時に 決定できるが、環境変数 LESSCHARSET に設定しておけ ばそちらが使われる。LESSCHARSET に使うことのできる ものは図 26 のとおりである。euc ではなくて ujis で あることに注意しよう。なおこれを修正するには charset.c をすこし修正するだけでよい。 - --------------------図26 はじめ----------------------------- 環境変数 LESSCHARSET - ---------------------------------------------------------- ascii ASCII latin1 Latin1 jis JIS入力 - JIS出力 ujis UJIS入力 - UJIS出力 sjis SJIS入力 - SJIS出力 jis-ujis JIS入力 - UJIS出力 jis-sjis JIS入力 - SJIS出力 ujis-jis UJIS入力 - JIS出力 sjis-jis SJIS入力 - JIS出力 japanese-jis 漢字コード自動認識 - JIS出力 japanese-ujis 漢字コード自動認識 - UJIS出力 japanese-sjis 漢字コード自動認識 - SJIS出力 - --------------------図26 おわり----------------------------- 普通は 漢字コードが自動認識される japanese-??? を 使えばいいだろう。ただし入力があまり短すぎたり、コー ドがかたよったりしていると誤判断することもある。 UJIS と SJIS では重なっている部分があるのでこれは しかたないだろう。 less は SETLOCALE でコンパイルした場合は setlocale() から得られる locale を使って、 SETLOCALE でコンパイルしていない場合は環境変数 LC_CTYPE, LANG を使って得られる locale を使って LESSCHARSETも自動的に変更される。 - --------------------図27 はじめ----------------------------- locale (LC_CTYPEやLANG) と LESSCHARSET の対応 - ---------------------------------------------------------- locale LESSCHARSET C ascii ja_JP.JIS japanese-jis ja_JP.jis7 japanese-jis ja_JP.EUC japanese-ujis ja_JP.ujis japanese-ujis ja_JP.SJIS japanese-sjis ja_JP.mscode japanese-sjis japan japanese-ujis Japan japanese-ujis japanese japanese-ujis Japanese japanese-ujis - --------------------図27 おわり----------------------------- なお、新な locale に対応したり LESSCHARSET との対 応を変更したい時は charset.c を見て変更すればよい。 PAGER を使うコマンド PAGER を利用するコマンドとしては man, mail, zmore などがある。PAGER のデフォルトは more である。これ らのコマンドはその画面出力をPAGERに通して出力して くれる。 man はマニュアルのテキストを nroff でフォーマット して(またはnroff でフォーマット済みのテキストを) PAGER に通して画面出力する。一般に オンラインマニュ アルは一画面を越えることが多いのでPAGERを通すわけ である。 mail (/usr/ucb/mail, Mail)では受けとったメッセージ を見るときに、そのメッセージをPAGERに通して表示し てくれる。mail では、crt オプションで PAGER を起動 する閾値を設定できる。値を設定していない場合は端末 の行数になるので、一画面を越えるようなメッセージの 時にPAGERが起動される。したがって crt を小さめの値 に設定して PAGER に less を指定しておけば、日本語 のメイルもちゃんと漢字コードを端末の漢字コードに変 換して表示するようにできる。もちろんこのようにする ためには LESSCHARSET などを正しく設定しておく必要 がある。 zmore というのは gzip パッケージにはいっているコマ ンドである。これはシェルスクリプトなので 見ればわ かるのだが、基本的には gzip -cdfq の出力を PAGERに 通すようにしているだけである。eval ${PAGER-more} となっているので、環境変数PAGER が設定されていな い時は more が起動される。zmore を使えば compress や gzip で圧縮されたテキストファイルを読むのに非常 に便利である。 ; 25(wchar) x 48(lines) x 2(col) x 10(page) ; Local Variables: ; kanji-fileio-code: 3 ; file-coding-system: *euc-japan* ; fill-column: 50 ; End: