@ignore
This file documents the end user interface to the GNU command line
editing feautres.  It is to be an appendix to manuals for programs which
use these features.  There is a document entitled "readline.texinfo"
which contains both end-user and programmer documentation for the GNU
Readline Library.

Copyright (C) 1988 Free Software Foundation, Inc.

Authored by Brian Fox.

Permission is granted to process this file through Tex and print the
results, provided the printed document carries copying permission notice
identical to this one except for the removal of this paragraph (this
paragraph not being relevant to the printed manual).

Permission is granted to make and distribute verbatim copies of this manual
provided the copyright notice and this permission notice are preserved on
all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
GNU Copyright statement is available to the distributee, and provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions.
@end ignore

@ignore
Japanese translation by Kazuhisa Ichikawa

(Please send your comments on this Japanese version to ki@home.email.ne.jp)
@end ignore

@node Command Line Editing
@appendix コマンドライン編集

ここでは、
GNU のコマンドライン編集のインターフェイスを説明します。

@menu
* Introduction and Notation::	Notation used in this text.
* Readline Interaction::	The minimum set of commands for editing a line.
* Readline Init File::		Customizing Readline from a user's view.
@end menu

@node Introduction and Notation
@section 行編集入門

以下のパラグラフでは、
キー・ストロークを表すための表記法について説明します。

文字列 @key{C-k} は Control-K と読み、
コントロール・キーが押されたままの状態でキー @key{k} が押された時に生成される文字を表します。

文字列 @key{M-k} は Meta-K と読み、
メタ・キー
（があるものとして、それ）
が押されたままの状態でキー @key{k} が押された時に生成される文字を表します。
メタ・キーがない場合、
同等のキー・ストロークを、
@i{最初に} @key{ESC} キーを押し、
次にキー @key{k} を押すことで生成することができます。
どちらの手順も、
キー @key{k} を@dfn{メタ化する}といいます。

文字列 @key{M-C-k} は Meta-Control-K と読み、
@key{C-k} を@dfn{メタ化する}ことにより生成される文字を指します。

さらに、
いくつかのキーには名前があります。
@key{DEL}、
@key{ESC}、
@key{LFD}、
@key{SPC}、
@key{RET}、
@key{TAB} はこの付録内でも、
初期化ファイルの中でも、
各々のキーを表します
（詳細については、
@pxref{Readline Init File}）。

@node Readline Interaction
@section Readline の操作
@cindex interaction, readline

しばしば対話的なセッションにおいて、
長いテキストを１行に記述した後で、
その行の先頭の単語のスペルが間違っていたことに気がつくことがあります。
Readline ライブラリは、
入力したテキストを操作するための一連のコマンドを提供しており、
これによって、
その行の大部分を入力し直すことなく、
タイプ・ミスしたところだけを修正することができます。
これらの編集コマンドを使って、
修正が必要なところにカーソルを移動させ、
テキストを削除したり、
修正テキストを挿入（insert）したりします。
その行の修正が終われば、
単に @key{RET} を押します。
@key{RET} を押すのに、
行末にいる必要はありません。
カーソルが行内のどこにあろうと、
その行全体が入力として受け付けられます。

@menu
* Readline Bare Essentials::	The least you need to know about Readline.
* Readline Movement Commands::	Moving about the input line.
* Readline Killing Commands::	How to delete text, and how to get it back!
* Readline Arguments::		Giving numeric arguments to commands.
@end menu

@node Readline Bare Essentials
@subsection Readline の基本

行内に文字を入力するには、
単にその文字をタイプします。
タイプされた文字はカーソルの位置に表示され、
カーソルは１桁分右へ移動します。
１文字打ち間違えた場合は、
@key{DEL} によって後退して打ち間違えた文字を削除することができます。

時には、
本当は入力したかった文字を入力せず、
その誤りに気がつくことなく、
さらに数文字を入力してしまうということがあります。
このような場合には、
@key{C-b} によってカーソルを左に移動し、
誤りを訂正することができます。
訂正後、
@key{C-f} によってカーソルを右に移動することができます。

行の途中にテキストを追加すると、
挿入（insert）された文字のためのスペースを空けるために、
カーソルの右側にある文字が右方向に押しやられることに気がつくでしょう。
同様に、
カーソル位置にあるテキストを削除すると、
文字が削除されたために生じる空白を埋めるために、
カーソルの右側にある文字が左方向に引き戻されます。
入力行のテキストを編集するための基本中の基本操作の一覧を以下に示します。

