HISTORY(3) | FreeBSD Library Functions Manual | HISTORY(3) |
名称
history - GNU ヒストリライブラリCOPYRIGHT
The GNU History Library is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.解説
多くのプログラムは、1 行づつユーザからの入力を読み込みます。 GNU ヒストリライブラリは、それらの行の経過を追い、各行を任意のデータに関連づけて、新しい行を組み立てる際に前の行からの情報を利用することができます。ヒストリ展開
ヒストリライブラリは bash のヒストリ拡張と同じヒストリ拡張機能をサポートします。このセクションは、どのような構文機能が利用可能であるかを記述しています。ヒストリ拡張はヒストリリストから入力ストリームにワード (単語) を取り入れ、コマンドの繰り返しや、前のコマンドに引数を挿入して現在の入力行にする、または前のコマンドのエラーをすぐにを修正することを容易にします。
通常、ヒストリ拡張は完全な行が読み込まれた直後に実行されます。それは、2 つの部分で行われます。最初は置換の間にヒストリリストからのどの行を使用したらよいかを決定することです。 2 番目は現在の行に含まれる行の部分を選択することです。ヒストリから選択された行は イベントで、作用される行の部分は ワードです。様々な 修飾子が、選択されたワードを操作するるために利用可能です。入力を読み込むとき、行は、引用符によって囲まれるとき、そうでなければ切り離される、 (下記の history_tokenize() の説明を参照) いくつかのワードは、1 つのワードと見なされるように、 bash と同じやり方でワードに分解されます。ヒストリ拡張は、ヒストリ拡張文字、デフォルトでは、 !、が現れることで導入されます。バックスラッシュ ( \) と単一引用符だけがヒストリ拡張文字をクオート (無効に) することができます。
イベント指示子
イベント指示子はヒストリリストにおけるコマンド行エントリの参照です。
- !
- 空白, 改行, = または ( が続くときを除いて、ヒストリ置換が始まります。
- ! n
- コマンド行 n を参照します。
- !- n
- 現在のコマンド行マイナス n を参照します。
- !!
- 前のコマンドを参照します。これは、`!-1' と同義語です。
- ! string
- string で始まる最近のコマンドを参照します。
- !? string[?]
- string を含む最近のコマンドを参照します。後続する ? は string の直後が改行であるなら、省略できます。
- ^ string1^ string2^
- 迅速な置換。 string1 を string2 に置き換えて最後のコマンドを繰り返します。 ``!!:s/ string1/ string2/'' と同等です (下記の 修飾子を参照)。
- !#
- 今までにタイプされているコマンド行の全体。
ワード指示子
ワード指示子はイベントから必要なワードを選択するために使用されます。 : はワード指示子からイベント指定を切り離します。ワード指示子が ^, $, *, - または % で始まるなら省略できます。最初のワードが 0 (ゼロ) を意味している状態で、ワードは行の始まりから番号付けされます。ワードは単一の空白によって切り離された現在行に挿入されます。
- 0 (zero)
- 0 番目のワード。シェルでは、これはコマンド名 (ワード)です。
- n
- n 番目のワード。
- ^
- 最初の引数。すなわち、ワード 1。
- $
- 最後の引数。
- %
- 最近の `? string?' 検索で一致したワード。
- x -y
- 一連のワード。 `- y' は、`0- y' の短縮形です。
- *
- 0 番目を除くすべてのワード。これは、` 1-$' の同義語です。イベントにたった 1 つのワードがある場合、 * の使用はエラーではありません。その場合、空の文字列を返します。
- x*
- x-$ の短縮形です。
- x-
- x-$ は、 x* の簡略化に似ていますが、最後のワードを省略します。
ワード指示子がイベント指定なしで供給されるなら、イベントとして前のコマンドが使用されます。
修飾子
省略可能なワード指示子の後に、それぞれ `:' に先行した次の修飾子の 1 つ以上のシーケンスが現れるかもしれません。
- h
- 先頭だけ残して、後続するファイル名の構成要素を取り除きます。
- t
- 後部を残して、すべての先導するファイル名の構成要素を取り除きます。
- r
- basename を残して、形式 .xxx の後続する接尾辞を取り除きます。
- e
- 後続する接尾辞以外のすべてを取り除きます。
- p
- 新しいコマンドを印刷 (表示) しますが、それを実行しません。
- q
- それ以上の置換を回避して、置換ワードをクオート (無効に) します。
- x
- q のように代置換されたワードをクオートしますが、 空白 と改行でワードに割り込みます。
- s/ old/ new/
- イベント行で、最初に見つかる old を new に置き換えます。 / の代わりにどんなデリミタも使用することができます。最後のデリミタはイベント行の最後の文字であるなら省略可能です。デリミタは、1 つのバックスラッシュがある old と new でクオートできます。 new の中に &が現れるなら、 old で置き換えられます。 1 つのバックスラッシュは、 &をクオートします。 old が空であるなら、最後に置換された old に設定されるか、以前にヒストリ置換が行われていなければ、 !? string[?] 検索の最後の string です。
- &
- 前の置換を繰り返します。
- g
- 変更が全体のイベント行で適用されます。これは、` :s' (例えば、 ` :gs/ old / new /') または ` :&' 関連して使用されます。 ` :s' と共に使用されるなら、どんなデリミタも / の代わりに使用することができ、最後のデリミタはイベント行の最後の文字であるなら省略可能です。 a は、 g と同義語として使用されるかもしれません。
- G
- 次の ` s' 修飾子をイベント行における各単語に一度適用します。
ヒストリ関数でプログラミング
このセクションは他のプログラムでヒストリライブラリを使用する方法を説明しています。ヒストリの紹介
ヒストリライブラリを使用しているプログラマは、ヒストリリストで、任意のデータを行に関連づけ、リストから行を取り除く、任意のテキスト文字列を含む行としてリストを検索し、および直接リスト中でどんな行も参照する、行を覚えているために利用可能な関数があります。さらに、異なったプログラムにわたって一貫したユーザインタフェースを提供するヒストリ 拡張関数が利用可能です。ヒストリライブラリを使って書かれたプログラムを使用するユーザは、前の行のテキストを操作して、新しいコマンドでそのテキストを使用するための 1 組のよく知られているコマンドと共に一貫したユーザインタフェースの利点があります。基本的なヒストリ操作コマンドは、 bash で提供されるヒストリ置換と同じです。
プログラマが望むなら、コマンド行編集の利点が追加され、デフォルトで何らかのヒストリ操作を含む、 readline ライブラリを使用することができます。
他のコードで提供される任意の機能性のあるヒストリライブラリを使用する任意の関数を宣言する前に、アプリケーションの作者はヒストリライブラリの機能を使用する任意のファイルにファイル <readline/history.h> をインクルードするべきです。それは、ライブラリのパブリック関数と変数のすべてのための extern 宣言を供給して、パブリックデータ構造体のすべてを宣言しています。
ヒストリ記憶域
ヒストリリストはヒストリエントリの配列です。ヒストリエントリは次のように宣言されます:typedef void * histdata_t;
typedef struct _hist_entry {
char *line;
char *timestamp;
histdata_t data;
} HIST_ENTRY;
したがって、ヒストリリスト自体は次のように宣言されるかもしれません。
HIST_ENTRY ** the_history_list;
ヒストリライブラリの状態はただ 1 つの構造体にカプセル化されます:
/*
* 構造体はヒストリの活動している現在の状態を渡すために使用します。
*/
typedef struct _hist_state {
HIST_ENTRY **entries; /* エントリ自体へのポインタ. */
int offset; /* この配列中の位置ポインタ. */
int length; /* この配列中の要素の数. */
int size; /* この配列に割り付けられたスロットの数. */
int flags;
} HISTORY_STATE;
flags メンバが HS_STIFLED を含むなら、ヒストリは抑制されています。
ヒストリ関数
このセクションは、GNU ヒストリライブラリによってエクスポートされた様々な関数のための呼び出しシークエンスを説明しています。ヒストリと状態管理の初期化
このセクションは利用者のプログラムでヒストリ機能を使用したいと思うとき、ヒストリライブラリの状態を初期化して、管理するために使用される関数について説明しています。ヒストリリスト管理
これらの関数は、ヒストリリストで個々のエントリを管理するか、またはリスト自体を管理するパラメータを設定します。ヒストリリストに関する情報
これらの関数は全体のヒストリリストか個々のリストエントリに関する情報を返します。ヒストリリストの周りで移動
これらの関数は、設定するか、または変更するためにヒストリリストに現在のインデックスを許します。ヒストリリストの検索
これらの関数で、指定された文字列を含むエントリでヒストリリストを検索できます。検索は現在のヒストリ位置から前方と後方の両方で実行できます。検索は、文字列がヒストリエントリの始めに一致しなければならないことを意味する、 anchored (^) されるかもしれません。ヒストリファイルの管理
ヒストリライブラリは、ファイルからヒストリを読み込んで、ファイルにヒストリを書き込むことができます。このセクションは、ヒストリファイルを管理するための関数を文書化しています。ヒストリ展開
これらの関数はヒストリ拡張を実装します。- 0
- 拡張が行われなかったなら、 (テキストにおける唯一の変更がヒストリ拡張文字に先行するエスケープ文字の除去であるなら)。
- 1
- 拡張が行われたなら。
- -1
- 拡張でエラーがあったなら。
- 2
- 返された行は表示されるべきですが、 :p 修飾子と同様に、実行しません。
ヒストリ変数
このセクションは、GNU ヒストリライブラリによってエクスポートされた外部的に可視の変数について記述しています。関連ファイル
- ~/.history
- ヒストリが保存された読み込みと書き込みのためのデフォルトのファイル名
関連項目
- The Gnu Readline Library, Brian Fox and Chet Ramey
- The Gnu History Library, Brian Fox and Chet Ramey
- bash(1)
- readline(3)
作者
Brian Fox, Free Software FoundationChet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu
バグ報告
history ライブラリでバグを見つけたなら、それを報告するべきです。しかし、最初に、利用者はそれが本当にバグであり、利用者が使っている history ライブラリの最新版に現れるかを確かめるべきです。いったん、バグが実際に存在すると決定すれば、バグレポートを bug-readline@ gnu.org にメールしてください。また、修正があるなら、それをメールすることは歓迎されています! 提案と `賢明な' バグレポートは、 bug-readline@ gnu.org にメールするか、または Usenet のニュースグループ gnu.bash.bug にポスト (投稿) してください。
このマニュアルページに関するコメントとバグレポートは chet@ins.CWRU.Edu に直接送るべきです。
2003 July 31 | GNU History 5.0 |