場合によっては同じコマンド文字列を繰り返しタイプしなければならないこ とがあるかもしれません。以前にタイプした命令文字列を呼び出せれば便利で す。これをヒストリー機能と呼んでいます。試しに次をやってみましょう。
% history 1 pwd 2 ls 3 vi test.c 4 cc -o test -I~/include test.c 5 ./test 6 history %
%のプロンプトに対して入力実行された命令のことをイベントと呼んでいます。 historyコマンドは過去に実行された一定の数のイベントを表示します。この 例ではhistoryコマンドも含め6つのイベントが実行されています。例えばイベ ント番号4はcコンパイラを呼び出しています。命令自身の説明は後で出てきま すのでここでは触れませんが、このように長い命令をタイプし直すのは面倒で す。この例のようにイベント3でソースファイルを編集しイベント4でコンパイ ルして5で実行するというパターンはよく繰り返されます。そこでいま作った testを実行してバグを見つけました。test.cを編集し直します。その時は次の ようにしてイベント3を呼び出します。
% !3 vi test.c
!のあとに番号を書くとその番号のイベントが呼び出されます。同様に!4でイ ベント4が呼び出されます。
% !4 cc -o test -I~/include test.c
ただしこれはイベント番号を覚えていなければならないのでそれほど使いよく ありません。それよりも次のようにやったほうが簡単です。
% !v vi test.c % !c cc -o test -I~/include test.c %
!vは文字vで始まる最近のイベントを呼び出します。!$viでもおなじです。 !cは同様にcコンパイラ起動のイベントを呼び出します。直前のイベントは !!で呼び出せます。!-2は2つ前のイベントを呼び出します。!?str?は文 字列strを含んだコマンドを持つイベントを探します。この場合strはコマンド 名の途中にあらわれるものでもよいわけです。
ヒストリーで呼び出せるコマンドの一部を修正して実行したいこともよくあ ります。タイプミスをしたり、一連のコマンドを順次実行するときなどです。 この場合はイベント呼び出しの後に続けて修正を指示します。上の例では
% !v:s/test/demo/ vi demo.c
sは置き換えsubstituteを表します。/にはさまれた部分が置換されます。/を
含んだ文字列を置換したいときはとにかくsの次の文字が分離文字として扱わ
れますのでなんでも文字列に出てこない文字を使えばよいわけです。SUNでは
直前のヒストリーの置換を^old^new^
でできるようになっています。
これは!!: s/old/new/
と同じです。次の場合はどうでしょうか、
% !c:s/test/demo/ cc -o demo -I~/include test.c
最初のtestだけが置換されてしまいました。これでは困ります。すべてマッチ する部分を置換したいときはgをつけて、
% !c:gs/test/demo/ cc -o demo -I~/include demo.c
本当に正しく置き換えられているのか確かめたいときは:の後にpを付けます。 こうすると表示されるだけで実行はされません。ヒストリーには残るので確か めたうえで!!呼び出せます。