@table @asis
@item @key{C-b}
１文字戻ります
@item @key{C-f}
１文字進みます
@item @key{DEL}
カーソルの左にある文字を削除します
@item @key{C-d}
カーソル位置にある文字を削除します
@item @w{表示可能な文字}
行内のカーソル位置にその文字自身を挿入（insert）します
@item @key{C-_}
ユーザの最後の操作を取り消して元に戻します。
行内に文字が無くなるまで取り消しを繰り返すことが可能です
@end table

@node Readline Movement Commands
@subsection Readline 移動コマンド

上記の一覧は、
ユーザが入力行を編集するのに必要な最も基本的なキー・ストロークを説明したものです。
ユーザの便利を考え、
@key{C-b}、
@key{C-f}、
@key{C-d}、
@key{DEL} に加えて多くのコマンドが追加されてきました。
以下に、
行内をより迅速に動きまわるためのコマンドをいくつか示します。

@table @key
@item C-a
行の先頭に移動します
@item C-e
行の末尾に移動します

@item M-f
１単語分先に進みます
@item M-b
１単語分前に戻ります
@item C-l
画面上の情報を消去し、
カレント行が１番上にくるように再表示します
@end table

@key{C-f} が１文字分先に進むのに対して、
@key{M-f} が１単語分先に進む点に注意してください。
大まかな慣例として、
コントロール・キーを使うと文字単位の操作になり、
メタ・キーを使うと単語単位の操作になります。

@node Readline Killing Commands
@subsection Readline キル（kill）コマンド

テキストを@dfn{キル（kill）する}とは、
行からテキストを削除し、
その際に、
そのテキストを後に引き出してその行内に@dfn{挿入（yank）する}ことができるように退避しておくことを指します。
あるコマンドの説明に「テキストをキル（kill）する」という記述があれば、
そのテキストを後に別の箇所
（あるいは同じ箇所）
において再入手することができると考えて間違いありません。

以下に、テキストをキル（kill）するためのコマンドを一覧で示します。

@table @key
@item C-k
カレントなカーソル位置から行末までのテキストをキル（kill）します。

@item M-d
カーソル位置からカーソルの置かれている単語の末尾までをキル（kill）します。
カーソルが２つの単語の間にあるときは、
次の単語の末尾までをキル（kill）します。

@item M-DEL
カーソル位置から、
カーソルの置かれている単語の先頭までをキル（kill）します。
カーソルが２つの単語の間にあるときは、
前の単語の先頭までをキル（kill）します。

@item C-w
カーソル位置から、
それより前にある最初の空白までをキル（kill）します。
単語間の境界が異なるので、
これは @key{M-DEL}L とは異なります。

@end table

次に、キル（kill）されたテキストを引き出して行内へ@dfn{挿入（yank）する}方法を示します。

@table @key
@item C-y
バッファ内のカーソル位置に、
最後にキル（kill）されたテキストを挿入（yank）します。

@item M-y
キル・リング（kill-ring）を回転させ、
新たにトップに来たテキストを挿入（yank）します。
このコマンドを実行できるのは、
１つ前に実行したコマンドが @key{C-y} もしくは @key{M-y} の場合だけです。
@end table

キル（kill）コマンドを使うと、
テキストは@dfn{キル・リング（kill-ring）}に退避されます。
キル（kill）コマンドを任意の回数連続して実行すると、
キル（kill）されたテキストはすべて連結されて退避されます。
したがって、
挿入（yank）を行うと、
そのすべてを一気に手に入れることができます。
キル・リング（kill-ring）は個々の行に固有のものではありません。
以前入力した行においてキル（kill）したテキストを、
後になって別の行を入力している時に、
挿入（yank）することができます。

@node Readline Arguments
@subsection Readline の引数

Readline コマンドには数値引数を渡すことができます。
数値引数は、
繰り返し回数として使われたり、
引数の@i{符号}として使われたりします。
通常は先に進むようなコマンドに負の数を引数として指定すると、
前に戻るようになります。
例えば、
行の先頭までのテキストをキル（kill）するには、
@key{M--} @key{C-k} とします。

コマンドに数値引数を渡す通常の方法は、
コマンドの前にメタ化された数値を入力することです。
入力した最初の数値が、
マイナス記号（@key{-}）の場合、
引数の符号は負になります。
引数を開始するために１つメタ化された数値を入力すれば、
その後は、
残りの数値を入力し、
続いてコマンドを入力することができます。
例えば、
@key{C-d} コマンドに引数として 10 を渡すためには、
@key{M-1 0 C-d} を入力します。


@node Readline Init File
@section Readline 初期化ファイル

