てくてく T X ヘアスタレとページスタイル 亀 : あれ、はるみちゃん ? どうしたの、その髪 ! ! H : 失恋したの。 亀 : なに言ってるんだよぉ。しかし、思いきって切っ たなあ。 カフォーマットを「ペーシスタイル (page style) 」と このようなヘッダとフッタに出力される情報やその出 イトルなどを書いておくこともあります。ハ T 砂では、 内容を表す章や節の題名を書いたり、あるいは論文のタ ページ番号などの情報を出力します。たとえば、本文の などが出力されます。一方、ヘッダやフッタにはふつう このうち、ボディの部分には実際のテキストや表、図 ッタ」の 3 つの領域に分けることができます。 い TEX で出力されるべージは「ヘッダ」「ボディ」「フ H: じゃ、今回はページスタイルの話をしようか。 亀 : それ、教えてくれない ? なコマンドが用意されているの。 H : もちろんそれでもできるけど、ページ番号には特別 とか \setcounter とかを使えばいいの ? 亀 : それってさ、このあいた教えてもらった \roman がアラビア数字になって、番号も 1 になるよれ H : そうれそれで、本文が始まるところでページ番号 りするよれ 前書きのところだけページ番号をローマ数字にした 亀 : あのさ、このマニュアルもそうなんだけど、目次や H : あ、貸していたマニュアルね。 亀 : ところで、これありがとう。 切ることないのにつて言われた。 H : わざわざこの寒い季節に、それも風邪ひいてるのに 134 藤浦はる美 呼んでいます。 今回は、標準のスタイルファイルで用意されている ページスタイルの種類とその指定方法についてお話し します。新しいページスタイルの作り方については、も うすこし修行を積んでからにしましよう。 ペーシ番号のスタイル ページのヘッダあるいはフッタには、たいていペー ジ番号があります。まずは、亀之助くんの要望に応えて ページ番号の出力を変更する方法を紹介します。 デフォルトでは、どのドキュメントスタイルを使用 しているときでもページ番号はアラビア数字で出力さ れます。でも、亀之助くんが言うとおり、目次や前書 き部分だけローマ数字にしたいことだってあります。 ページ表記にどのような数字を使用するかは、 \pagenumbering という宣言コマンドの引数で指定し ます。このコマンドを実行すると、ヘーン番号が 1 にリ セットされ、ページ番号の出力が変わります。引数に指 定できる数字の種類は次のとおりです。このうち alph や A1ph を指定したときには、 1 から 26 までの数しか 表現できないことに注意してください。 arabic roman Roman alph A1ph アラビア数字 小文字のローマ数字 大文字のローマ数字 小文字の英子 丿 ( 文哢 : の英字 UNIX MAGAZINE 1991.3
DZ—X 流プログラミング オプションとは オプションとは、各コマンドの動作を変えるものです。 コマンドの実行方法や出力方法がほんのすこし変わるも のもあれは、まったく異なるコマンドのように変えてしま うものもあります。オプションを指定すると、実際にはど んなことが起きるのでしようか。たとえは、次の 2 つのコ マンド実行を比べてみましよう。 % cat AAA bbb CCC % cat -n AAA 1 aaa 2 bbb 3 CCC 5 今泉貴史 どちらも cat コマンドを使って AAA というファイル の内容を標準出力に出力していますが、それぞれの出力は 異なっています。最初の例では、ファイルの内容がそのま ま標準出力に表示されています。これに対して 2 番目の例 では、たんに出力するだけではなく、それぞれの行に行番 号がついています。これは、行番号をつける一 n というオフ ションの指定によって得られた出力です。 このように、同様な動作 ( ファイルの内容を標準出力に出 カ ) をするにしても異なった動作をしてはしい場合には、そ の異なる動作の種類を示すオプションを指定します。コマ ンドは、指定されたオプションによってユーサーが望むさ 前回は、コマンド行でえられる引数をどのようにプロ まざまな動作をするのです。 グラム中で用いるかという話をしました。これらのコマン ド行引数の多くでは、処理対象のファイルなどを指定しま オプションの名前 す。では、あるコマンドの実行結果をほんのすこしだけ変 えたいときにはどうすればよいのでしようか。 さきはどの例では -n というオプションを指定しました もちろん、以前にお話ししたパイプを使ってコマンドの が、大半の UN IX コマンドに備わっているオプションは この例のようにマイナス記号 ( ー ) で始まり、その後ろには 出力を変形してもいいのですが、それよりそのコマンドの 文字や単語が続きます。このとき、通常は大文字と小文字 出力形式にちかいかたちで出力できないものでしようか。 UN Ⅸ上のコマンドの多くは、自分自身の動作を変更でき とは区別されます。 UNIX ではコマンド名やファイル名に も大・小文字の区別があるのが普通ですから、当然といえ る引数 ( 、、オプショゾと呼ばれます ) を受け付けられるよう になっています。対象となるコマンドにこのようなオプシ は当然ですね。 多くのコマンドではマイナス記号の後ろに文字が続き ョンがあれば、上に述べたような出力が簡単に得られます。 ますが、単語を指定するコマンドも少なくありません。ど 129 UNIX MAGAZINE 1991.3
と表示されます。次に、検索したい文字列、、 strcmp" を 1 文字すっ入力してみましよう。最初の 1 文字を入力すると、 即座に、、 s 〃を捜し始め ( 何も指定しないと大・小文字の区 別はしません ) 、ファイルの、、 s 〃の次の文字にカーソルを 移動します。続けて残りの文字を入力すると、前ページの 図 12 に示したようにカーソルが次から次へと移動します。 目的の場所へたどり着いたら、く ESC 〉キーを押してくだ さい。これで検索を終了します。おまけですが、く ESC 〉キ ーの代わりにく DEL 〉キー以外のカーソル移動キーを押し ても検索を終了します。 ・検索の途中て験索文字列が変更できる。 検索〃は、 だけではまだありがたみが薄いかもしれません。ヾいけいけ 以上がヾいけいけ検の基本的な使い方ですが、これ ら検索か読けられる。 ・ファイルの最後まで検索したら、またファイルの先頭か ・検索の途中で検索の向きが自由に変えられる。 ・前回と同し文字列か験索できる。 ・連続的に検索できる。 UNIX MAGAZINE 1991.3 いったん検索モードを終了した後、ふたたび前回と同し い。これでカーソルは 2 番目の、、 str" へ進みます。 こで、く ESC 〉を入力せすに続けて C ー s を入力してくださ を入力すると 1 行目の、、 Str 〃にカーソルが移動します。 C—s str ファイルの先頭にカーソルがあるとして、 今度は同し文字列の連続検索を実験してみます。図 9 の バックスペースキーも試してみるといいでしよう。 幻惑されたりしないでください。また、く DEL 〉の代わりに ファイルの場合、画面がスクロールすることもありますが、 中にもカーソルはどんどんファイル中を移動します。長い のようにく DEL 〉を使えは検索文字が変更できるうえ、変更 と入力すると、最終的には文字列、、 strc 〃を検索します。 C—s stri く DEL>c みてください。たとえば、 検索文字列を入力している途中で、く DEL 〉キーを押して す ) を使ってはしめて、その威力を発揮するのです。 などの機能 ( これらの特徴は、、なんでも検索〃でも共通で emacs 入門 / イ N く DEL 〉キーはどんなときに使う ? 、、く DEL 〉キーは検索文字列を修正するときに使うんだよ〃 って説明しましたが、正確にいえばこれは嘘です。いろい ろな状況で、く DEL 〉キーを入力して一度は右往左往 ( ! ? ) し てみましよう。自分で去則性を見つけるのも楽しいもので す。 図ロ検索コマンドの実彳デ列 (isearch-forward の wrapping) / * C str@n.g library. * / char *strcat()l ,s2) strcmp()l ,s2) int char *strdup(sl) 文字を捜したいときには、、 C ー s C-s" が便利です 0Nemacs は 1 つ前に指定した検索文字列を ( 自動的に ) 記憶してお り、、℃ー s C-s" は、、前回と同し文字列を検索せよ〃とい うコマンドなのです。 ついでですから、そのまま C-r を何度か入力してみてく ださい。こんどは、、、あっち向けホイ ! 〃して、ファイルの 末尾から先頭に向かって次々と文字列検索を続けます。 のように、任意の時点で C-s や C-r を入力すれば、自由に 検索の向きを変えることができます。 最後に C-s を何度も入力し、ファイルの最後まで移動し てみましよう。工コー行に Fai1ing l—search : str こで、さらにもう 1 度 C-s を入力してみまし と表示され、一致する文字列はこれ以上ないよ〃と教えて よっ。 くれます。 113 、、いけいけ検索〃さんのお名前です。本名は、 ろですが、 1 つだけ大切なことを忘れていました。そう、 、、いけいけ検索〃の基本的な使い方はだいたいこんなとこ ファイルの末尾から捜し始めるのです。 向き検索でファイルの先頭まで検索してしまったら、また 索の場合には・・・・・・そう、あなたの考えは当っています。逆 先頭に戻って検索を再開します。ということは、逆向き検 Nemacs ではファイルの末尾まで検索したら、ファイルの ァイルの先頭からふたたび検索を実行しました ( 図 13 ) 。 というメッセージとともにカーソルがワープ ( リ ) して、フ Wrapped l—search : str
図 20 replace-regexp コマンドの正夫見表王見の / ヾート分け ↓ ↓ ↓ 置換対象となる文字列 ( 正規表現 ) は、、、 \ ( 〃と、、 \ ) 〃で囲 まれた 3 つのパートとその他の部分に分かれています ( 図 20 ) 。また、、、置換後の文字列〃に出てくる、、 \ 数字という のように指定してください。 Query replace regexp 正規表現臂土 t 五 : Query replace regexp : 正規表現 M—x query-replace-regexp は何番目のパートかを指定しています。つまり、 / 置換後の文字列 UNIX MAGAZINE 1991.3 いれは、おいソースの内容に触れなくてすみますものわ。 4 読む側は第読みにくい″と叫び、書いた側も“これが美しいんや″と反論して C のインデントにはいろいろなスタイルがありますが、 インデント についてお話します。 ・タグ機能 見つけだすための仕組み、 そして、最後にファイル中で関数を定義している場所を です。 ・コメント と向上します。そこで、 2 番目のテーマは、 コメントさえあれば、ソースの可読性 ( 読みやすさ ) はぐっ 忘れてはいけないのがコメントです。適切な場所に適切な について話します。また、ソースの読みやすさという点で ・インデント そこで、ます、 か 4 に文句をつけやすいのも、インデントではないでしよう インデントの方法です。また、人のプログラムを読むとき きました。プログラムを書いていて、とかく気になるのが やっと、 C 言語用のコマンドについての説明にたどり着 敵を知り、己を知れば emacs 入門 こまでくれば、、、おたすねなんでも置換〃の動き方も推 されます。 にそれぞれ置き換えられ、最初に示したような置換が実行 \ 3 は 3 番目の \ (. * \ ) と一致した文字列 \ 2 は 2 番目の \ (. * \ ) と一致した文字列 \ 1 は最初の \ (. * \ ) と一致した文字列 測できますね。これも、 れるかクということで、 C の場合には、 インデントの対象とは、、どのような場所でインデントさ に分けて説明してゆきましよう。 ・インデント・コマンド ・インデントの対象 などです。もっと具体的に知るために ・ if 文に続く文はインデント { } の中身は適宜インデント します。たとえは、 と、インデントの対象として必要に応して特殊な処理を施 Nemacs ではによろ括弧 ( { と } ) やラベル、 if 文などがある ・・ヒミコロン および、特殊な場合の、 ・関数の引数 ・ if 文、 for 文、 while 文、 do 文 ・ case 文とラベノレ { } の前後 方法については「カスタマイズ」の項に譲るとして、 変更することもできます。 Lisp 変数の値を設定・変更する ーが Lisp 変数の値を変史してインデント量を自分好みに 数のデフォルト値に従ってインデントされますが、ユーザ ようになっています。つまり、何も指定しなければ Lisp 変 は、対応する変数の値を指定することによって制御できる がインデント処理の対象になります。実際のインデント量 117
連載 / / Li Language ・ lndex 、 rindex % tcpconnect unlmaga: smtp 定できますが、それをコマンド行で変更するためのオプシ / , データを読み込む際の区切り文字は $ / という変数で指 ー 0 オプション SIGALRM のシグナルを発生します。 リの alarm と同し機能で、指定した秒数が経過すると 新しく alarm 関数が追加されました。 C 言語のライプラ ・ alarm ("abcde") ) は edcba になります。 逆順にソートして返します。したがって、 scalar(reverse reverse 関数は、スカラーの文脈で呼ばれると文字列を ・ reverse マンドとほとんど同しです。 c 、 d 、 s というオフションが指定できます。意味は tr コ ・ tr が書けます。 れておくしかなかったのに比べると、きれいなプログラム で、ある位置から終りまで取り出すときには大きな値を入 最後までの全部の文字列を返すようになりました。これま substr の長さを指定する 3 つ目の引数が省略されると、 ・ substr のどこから検索を開始するかが指定できます。 index と rindex には 3 つ目の引数が追加され、文字列 、、、ヨンが追加されました。後ろに数字が続くと、それを 8 進 数で評価した文字が区切り文字になります。指定がないと NULL 文字になり、一 00 は $ / に空文字列を入れたのと同 しく空白行までを読み込みます。ー 0777 を使うと、ファイ ル全体をいちどに読み込めます。 tcpconnect 今月は、ちょっとわけあって tcpconnect というコマン ドを作ってみました ( 78 ページのリスト 1 参照 ) 。読者の皆 さんは、 mconnect というコマンドをご存しでしようか ? これは sendmail にコンタクトするためのコマンドで、た なら、ホスト A の nntp と話ができます。 % mconnect —p 119 A 接続できます。ポートの指定も可能で、 とすれは、ホスト A の sendmail (TCP のポート 25 番 ) と % mconnect A とえは、 うにホストとサービスを指定し、そこに接続します。 / したもので、もっとも簡単な使い方は mconnect と同しよ tcpconnect はこれをもうすこし汎用的に使えるように 220 ummaga ・ co ・ jp Se 面 il 5.64b / 6.4J.6-BJW ready at helo 250 unimaga ・ co. jp He110 (srekcah. sra. co ・ (p) , pleased to meet you え、何が嬉しいんだって ? まあまあ、そうあせらない で。たしかに、これでは mconnect や telnet と変わりませ ん。 SMTP のコネクションを別のホストにフォワードした 、ゝしたくないとか、 ipforwarding が落ちているゲートウェ イで別のメールサー ーに処理を任せたい場合などがある でしよう。このとき、 tcpconnect なら inetd から起動する ことができます。そのためには、 inetd. conf のなかで次の いという状況を考えてみます。たとえは、 sendmail を動か / ように宣言します。 smtp stream tcp nowait root /etc/tcpconnect tcpconnect mail—server こうしておけは、このホストにきた SMTP の接続は mai ト server 〃というホストにフォワードされます。賢明 なる読者はすでにお気づきかもしれませんが、今度はどの ポートに接続するかの指定がありません。そうです、 tcpconnect は自分が起動されたソケットのホートを調べ て、とくにポートの指定がないときにはそれと同しホート 76 番号を使うのです。 UNIX MAGAZINE 1991.3 からの接続を許すかという指定も可能です。たとえは・、さ tcpconnect では、サーバーのほかにどのクライアント できてしまったので、たいそうがっかりしたのでした。 りです。私も、作ったあとでもしやと思ってやってみたら それも mconnect でできるだろうって ? 実はそのとお
IJN Ⅸ流プロクラ かし、私はこのオプションが嫌いです。 ミング 5 ります 3 。 nice は、引数として指定したコマンドの実行時の優先順 位を変化させるコマンドで、大きな数字を指定すれは優先 順位が下がり、小さな数字を指定すれば優先順位カ吐がり ます。通常の状態は 0 で表されるので、優先順位を下げた いときは 0 よりも大きな数字、つまり + 数字オプションを 指定するわけです。 ほかにも、さきほども出てきた X ウインドウ・システム 上で動作するコマンドの多くがこの十記号で始まるオプシ ョンをとります。ただし、十記号で始まるオプションにはか ならす同名の一記号で始まるオプションが存在し、それぞれ の意味は正反対になっています。 つまり、通常は、、一オプション名クの形式で指定するもの が別な方法でつねに設定されるようになっている場合、そ のオプションを無効にするために、、十オプション名〃と指 定するのです。むやみに、、 + オプション名〃をつけている のではない点に注意してください。 マイナス記号で始まらないオフションには、さきほどち ょっと出てきた tar コマンドなどの機能文字がありま す。 tar コマンドの機能文字には、 c ( 作成 ) 、 r ( 追加 ) 、 t( リ スト ) 、 u ( 置換 ) 、 x ( 展開 ) などがありますが、これらはこの うちの 1 つだけを指定するもので複数の指定や指定の省略 はできません。コマンドの実行方法を変えるという点では オプションと同しですが、どれか 1 つをかならす指定しな けれはなりません。このようなコマンドでは、最初の引数 にかならす機能文字が指定されますから、オプションの始 まりを示すマイナス記号を省略して、 % tar cbf 1024 /dev/rstO . と指定できます。また、オプション以外に引数をとらない コマンドについても、オプションの先頭を小すマイナス記 号を省略できるものが多数存在します。 許しがたいオプション コマンドのなかには、さきほどの一 help ( または一 h ) の代 わりに一 ? というオプションをもつものがあります。使い方 がよく分からないときに、、あれ ? 〃などといいながらこの オプションを指定するのは、一見正しそうに思えます。し 3 csh の内部コマンドではない nice コマンドもあリますが、こちらには。十数・ というオプションはあリません。 UNIX MAGAZINE 1991.3 ? という文字はシェルのメタキャラクタですから、シェ ルによってファイル名を展開する際の 1 文字を表すものと 解釈されます。したがって、対応するファイル名が存在し ないと、、 No match. 〃とシェルにいわれるだけで、実際 のコマンドの実行はおこなわれません 4 。 この文字をコマンドに渡すには、バックスラッシュ ( \ ) を用いるか単一引用符 ( ' ) で括るかしてエスケープする必 要があります。たまたま ( ほとんどありませんが ) 対応する 名前のファイルが存在しているときにはもっと厄介です。 万一、そのファイル名が黙ってファイルを削除してしまう 危険なオプションと同名だったら・・・・・・。使い方を見たかっ ただけなのに大切なファイルが消されてしまうという恐ろ しい事態に見舞われます。こういったことを避ける意味で も、よくよく考えてからでなけれは使えないようなオプシ ョンをつけるのはやめましよう。 各種のコマンドにどのようなオプションがあるかを知っ ていれは、かなり難しく思えることでも簡単に実行できま す。 1 月号でも使いましたが、 tail コマンドには -r という オフションがあります。このコマンドはファイルの最後の 数行を標準出力に出力するものですが、これを使ってファ イルの末尾から逆順に出力するのは容易ではないように感 します。しかし、一 r オプションを使えはこの要求を簡単に 満たせます。オフションを知っているのと知らないのとで は、さまざまな場面で使う労力がかなり違います。また、 プログラムを作成するときも、これらの知識の有無によっ てプログラムの、、 UNIX らしさ〃がすいぶん異なってくる でしよう。 オフションについては、今回述べた形式にかならすしも 従う必要はありません。しかし、標準的なものに合わせれ ば、より多くの人に受け入れられるプログラムとなると田 います。作成したいプログラムに似たコマンドやオプショ ンの指定方法が似ているものなどを捜し、オプションの指 定方法をそれに合わせるといいかもしれません。 次回は、実際にオプションを解釈するプログラミングに ついて説明します。 ( いまいずみ・たかし東京工業大学 ) 4 C シェルではこうなリますが、 B シェル (sh) の場合は対応するファイルが存在 おわりに しないと展開されません。 133
IJN Ⅸ流プロクラミング 5 ちらかというと、昔から存在しているコマンドには 1 文字 のオプションを指定するものが多く、最近作成されたコマ ンドには単語を指定するものが多いようです。とくに、ウ インドウ・システムの標準として注目を集めている X ウィ ンドウ・システム上で動作するコマンドの多くは、オプシ ョンとして ( ー help などの ) 単語を受け付けます。 単語が続く場合は、それ ( もちろん英語です ) がそのオプ ションの意味を表します。たとえば一 help は help ( お助け ) オプションですから、コマンドの使用方法や使用可能なオ プションなどを表示します。もちろん、この一 help オプショ ンがすべてのコマンドにあるわけではありません。コマン ドにどのようなオプションをつけるのかについてはなんの 取決めもありませんから、そのコマンドの作者が自由に作 成できるのです。しかし、コマンド行での引数やオプショ ンの指定方法が分からなくなったときなどは、マニュアル を参照しないでもこのオプションだけで用が足りてしまう こともあります。ですから、自分でコマンドを作るときに はできるだけこのようなオプションをつけるようにしたほ 1 文字のオプション うがよいでしよう。同様な出力に、引数が誤って指定され た場合などに表示される Usage 出力もありますが、これ さきはど、オプションとして指定する単語がオプション に関しては稿を改めて説明します。 の意味を表すと書きましたが、オプションが 1 文字の場合 もちろん、すべてのオプションがその単語の意味を表し にはどうなるのでしようか。通常はその文字からオプショ ているわけではありません。オプションとして指定するも ンの意味が想像できるようになっていますが、同し文字で のは、ある単語や連続した単語の省略形ということもあり 始まる単語は星の数ほどもあります。その文字が何を表す ます。重要なのは、オプションの名前が指定したい動作を のかはコマンドごとに異なりますから、 man コマンドでそ 表しているか否かという点です。 れぞれのマニュアルを見てオプションの意味を確認してく さきほどの cat コマンドの例では、一 n オプションを指定 ださい。オプションとして単語を指定するコマンドでも指 してそれぞれの行に行番号をつけました。このオプション 定できるオプションはそれぞれに違うので、マニュアルで 名からは、 number ( 番号 ) という言葉が想像できます。簡単 調べることが大切です。自分勝手なオプションを指定して に決められるからといって数字の 0 から始まるようなオプ 耳も医しのつかないことになっても、誰も助けてくれません。 ションにすると、何番がどんな意味を示すのか覚えきれな 十分に注意してください。 くなってしまいます。 cat -n ではなく cat ー 4 だとする さて、 1 文字のオプションはコマンドごとに異なるとい っても、多くのコマンドに共通な意味を表すものも存在し ・。 cat には一 n 以外にも多数のオプションがあります から、行番号をつけたいときにはいったい何番のオプショ ます。 1 文字オプションは、それを用いて指定する機能を ンを指定したらよいのか、ちょっと考えただけでも混乱の 示す英単語の頭文字である場合が多いのです。たとえば、 ー h はたいてい一 help ( お助けオプション ) と同様な働きを ほどが分かろうというものです。 くどいようですが、オプションを受け付けるコマンドを します。また、 long を連想させる一 1 というオプションを指 定すると、通常の出力よりも長い出力をおこなうコマンド 作る場合には使う側の都合も考えてオプション名を決めて ください。いきあたりはったりに決めると、いすれは誰に が数多くあります。ここでそのすべてを挙げることはでき ませんが、多数のコマンドで採用されている 1 文字オプシ も使ってもらえなくなります。コマンドが使いやすいかど うかは、そのコマンドの性能はもちろんのこと、オプショ ョンとその意味を一覧表にしてみました ( 表 1 参照 ) 。もち 表ー一文字オプションとその意味 オプション単語 通常は出力しないものもすべて出力 all ディレクトリを指定 directory d file ファイルを指定 高速で実行 first force 実行の強制 help コマンドの使用方法などの表示 入力ファイルの指定 input 対話的に実行 interactive long 長い出力 長さの指定 length 数字の出力 number 出力ファイルの指定 output 再帰的に実行 recursrve 逆順に出力 reverse 大きさの指定 S1ze 型の指定 type 時刻の指定 time 詳しい出力 verbose 幅の指定 width ンの指定方法が簡単かどうかにも大きく左右されるのです。 1 0 て 130 UNIX MAGAZINE 1991.3
emacs 入門 C—s str C-w 移ります。ます、 基本的な使い方が分かったところで、細かい技の習得に です。 M—x isearch- backward で、逆向き検索の本名は、 M- x isearch- forward たとえば、 C-s str を入力した時点で図 9 の 1 行目の です。 しだした単語の残りの文字を検索文字に追加するコマンド を実行してみてください。最後のヾ C ー w 〃は C-s str で捜 1 行目 / * C strinC]1ibrary. 工コー領域 i—search: string この状態で C-w を入力すると、 1 行目 / * C str@ng library. 工コー領域 i—search: str 、、 string" を見つけたとします。 と入力してみてください。、、 C-s str C ー w 〃では見つけた c—s Str C—y これをさらに極端にしたコマンドもあります。 くてもよいという利点があります。 ドには、検索文字列が長い場合でもわざわざ全部入力しな ば次からは、、 string" が検索対象になります。このコマン となります。もちろん、このあと続けて℃ー s 〃を入力すれ の残りの文字をすべて検索文字列に追加します。さきほど 単語の残りの文字を検索文字に追加しましたが、今回は行 の状態で C-y を入力すれば、 1 行目 / * C str@ng 1ib て矼 y. . 工 . コーー令頁士或 i—search: str と同し例を使うと、 正規表現・基礎の基礎 本文の例にでてくる簡単な正規表現の説明をしておき ましよう。 文字 文字 く CR 〉以外の任意の 1 文字にマッチします。 正規表現式の直前の文字や記号の任意個の繰り 返しにマッチします。 行の先頭が文字で始まる行に一致します。 文字そのものに一致します。 工コー領域 i-search: string library . / * C string lib て矼 y. * / ロ 1 行目 となるのです。たしかに便利そうな機能ですが、 114 いった し、 したがって、 c. * 〃という正規表現は行の先頭が文字 c 〃である任意の長さの任意の文字列に一致します。また、 c. * s" という正規表現は行の先頭が、、 c 〃で、最後が、、 s 〃 である文字列に一致します。 こでいう、、文字列〃とはいわゆるスペースで ただし、 区切られた文字列のことではなく、スペース文字も含めた 任意の文字の連なりのことをいいます。たとえば、正規表 現、、 c. ドは、、、 ch ドにも、、 c r" にも一致します。ま た、正規表現、、 c. * r 〃は、、、 c r"f 、、、 character のすべてに一致します。 どういう状態で使うのでしようね。しつのところ、私自身 は使ったことがありません。 さて、最後にご登場願うのは、、なんでも検索〃さんです。 、、いけいけ検との違いは、 いけいけ検索 : 単純な文字列を検索 なんでも検索 : 正規表現を使って検索 です。正規表現をご存しない方は、別掲の「正規表現・基 礎の基礎」を参考にしてください。 もう 1 度、図 9 のファイルを使って実験しましよう。 C-M-s regexp i—search: i—search¯regexp: C. * と入力すると、 1 行目の、、 char *strcat(s1,s2) 〃全体に マッチします。続けて検索文字列を追加入力すると、その ときどきにマッチした位置へカーソルを移動します。 工コー領域の表示 ( 入力した検索文字列 ) とカーソルの 位置の対応を以下に示しておきます。 1 文字入力するたび にダイナミックにカーソルが移動する様子はなかなかの 感動ものです。 UNIX MAGAZINE 1991.3
emacs 入門 ・ 1 単語単位 ・行単位 ・領域単位 で削除ができて、削除された部分は自動的に、、キルリン という名前のバッフアに保存されます。 たとえば、 M-x kill-word (M-d) ー ( 負の数 ) : 〃行前の先頭からカーソルの前まで削除 ますが、符号によって、 指定して前後の行も削除できます。引数には数字を指定し kill-line コマンドでは、カレント行だけではなく引数を 分がキルリングに保存されます。 あれば、行末のラインフィード文字 ) を削除し、削除した部 はカーソル位置から行の最後まで ( カーソルが行の最後に (C-k) M-x kill-line てキルリングには文字列、、 word 〃が保存されます。同しよ のところでこのコマンドを実行すると、下線部が消去され k111 一回 0 て d はカーソル位置から 1 単語を削除するコマンドです。 : ファイルの先頭からカーソル位置まで削除 -u 2 〃、数字の一 0 を指定するには、℃ー u ー 0 〃と入力しま を入力してください。つまり、数字の 2 を指定するには℃ C-u 数字 ンドを入力する前に びっと登場したのですが、数字の引数を指定するにはコマ せんでしたね。「エコーバックあれこれ」のところでもちょ そういえば、引数の指定方法をまだ正式に説明していま などが指定できます。 ( 正の数 ) : カーソル位置から〃行先の行末まで削除 110 す。たとえば、カーソルが、 1 行目 2 行目 囿目 4 行目 にあるとき、 C-u ー 1 C-k を実行すれは下線部の文章が削除されます。 領域単位の削除はもうすこし複雑で、 1 ) 削除する領域の先頭にマーク ( 印 ) を設定 2 ) 削除する領域の最後へカーソルを移動 3 ) 領域を削除するコマンドを実行 という手順を踏みます。マークを設定するコマンドは、 M-x set-mark-command ()- く SPC>) 領域を削除するコマンドは、 M-x kill-reglon (C-w) です。 1 行目 2 行目 3 行目 4 行目 の下線部を削除するには、 1 ) 2 行目の、 2 囹目 へカーソルを移動させて C ーく SPC 〉を入力します。工コ ー領域に、、 Mark set" と表示されましたか ? 2 ) 次に、 next-line コマンドや forward-char コマンドを 使って 3 行目の、 3 行住 へカーソルを移動させます。 3 ) 最後に C-w を入力してください。 これで、指定領域が削除されると同時にキルリングに保 UNIX MAGAZINE 1991.3
emacs 入門 図 replace-regexp コマンドの実彳デ列 ( オリジナル・ファイル ) char *strcat()l , s2) strcmp()l , s2) int char *strdup(sl) 図ロ replace-regexp コマンドの実彳デ列 その一 図絽 c har int char 図円 char i nt char replace-regexp コマンドの実彳デ列 *strcat(s1,s2) my—strcmp(s1,s2) *my-strdup(sl) replace-regexp コマンドの実彳デ列 *strcat(srcl ,dstl) strcmp(src2,dst2) *strdup(sl) その 2 その 3 1nt 土 nt int strcat()l ,s2) strcmp()l ,s2) strdup(sl) などを選択してください。く SPC 〉やく DEL 〉を入力すると 次の文字列へ移動するので、同し要領でどんどん指定して ください。ファイルの最後まで移動すれば、置換コマンド は終了します。 そうそう、いちはん重要な操作を忘れていました。置換 処理中にどんな操作を選べるかを知りたければ、 その場でヘルプメニューを表示 C-h を入力してください。 以 - ヒで、置換コマンドはおしまいです。ん ? まだなにか 忘れてるよーな・・ そうそう、説明した 2 種類の置換コマンドのバリエーシ ョンとして、正規表現が使える置換コマンドもありました。 あえて名づけるなら、、、おてがるなんでも置換〃と、、おたす ねなんでも置換〃となるでしようか。、、おてがるなんでも置 換〃は、 M-x replace-regexp Rep1ace regexp: 正規表現 Rep1ace regexp 正規表現 vith: 置換後の文字列 とすれは、正規表現に一致した文字列を置換後の文字列に とすると、図 16 が図 17 のように変更されます。ただし、 この例では置換後の文字列が固定されてしまいます。次の 例を見てください。 M—x replace-regexp Rep1ace regexp: str. *P く CR> Rep1ace regexp str. *p く CR> vith : my_\& 置換後の文字列に、、 \ & 〃が含まれています。この 2 文字 の組合せには未な意味があり、 \ & の部分は検索で一致し た文字列本に置き換えられます。したがって、図 16 に対 して上に示した置換を実行すると図 18 のように変更され ます。 でも、これだけしやまだ十分に使いやすいとはいえませ んよねえ。というのも \ & だけでは、 ・もとの文字列よりも短い文字列の指定 一致した文字列の一部分だけを変更 ができないのですから・・ ルに対して、 ・。そこで、今度は図 19 のファイ 変更します。 たとえは、 M—x replace-regexp Rep1ace regexp: . *str く CR> RepIace regexp -c . *Str with: int M—x replace-regexp 116 str く CR> strcat(srcl,dstl) を strcat(dstl,srcl) に strcmp(src2,dst2) を strcat(dst2,src2) に strdup(sl) は変更しない という置換をしてみましよう ( ちょっと複雑ですが頑張っ て追ってください ) 。 UNIX MAGAZINE 1991.3