Readline ライブラリには @sc{gnu} Emacs 風のキー・バインディングが付いていますが、
ユーザが異なるキー・バインディングを使いたいということがあるかもしれません。
ユーザのホーム・ディレクトリ内の@dfn{初期化}ファイルにコマンドを記述することで、
Readline を使うプログラムをカスタマイズすることができます。
このファイルの名前は、
@file{~/.inputrc} です。

Readline ライブラリを使うプログラムが起動されると、
@file{~/.inputrc} ファイルが読み込まれ、
キー・バインディングが設定されます。

さらに、
@key{C-x C-r} コマンドによってこの初期化ファイルが再読み込みされるので、
ユーザが初期化ファイルに加えた変更を組み込むことができます。

@menu
* Readline Init Syntax::	Syntax for the commands in @file{~/.inputrc}.
* Readline vi Mode::		Switching to @code{vi} mode in Readline.
@end menu

@node Readline Init Syntax
@subsection Readline 初期化ファイルの構文

@file{~/.inputrc} ファイルの中では、４種の構成物のみ許されます。

@table @asis
@item 変数の設定
Readline の中の２、３の変数の状態を変更することができます。
これは、
初期化ファイルの中で @code{set} コマンドを使うことで行います。
行編集コマンドとして @code{vi} を使いたいということを指定するには、
次のようにします。

@example
set editing-mode vi
@end example

現在のところ、
設定できる変数は極めて少ないので、
ここでそのすべてを取り上げます。

@table @code

@item editing-mode
@vindex editing-mode
@code{editing-mode} 変数は、
どの編集モードを使うのかを制御します。
デフォルトでは、
@sc{gnu} Readline は、
キー・ストロークが Emacs によく似ている Emacs 編集モードで起動します。
この変数は、
@code{emacs} と @code{vi} のどちらかに設定することができます。

@item horizontal-scroll-mode
@vindex horizontal-scroll-mode
この変数は、
@code{On} と @code{Off} のどちらかに設定することができます。
これを @code{On} に設定すると、
１行のテキストの長さがスクリーン幅よりも長い場合に、
編集中の行のテキストが次の行に折り返すことなく、
同じ行の上で水平方向にスクロールするようになります。
デフォルトでは、
この変数は @code{Off} に設定されています。

@item mark-modified-lines
@vindex mark-modified-lines
この変数が @code{On} に設定されると、
変更されたヒストリ行の先頭にアスタリスク（@samp{*}）が表示されます。
この変数はデフォルトでは Off です。

@item prefer-visible-bell
@vindex prefer-visible-bell
この変数が @code{On} に設定されると、
視覚的なベル@footnote{@emph{訳注}：
ベル音を鳴らす代わりに、
画面表示をフラッシュさせることを表しています。 }
が利用できる場合には、
単に端末のベルを鳴らす代りに、
視覚的なベルを使用します。
デフォルトでは、
この値は @code{Off} です。
@end table

@item キー・バインディング
@file{~/.inputrc} ファイルの中でキー・バインディングを制御するための構文は単純です。
まず、
キー・バインディングを変更したいコマンドの@i{名前}を知っている必要があります。
以下に、
コマンド名、
そのコマンドのデフォルトのキー・バインディング、
そのコマンドが何をするものであるかについての簡単な説明を一覧にして示します。

コマンドの名前が分れば、
@file{~/.inputrc} ファイル内の１行に、
そのコマンドに割り当てたいキーの名前に続けてコロン、
さらに続けてそのコマンドの名前を記述します。
キーの名前は、
ユーザの好みに応じて異なる方法で表現することができます。

@table @asis
@item @w{@var{keyname}: @var{function-name} or @var{macro}}
@var{keyname} は英語で記述されたキーの名前です。
例えば、
以下のようになります。
@example
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: ">&output"
@end example

上の例では、
@key{C-u} が関数 @code{universal-argument} に割り当てられ、
@key{C-o} がその右側に記述されたマクロ
（行内に @samp{>&output} というテキストを挿入（insert）するマクロ）
を実行するよう割り当てられます。

@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
@var{keyseq} は、
前の例の @var{keyname} とは異なり、
一連のキー入力全体を記述する文字列を指定することができます。
一連のキーは、
２重引用符で囲みます。
以下の例に示すように、
@sc{gnu} Emacs スタイルのキー・エスケープを使うことができます。

@example
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
@end example

上の例では、
@key{C-u} が
（最初の例と同様）
関数 @code{universal-argument} に、
@key{C-x C-r} が関数 @code{re-read-init-file} に、
@key{ESC [ 1 1 ~} が @samp{Function Key 1} というテキストを挿入（insert）するよう、
それぞれ割り当てられています。

@end table
@end table

@menu
* Commands For Moving::		Moving about the line.
* Commands For History::	Getting at previous lines.
* Commands For Text::		Commands for changing text.
* Commands For Killing::	Commands for killing and yanking.
* Numeric Arguments::		Specifying numeric arguments, repeat counts.
* Commands For Completion::	Getting Readline to do the typing for you.
* Miscellaneous Commands::	Other miscillaneous commands.
@end menu

@need 2000
@node Commands For Moving
@subsubsection 移動のためのコマンド

@ftable @code
@item beginning-of-line (@key{C-a})
カレント行の先頭に移動します。

@item end-of-line (@key{C-e})
カレント行の末尾に移動します。

@item forward-char (@key{C-f})
１文字分先に進みます。

@item backward-char (@key{C-b})
１文字分後へ戻ります。

@item forward-word (@key{M-f})
次の単語の末尾へ移動します。

@item backward-word (@key{M-b})
現在カーソルが指している単語、
もしくは、
１つ前の単語の先頭に移動します。

@item clear-screen (@key{C-l})
画面を消去し、
カレント行が画面のトップになるようにして再表示します。

@end ftable

@need 2000
@node Commands For History
@subsubsection ヒストリを操作するためのコマンド

@ftable @code
@item accept-line (Newline, Return)
カーソルの位置にかかわりなく、
行全体を受け付けます。
この行が空行ではない場合、
それをヒストリ・リストに追加します。
この行がヒストリ行である場合は、
そのヒストリ行を最初の状態に復元します。

@item previous-history (@key{C-p})
ヒストリ・リストを１つ上に移動します。

@item next-history (@key{C-n})
ヒストリ・リストを１つ下に移動します。

@item beginning-of-history (@key{M-<})
ヒストリの最初の行に移動します。

@item end-of-history (@key{M->})
入力ヒストリの最後の行、
すなわち、
ユーザがまさに入力している行に移動します。

@item reverse-search-history (@key{C-r})
カレントな行から始めて後方検索を行います。
必要に応じて、
ヒストリの上の方へ移動します。
インクリメンタルな検索を行います。

@item forward-search-history (@key{C-s})
カレントな行から始めて前方検索を行います。
必要に応じて、
ヒストリの下の方へ移動します。

@end ftable

@need 2000
@node Commands For Text
@subsubsection テキストを変更するためのコマンド

@ftable @code
@item delete-char (@key{C-d})
カーソル位置にある文字を削除します。
カーソルが空行の先頭にあり、
最後に入力された文字が @key{C-d} でない場合は、
EOF を返します。

@item backward-delete-char (Rubout)
カーソル位置の前にある文字を削除します。
数値引数を指定すると、
文字を削除するのではなくキル（kill）するよう指示したことになります。

@item quoted-insert (@key{C-q}, @key{C-v})
このコマンドのあとに入力する文字をそのまま行に追加します。
これが、
例えば @key{C-q} などを挿入する（insert）方法です。

@item tab-insert (@key{M-TAB})
タブを挿入（insert）します。

@item self-insert (a, b, A, 1, !, ...)
その文字自身を挿入（insert）します。

@item transpose-chars (@key{C-t})
ポイントの前にある文字を１文字分先にドラッグして、
ポイントの位置にある文字の後ろに持っていきます。
ポイント自身も同様に先に進みます。
ポイントが行末にある場合には、
ポイントの前の２つの文字を入れ替えます。
負の引数を与えても機能しません。

@item transpose-words (@key{M-t})
カーソルの後ろにある単語をドラッグして、
カーソルの前にある単語の前に持っていきます。
カーソル自身も、
カーソルの前にある単語の前に移動します。

@item upcase-word (@key{M-u})
カレントな
（あるいは、
１つ後の）
単語内のすべての文字を大文字に変換します。
負の引数を指定すると、
１つ前の単語内のすべての文字を大文字に変換しますが、
ポイントは移動しません。

@item downcase-word (@key{M-l})
カレントな
（あるいは、
１つ後の）
単語内のすべての文字を小文字に変換します。
負の引数を指定すると、
１つ前の単語内のすべての文字を小文字に変換しますが、
ポイントは移動しません。

@item capitalize-word (@key{M-c})
カレントな
（あるいは、
１つ後の）
単語内の先頭の文字を大文字に変換します。
負の引数を指定すると、
１つ前の単語内の先頭の文字を大文字に変換しますが、
ポイントは移動しません。

@end ftable

@need 2000
@node Commands For Killing
@subsubsection キル（kill）とヤンク（yank）

@ftable @code
@item kill-line (@key{C-k})
カレントなカーソル位置から行末までのテキストをキル（kill）します。

@item backward-kill-line ()
行頭までのテキストをキル（kill）します。
これには、
通常キーが割り当てられていません。

@item kill-word (@key{M-d})
カーソル位置からカレントな単語の末尾までをキル（kill）します。
カーソルが単語の間にある場合は、
次の単語の末尾までをキル（kill）します。

@item backward-kill-word (@key{M-DEL})
カーソルの前にある単語をキル（kill）します。

@item unix-line-discard (@key{C-u})
UNIX の行入力において @key{C-u} がかつて機能していたのと同様の方法で行全体をキル（kill）します。
キル（kill）されたテキストはキル・リング（kill-ring）に退避されます。

@item unix-word-rubout (@key{C-w})
UNIX の行入力において @key{C-w} がかつて機能していたのと同様の方法で単語をキル（kill）します。
キル（kill）された単語はキル・リング（kill-ring）に退避されます。
これは、
単語間の境界が異なるために、
backward-kill-word とは異なります。

@item yank (@key{C-y})
バッファ内のポイント位置にキル・リング（kill-ring）のトップにあるテキストを挿入（yank）します。

@item yank-pop (@key{M-y})
キル・リング（kil-ring）を回転させ、
新しくトップになったテキストを挿入（yank）します。
１つ前に実行したコマンドが yank もしくは yank-pop であった場合のみ、
このコマンドを実行することができます。
@end ftable

@need 2000
@node Numeric Arguments
@subsubsection 数値引数の指定

@ftable @code

@item digit-argument (@key{M-0}, @key{M-1}, ... @key{M--})
数値を既に蓄積済みの引数に追加するか、
新しい引数を開始します。
@key{M--} は負の引数を開始します。

@item universal-argument ()
@sc{gnu} Emacs における @key{C-u} と同様の動作をします。
デフォルトでは、
キーは割り当てられていません。
@end ftable


@need 2000
@node Commands For Completion
@subsubsection Readline による入力補完

@ftable @code
@item complete (TAB)
ポイント位置の前にあるテキストの補完を試みます。
実際の動きは実装により定義されます。
通常、
ファイル名をとる引数を入力している時には、
ファイル名を補完することができます。
コマンド名を入力している時には、
コマンド名を補完することができます。
GDB に対してシンボル名を入力している時には、
シンボル名を補完することができます。
Bash に対して変数名を入力している時には、
変数名を補完することができます。

@item possible-completions (M-?)
ポイントの前のテキストの補完候補を一覧表示します。
@end ftable

@need 2000
@node Miscellaneous Commands
@subsubsection その他のコマンド

@ftable @code

@item re-read-init-file (@key{C-x} @key{C-r})
ユーザの @file{~/.inputrc} ファイルの内容を読み込み、
そこに記述されているバインディングを組み込みます。

@item abort (@key{C-g})
カレントな編集コマンドの実行を停止します。

@ignore
@c I have no idea what this means, and can't figure it out by
@c experiment, and can't find it in the readline source.
@c doc@cygnus.com, 20may1993.
@item do-uppercase-version (@key{M-a}, @key{M-b}, ...)
Run the command that is bound to your uppercase brother.
@end ignore

@item prefix-meta (ESC)
次に入力する文字をメタ化します。
これは、
メタ・キーのないキーボードを使っている人のためのコマンドです。
@key{ESC f} を入力するのは @key{M-f} を入力するのと同じことです。

@item undo (@key{C-_})
インクリメンタルな取り消し処理を実行します。
取り消す内容は、
各行ごとに別々に記憶されています。

@item revert-line (@key{M-r})
行に加えられたすべての変更を取り消します。
これは、
最初の状態に戻すのに必要な回数だけ undo コマンドを実行するようなものです。
@end ftable

@need 2000
@node Readline vi Mode
@subsection Readline の @code{vi} モード

@cindex @code{vi} style command editing
@kindex toggle-editing-mode
Readline ライブラリは @code{vi} の編集機能のフルセットを提供する訳ではありませんが、
簡単な行編集を行うのに十分な機能は備えています。

@sc{gnu} Emacs 編集モードと @code{vi} 編集モードを対話的に切り替えるには、
@key{M-C-j}
（toggle-editing-mode）
コマンドを使います。

@code{vi} モードで行入力を行う時には、
あたかも i を入力したかのように、
最初から挿入モードになっています。
@key{ESC} を押すと編集モードに替わり、
標準的な @code{vi} の移動キーにより行内テキストを編集することができます。
k により１つ前のヒストリ行に、
j によって１つ後のヒストリ行に移動すること等ができます。

