[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


コマンドライン編集

この章では、 GNUのコマンドライン編集インターフェイスの基本的な特徴について説明します。

行編集入門

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

C-kは、 Control-Kという意味です。 これは、 コントロール・キーが押されたままの状態でキーkが押されたときに生成される文字を表わします。

M-kは、 Meta-Kという意味です。 これは、 メタ・キー (があるものとして、それ) が押されたままの状態でキーkが押されたときに生成される文字を表わします。 メタ・キーがない場合、 最初にESCキーを押し、 次にキーkを押すことで、 同等のキー・ストロークを生成することができます。 どちらの手順も、 キーkメタ化する、 といいます。

M-C-kは、 Meta-Control-Kという意味です。 これは、 C-kメタ化することにより生成される文字を指します。

さらに、 いくつかのキーには名前があります。 DELESCLFDSPCRETTABは、 この文章の中でも、 初期化ファイルの中でも、 各々のキーを表わします (Readline初期化ファイル参照)。

Readlineの操作

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

Readlineの基本

行内に文字を入力するには、 単にその文字をタイプします。 タイプされた文字はカーソルの位置に表示され、 カーソルは1桁分右へ移動します。 1文字打ち間違えた場合は、 削除文字(erase character)を使って、 後退しながら打ち間違えた文字を削除することができます。

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

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

C-b
1文字戻ります。
C-f
1文字進みます。
DEL
カーソルの左にある文字を削除します。
C-d
カーソル位置にある文字を削除します。
表示可能な文字
行内のカーソル位置にその文字を挿入します。
C-_
最後の編集コマンドを取り消して元に戻します。 行内に文字が無くなるまで取り消しを繰り返すことが可能です。

Readline移動コマンド

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

C-a
行の先頭に移動します。
C-e
行の末尾に移動します。
M-f
1単語分先に進みます。 単語は、 文字と数字から構成されます。
M-b
1単語分前に戻ります。
C-l
画面上の情報を消去し、 カレント行が画面の一番上にくるようにして再表示します。

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

Readlineキル(kill)コマンド

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

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

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

C-k
カレントなカーソル位置から行末までのテキストをキルします。
M-d
カーソル位置から、 カーソルの置かれている単語の末尾までをキルします。 カーソルが2つの単語の間にあるときは、 次の単語の末尾までをキルします。
M-DEL
カーソル位置から、 カーソルの置かれている単語の先頭までをキルします。 カーソルが2つの単語の間にあるときは、 前の単語の先頭までをキルします。
C-w
カーソル位置から、 それより前にある最初の空白類までをキルします。 単語間の境界が異なるので、 これはM-DELとは異なります。

キルされたテキストを引き出して行内へヤンクする方法を、 以下に示します。 ヤンクとは、 最後にキルされたテキストを、 キル・バッファからコピーすることを意味しています。

C-y
バッファ内のカーソル位置に、 最後にキルされたテキストをヤンクします。
M-y
キル・リングを回転させ、 新たに一番上にきたテキストをヤンクします。 このコマンドを実行できるのは、 1つ前に実行したコマンドがC-yまたはM-yの場合だけです。

Readlineの引数

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

コマンドに数値引数を渡す通常の方法は、 コマンドの前にメタ化された数字を入力することです。 入力された最初の「数字」がマイナス記号(-)の場合、 引数の符号は負になります。 引数を開始するためには、 メタ化された数字を1つだけ入力すればよく、 残りの数字はそのまま入力することができます。 そして最後にコマンドを入力します。 例えば、 C-dコマンドに引数として10を渡すためには、 `M-1 0 C-d'と入力します。

履歴中のコマンドの検索

readlineは、 コマンド履歴 の中から、 指定された文字列を含む行を検索するコマンドを提供しています。 インクリメンタル(incremental)と 非インクリメンタル(non-incremental)の2つの検索モードがあります。

インクリメンタル(incremental)・モードでは、 ユーザが検索文字列を入力し終わる前から検索が始まります。 検索文字列の中の文字が1つ入力されるたびに、 Readlineは、 それまで入力された文字列にマッチする、 履歴の中の次のエントリを表示します。 インクリメンタル・モードの検索では、 検索したい履歴エントリを見つけるのに本当に必要となる文字だけを入力するだけで済みます。 インクリメンタル・モードの検索を中止するのには、 isearch-terminators変数の値の中に含まれる文字が使われます。 この変数に値が割り当てられていない場合は、 ESC文字やC-jによってインクリメンタル・モードの検索が中止されます。 C-gは、 インクリメンタル・モードの検索を終了させて、 元の行を表示します。 検索が中止されると、 検索文字列を含む履歴エントリがカレント行となります。 検索文字列にマッチする他のエントリを履歴リストから見つけるためには、 必要に応じてC-sまたはC-rを入力します。 これによって、 それまでに入力された検索文字列にマッチする次のエントリを履歴から見つけるために、 下の方向、 または、 上の方向に検索が行われます。 Readlineコマンドにバインドされているキー・シーケンスのうち上記以外のものを入力すると、 検索は中止され、 そのコマンドが実行されます。 例えば RETが入力されると、 検索は中止され、 そのときの行が受け入れられたことになります。 したがって、 履歴リストの中のそのコマンドが実行されます。

非インクリメンタル(non-incremental)・モードでは、 マッチする履歴行の検索を開始する前に、 検索文字列全体を読み込みます。 検索文字列は、 ユーザによって入力されたものでも構いませんし、 カレント行の内容の一部であっても構いません。

Readline初期化ファイル

Readlineライブラリには、 emacsスタイルのキー・バインディングがデフォルトで組み込まれていますが、 異なるキー・バインディングを使うこともできます。 ホーム・ディレクトリ内のファイルinputrcにコマンドを記述することで、 誰でもReadlineを使うプログラムをカスタマイズすることができます。 このファイルの名前は、 環境変数INPUTRCの値から取られます。 この変数に値がセットされていない場合のデフォルトは、 `~/.inputrc'です。

Readlineライブラリを使うプログラムが起動されると、 初期化ファイルが読み込まれ、 キー・バインディングが設定されます。

さらに、 C-x C-rコマンドを実行すると、 この初期化ファイルが再読み込みされます。 初期化ファイルに変更が加えられていれば、 その変更が反映されます。

Readline初期化ファイルの構文

Readline初期化ファイルの中では、 ほんの少数の基本的な構文だけが使用できます。 空行は無視されます。 `#'で始まる行はコメントです。 `$'で始まる行は、 条件構文を表わします (条件初期化構文参照)。 その他の行は、 変数設定とキー・バインディングを示します。

変数設定
初期化ファイルの中でsetコマンドを使用してReadlineの変数の値を変更することによって、 Readlineの実行時の振る舞いを変更することができます。 デフォルトのEmacsスタイルのキー・バインディングを変更して、 viの行編集コマンドを使用できるようにするには、 以下のようにします。
set editing-mode vi
以下の変数によって、 実行時の振る舞いのかなりの部分が変更可能です。
bell-style
Readlineが端末のベル音を鳴らしたいと判断した場合に、 何が起こるかを制御します。 `none'がセットされると、 Readlineはベル音を鳴らしません。 `visible'がセットされると、 視覚的なベル(21) が利用可能であれば、 それを使います。 `audible'(デフォルト)がセットされると、 Readlineは、 端末のベル音を鳴らそうと試みます。
comment-begin
insert-commentコマンドが実行されたときに、 行の先頭に挿入される文字列です。 デフォルトの値は"#"です。
completion-ignore-case
`on'がセットされると、 Readlineは、 大文字・小文字を区別せずに、 ファイル名のマッチングや補完を行います。 デフォルトの値は`off'です。
completion-query-items
ユーザに対して補完候補の一覧を見たいかどうか問い合わせるタイミングを決定する、 補完候補の数です。 補完候補の数がこの値よりも多いと、 Readlineは、 補完候補の一覧を見たいかどうかをユーザに対して問い合わせることになります。 この値よりも少ない場合は、 問い合わせを行うことなく一覧を表示します。 デフォルトの境界は100です。
convert-meta
`on'がセットされると、 Readlineは、 第8ビットがセットされている文字をASCIIのキー・シーケンスに変換します。 これは、 該当文字の第8ビットを落として、 その前にESC文字を付加することで、 メタ・プレフィックス・キー・シーケンス(meta-prefixed key sequence) に変換することによって行われます。 デフォルトの値は`on'です。
disable-completion
`On'がセットされると、 Readlineは単語補完を抑制します。 補完文字(completion character)は、 あたかもself-insertにマップされたかのように、 行内に挿入されます。 デフォルトは`off'です。
editing-mode
editing-mode変数は、 デフォルトで使用するキー・バインディングの種類を制御します。 Readlineは、 デフォルトの状態では、 Emacs編集モードで起動します。 このモードは、 キー・ストロークがEmacsに非常に良く似ています。 この変数は、 `emacs'`vi'のどちらかに設定することができます。
enable-keypad
`on'がセットされると、 Readlineは、 呼び出されたときに、 アプリケーション・キーパッド(application keypad)を有効にすることを試みます。 システムによっては、 矢印キーを使用できるようにするために、 これが必要となります。 デフォルトは`off'です。
expand-tilde
`on'がセットされると、 Readlineが単語補完を試みる際に、 チルダの展開が行われます。 デフォルトは`off'です。
horizontal-scroll-mode
この変数は、 `on'`off'のどちらかに設定することができます。 これを`on'に設定すると、 1行のテキストの長さがスクリーン幅よりも長い場合に、 編集中の行のテキストが次の行に折り返すことなく、 同じ行の上で水平方向にスクロールするようになります。 デフォルトでは、 この変数には`off'がセットされています。
input-meta
`on'がセットされると、 Readlineは、 8ビット入力に対する端末側のサポートがどうであれ、 8ビット入力を有効にします (読み取られた文字の第8ビットを落としません)。 デフォルト値は`off'です。 meta-flagは、 この変数の別名です。
isearch-terminators
インクリメンタル・モードの検索を停止させるべき文字の集合。 これらの文字は、 それまでに入力されてきた検索コマンドの一部として使われることはありません (履歴中のコマンドの検索参照)。 この変数に値が割り当てられていない場合、 ESCC-Jが、 インクリメンタル・モードの検索を停止させる文字となります。
keymap
Readlineが認識している、 キー・バインディング・コマンドのカレントなキーマップをセットします。 セットすることのできるkeymap名は、 emacsemacs-standardemacs-metaemacs-ctlxvivi-commandvi-insertです。 vivi-commandと同等です。 また、 emacsemacs-standardと同等です。 デフォルトの値は、 emacsです。 editing-mode変数の値も、 デフォルトのキーマップに影響を及ぼします。
mark-directories
`on'がセットされると、 補完されたディレクトリ名の後ろにスラッシュが付加されます。 デフォルトは`on'です。
mark-modified-lines
この変数に`on'がセットされると、 Readlineは、 変更された履歴行の先頭にアスタリスク(`*')を表示します。 この変数は、 デフォルトでは`off'です。
output-meta
`on'がセットされると、 Readlineは、 第8ビットがセットされている文字を、 メタ・プレフィックス・エスケープ・シーケンス (meta-prefixed escape sequence) としてではなく、 直接表示します。 デフォルトは`off'です。
print-completions-horizontally
`on'がセットされると、 Readlineは、 マッチする補完候補をアルファベット順にソートして、 画面の下向きにではなく、 水平方向に並べて表示します。 デフォルトは`off'です。
show-all-if-ambiguous
補完関数のデフォルトの振る舞いを変更します。 `on'がセットされると、 複数の補完候補を持つ単語は、 ベル音を鳴らすことなく、 直ちに補完候補を一覧表示させます。 デフォルト値は`off'です。
visible-stats
`on'がセットされると、 補完候補を一覧表示する際に、 ファイル・タイプを示す文字がファイル名の後ろに付加されます。 デフォルトは`off'です。
キー・バインディング
初期化ファイルの中でキー・バインディングを制御するための構文は単純です。 まず、 キー・バインディングを変更したいコマンドの名前を知っている必要があります。 以下のセクションにおいて、 コマンドの名前、 そのコマンドにデフォルトのキー・バインディングがある場合はそのバインディング、 および、 そのコマンドが何をするものであるかについての簡単な説明を、 一覧にして示します。 コマンドの名前を知っていれば、 初期化ファイルの中で、 コマンドにバインドしたいキーの名前、 コロン、 そして最後にコマンドの名前を、 1行にして記述するだけです。 キーの名前は、 好みに応じて異なる方法で表現することができます。
keyname: function-nameまたはmacro
keynameは、 英語で記述されたキーの名前です。 例えば、 以下のようになります。
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
上の例では、 C-uが関数universal-argumentにバインドされ、 C-oがその右側に記述されたマクロ (行内に`> output'というテキストを挿入するマクロ) を実行するようバインドされます。
"keyseq": function-nameまたはmacro
前の例のkeynameとは異なり、 keyseqには、 キー・シーケンス全体を示す文字列を指定することができます。 これは、 キー・シーケンスを二重引用符で囲むことによって実現されます。 以下の例に示すように、 いくつかのGNU Emacsスタイルのキー・エスケープを使うことができますが、 特殊文字の名前は認識されません。
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
上の例では、 C-uが (最初の例と同様) 関数universal-argumentに、 `C-x C-r'が関数re-read-init-fileに、 `ESC [ 1 1 ~'`Function Key 1'というテキストを挿入するよう、 それぞれバインドされています。
キー・シーケンスを指定する際には、 以下のGNU Emacsスタイルのエスケープ・シーケンスが利用できます。
\C-
コントロール・プレフィックス
\M-
メタ・プレフィックス
\e
エスケープ文字
\\
バックスラッシュ
\"
"
\'
'
GNU Emacsスタイルのエスケープ・シーケンスに加えて、 別のバックスラッシュ・エスケープ群が利用できます。
\a
警告(ベル)
\b
バックスペース
\d
削除
\f
フォーム・フィード
\n
改行
\r
復帰(carriage return)
\t
水平タブ
\v
垂直タブ
\nnn
ASCIIコードが8進数値のnnn (1個以上3個以下の数字) に相当する文字
\xnnn
ASCIIコードが16進数値のnnn (1個以上3個以下の数字) に相当する文字
マクロのテキストを入力する際には、 マクロ定義であることを示すために、 単一引用符または二重引用符を使わなければなりません。 引用符に囲まれないテキストは、 関数名であると見なされます。 マクロ本体においては、 上記のバックスラッシュ・エスケープは展開されます。 バックスラッシュとそれに続く文字の組み合わせがバックスラッシュ・エスケープに該当しない場合、 マクロのテキストの中のバックスラッシュは、 `"'`''も含めて、 直後にある文字を引用します。 例えば、 以下のバインディングによって、 `C-x \'は、 行内に`\'を1つ挿入することになります。
"\C-x\\": "\\"

条件初期化構文

Readlineは、 Cのプリプロセッサにおける条件コンパイル機能と質的に類似した機能を実装しています。 これによって、 あるテストの結果に応じてキー・バインディングや変数設定が実行されるようにすることができます。 4種類のパーサ指示子が使われます。

$if
$ifは、 編集モード、 使用されている端末、 あるいは、 Readlineを使用しているアプリケーションに応じてバインディングが行われるようにすることを可能にします。 $ifの後ろに、 テストされる内容が行末まで続きます。 テストされる内容をほかのものと分離するために特別に文字を使う必要はありません。
mode
Readlineがemacsモードとviモードのどちらで動作しているかをテストするために、 $if指示子の一形式であるmode=が使用されます。 例えば、 Readlineがemacsモードで開始されている場合にのみ、 emacs-standardemacs-ctlxのキーマップでバインディングをセットするようにするために、 これを`set keymap'コマンドと組み合わせて使用することができます。
term
term=という形式は、 端末のファンクション・キーによって特定のキー・シーケンスが出力されるようなバインディングを行うなどの目的で、 端末固有のキー・バインディングを組み込むために使用することができます。 `='の右側の単語は、 端末の完全名と、 端末の名前のうち最初の`-'までの部分の両方に対してテストされます。 これにより、 例えばsunは、 sunsun-cmdの両方にマッチすることになります。
application
applicationは、 アプリケーション固有の設定を組み込むために使用されます。 Readlineライブラリを使用する個々のプログラムがセットするapplication name (アプリケーション名) をテストすることができます。 特定のプログラムにとって役に立つ関数に対してキー・シーケンスをバインドするために、 これを使用することができます。 例えば以下のコマンドは、 Bashにおいて、 カレントな単語、 または、 1つ前の単語を引用符で囲むキー・シーケンスを追加します。
$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
$endif
このコマンドは、 前の例が示すように、 $ifコマンドを終わらせます。
$else
$if指示子から枝分かれしたこの部分に記述されたコマンドは、 テスト結果が偽であった場合に実行されます。
$include
この指示子は、 引数としてファイル名を1つ取り、 そのファイルからコマンドとバインディングを読み込みます。
$include /etc/inputrc

初期化ファイルのサンプル

以下に、 inputrcファイルの実例を示します。 この中では、 キー・バインディング、 変数割り当て、 条件構文の例が示されています。

# このファイルは、Gnu Readlineライブラリを使うプログラムの行入力編集
# の振る舞いを制御する。Gnu Readlineライブラリを使うプログラムには、
# FTP、Bash、Gdbなどがある。
#
# inputrcファイルは、C-x C-rによって再読み込みすることができる。
# '#'で始まる行は、コメントである。
#
# 最初に、/etc/Inputrcからシステム全体のバインディングと変数割り当て
# を取り込む。
$include /etc/Inputrc

#
# emacsモードにおける種々のバインディングをセットする。

set editing-mode emacs 

$if mode=emacs

Meta-Control-h:	backward-kill-word	関数名の後ろのテキストは無視される。

#
# キーパッド・モードにおける矢印キー
#
#"\M-OD":        backward-char
#"\M-OC":        forward-char
#"\M-OA":        previous-history
#"\M-OB":        next-history
#
# ANSIモードにおける矢印キー
#
"\M-[D":        backward-char
"\M-[C":        forward-char
"\M-[A":        previous-history
"\M-[B":        next-history
#
# 8ビット・キーパッド・モードにおける矢印キー
#
#"\M-\C-OD":       backward-char
#"\M-\C-OC":       forward-char
#"\M-\C-OA":       previous-history
#"\M-\C-OB":       next-history
#
# 8ビットANSIモードにおける矢印キー
#
#"\M-\C-[D":       backward-char
#"\M-\C-[C":       forward-char
#"\M-\C-[A":       previous-history
#"\M-\C-[B":       next-history

C-q: quoted-insert

$endif

# 旧スタイルのバインディング。これがたまたまデフォルトでもある。
TAB: complete

# シェルとのやりとりにおいて便利なマクロ
$if Bash
# パス(PATH)の編集
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
# 引用符で囲まれた単語を入力するための準備 -- 先頭と末尾の二重引用符
# を挿入して、先頭の引用符の直後に移動
"\C-x\"": "\"\"\C-b"
# バックスラッシュを挿入
# (シーケンスやマクロにおいて、バックスラッシュ・エスケープをテストする)
"\C-x\\": "\\"
# カレントな単語、または、1つ前の単語を引用符で囲む
"\C-xq": "\eb\"\ef\""
# バインドされていない行再表示コマンドにバインディングを追加
"\C-xr": redraw-current-line
# カレント行において変数を編集
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
$endif

# 視覚的なベルが利用可能であれば、それを使う
set bell-style visible

# 読み込みの際に、文字の第8ビットを落とさない
set input-meta on

# iso-latin1文字は、プレフィックス・メタ・シーケンスに変換せず、
# そのまま挿入する
set convert-meta off

# 第8ビットがセットされている文字を、メタ・プレフィックス文字として
# ではなく、直接表示する
set output-meta on

# ある単語について、150を超える補完候補が存在する場合、ユーザに対して
# すべてを表示させたいかどうかを問い合わせる
set completion-query-items 150

# FTP用
$if Ftp
"\C-xg": "get \M-?"
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif

バインド可能なReadlineコマンド

このセクションでは、 キー・シーケンスにバインドすることが可能なReadlineコマンドについて説明します。

移動のためのコマンド

beginning-of-line (C-a)
カレント行の先頭に移動します。
end-of-line (C-e)
行の末尾に移動します。
forward-char (C-f)
1文字分先に進みます。
backward-char (C-b)
1文字分前に戻ります。
forward-word (M-f)
次の単語の末尾へ移動します。 単語は、 文字と数字により構成されます。
backward-word (M-b)
現在カーソルが指している単語、 または、 1つ前の単語の先頭に移動します。 単語は、 文字と数字により構成されます。
clear-screen (C-l)
画面を消去し、 カレント行を再表示します。 その際、 カレント行が画面の一番上になるようにします。
redraw-current-line ()
カレント行を再表示します。 デフォルトでは、 このコマンドはバインドされていません。

履歴を操作するためのコマンド

accept-line (Newline, Return)
カーソルの位置がどこにあっても、 その行を受け取ります。 この行が空行ではない場合、 それを履歴リストに追加します。 この行が履歴行である場合は、 その履歴行を最初の状態に復元します。
previous-history (C-p)
履歴リストを1つ上に移動します。
next-history (C-n)
履歴リストを1つ下に移動します。
beginning-of-history (M-<)
履歴の最初の行に移動します。
end-of-history (M->)
入力履歴の最後の行、 すなわち、 現在入力中の行に移動します。
reverse-search-history (C-r)
カレント行から始めて上の方向へ検索を行います。 必要に応じて履歴の上の方へ移動します。 インクリメンタルな検索を行います。
forward-search-history (C-s)
カレント行から始めて下の方向へ検索を行います。 必要に応じて履歴の下の方へ移動します。 インクリメンタルな検索を行います。
non-incremental-reverse-search-history (M-p)
カレント行から始めて、 必要に応じて履歴の上の方へ移動しつつ、 非インクリメンタルな検索を使って、 ユーザによって提供された文字列を上の方向へ検索します。
non-incremental-forward-search-history (M-n)
カレント行から始めて、 必要に応じて履歴の下の方へ移動しつつ、 非インクリメンタルな検索を使って、 ユーザによって提供された文字列を下の方向へ検索します。
history-search-forward ()
カレント行の先頭からカレントなカーソル位置 (ポイント) までの間の文字列を、 履歴の中で下の方向へ検索します。 これは、 非インクリメンタルな検索です。 デフォルトでは、 このコマンドはバインドされていません。
history-search-backward ()
カレント行の先頭からポイントまでの間の文字列を、 履歴の中で上の方向へ検索します。 これは、 非インクリメンタルな検索です。 デフォルトでは、 このコマンドはバインドされていません。
yank-nth-arg (M-C-y)
1つ前に実行されたコマンドの最初の引数 (通常は、 1つ前の行の2つめの単語) を挿入します。 引数nを指定すると、 1つ前に実行されたコマンドのn番目の単語を挿入します (1つ前に実行されたコマンドの中の最初の単語を、 0番目の単語とします)。 負の値を引数に指定すると、 1つ前に実行されたコマンドの後ろから数えてn番目の単語を挿入します
yank-last-arg (M-., M-_)
1つ前に実行されたコマンドの最後の引数 (1つ前の履歴エントリの最後の単語) を挿入します。 引数を指定すると、 yank-nth-argと同じように動作します。 yank-last-argを連続して実行すると、 履歴リストを遡って移動していきます。 したがって、 各行の最後の引数が順番に挿入されていきます。

テキストを変更するためのコマンド

delete-char (C-d)
カーソル位置にある文字を削除します。 カーソルが空行の先頭にあり、 最後に入力された文字がdelete-charにバインドされていない場合は、 EOFを返します。
backward-delete-char (Rubout)
カーソル位置の前にある文字を削除します。 数値引数を指定すると、 文字を削除するのではなくキルするよう指示したことになります。
forward-backward-delete-char ()
カーソル位置にある文字を削除します。 ただし、 カーソルが行末にある場合は、 カーソル位置の前にある文字を削除します。 デフォルトでは、 キーにはバインドされていません。
quoted-insert (C-q, C-v)
このコマンドに続けて入力する文字をそのまま行に追加します。 これが、 例えばC-qのようなキー・シーケンスを挿入する方法です。
tab-insert (M-TAB)
タブを挿入します。
self-insert (a, b, A, 1, !, ...)
その文字自身を挿入します。
transpose-chars (C-t)
カーソルの前にある文字をドラッグして、 カーソル位置にある文字の後ろに持っていきます。 カーソル自身も同様に前進させます。 挿入ポイントが行末にある場合には、 行の最後の2文字を入れ替えます。 負の引数を与えても機能しません。
transpose-words (M-t)
カーソルの前にある単語をドラッグして、 カーソルの後ろにある単語の後ろに持っていきます。 カーソル自身も、 カーソルの後ろにある単語の後ろに移動します。
upcase-word (M-u)
カレントな (あるいは、 その1つ後ろの) 単語の中のすべての文字を大文字に変換します。 負の引数を指定すると、 1つ前の単語の中のすべての文字を大文字に変換しますが、 カーソルは移動しません。
downcase-word (M-l)
カレントな (あるいは、 その1つ後ろの) 単語の中のすべての文字を小文字に変換します。 負の引数を指定すると、 1つ前の単語の中のすべての文字を小文字に変換しますが、 カーソルは移動しません。
capitalize-word (M-c)
カレントな (あるいは、 その1つ後ろの) 単語の先頭文字を大文字に、 それ以外の位置にある文字を小文字に変換します。 負の引数を指定すると、 1つ前の単語に対して同様の変換を行いますが、 カーソルは移動しません。

キルとヤンク

kill-line (C-k)
カレントなカーソル位置から行末までのテキストをキルします。
backward-kill-line (C-x Rubout)
行の先頭までのテキストをキルします。
unix-line-discard (C-u)
カーソル位置から逆方向にカレント行の先頭までをキルします。 キルされたテキストは、 キル・リングに退避されます。
kill-whole-line ()
カーソルの位置にかかわらず、 カレント行のすべての文字をキルします。 デフォルトでは、 バインドされていません。
kill-word (M-d)
カーソル位置からカレントな単語の末尾までをキルします。 カーソルが単語の間にある場合は、 次の単語の末尾までをキルします。 単語の境界は、 forward-wordの場合と同様です。
backward-kill-word (M-DEL)
カーソルの前にある単語をキルします。 単語の境界は、 backward-wordの場合と同様です。
unix-word-rubout (C-w)
空白類(22)を単語の境界として、 カーソルの前にある単語をキルします。 キルされたテキストは、 キル・リングに退避されます。
delete-horizontal-space ()
ポイントの前後にある、 すべての空白(スペース)とタブを削除します。 デフォルトでは、 バインドされていません。
kill-region ()
ポイントとマーク (待避されたカーソル位置) の間のテキストをキルします。 このテキストは、 領域(region)と呼ばれます。 デフォルトでは、 このコマンドはバインドされていません。
copy-region-as-kill ()
領域(region)内のテキストを、 直ちにヤンクできるよう、 キル・バッファにコピーします。 デフォルトでは、 このコマンドはバインドされていません。
copy-backward-word ()
ポイントの前にある単語をキル・バッファにコピーします。 単語の境界は、 backward-wordの場合と同様です。 デフォルトでは、 このコマンドはバインドされていません。
copy-forward-word ()
ポイントの後ろにある単語をキル・バッファにコピーします。 単語の境界は、 forward-wordの場合と同様です。 デフォルトでは、 このコマンドはバインドされていません。
yank (C-y)
キル・リングの一番上の位置にあるテキストを、 バッファ内のカレントなカーソル位置にヤンクします。
yank-pop (M-y)
キル・リングを回転させ、 新しく一番上の位置にきたテキストをヤンクします。 1つ前に実行したコマンドが、 yankまたはyank-popであった場合のみ、 このコマンドを実行することができます。

数値引数の指定

digit-argument (M-0, M-1, ... M--)
既に蓄積済みの引数にこの数字を追加するか、 または、 この数字によって新しい引数を開始します。 負の引数を指定するには、 先頭をM--とします。
universal-argument ()
これは、 引数を指定する別の方法です。 このコマンドの後ろに、 場合によって先頭にマイナス記号の付く、 1つ以上の数字が続く場合には、 それらの数字が引数を定義します。 このコマンドの後ろに数字が続く場合には、 universal-argumentを再実行することによって、 その数字引数を終わらせることができます。 しかし、 このコマンドの後ろに数字が続かない場合の再実行は、 無視されます。 特殊なケースとして、 このコマンドの直後に数字でもマイナス記号でもない文字が続く場合、 次に実行されるコマンドの引数カウントは4倍されます。 引数カウントの初期値は1です。 したがって、 この関数を最初に実行した後には、 引数カウントは4になり、 2回目に実行した後には16になります。 以下、 同様です。 デフォルトでは、 キーへのバインドはされていません。

Readlineによる入力補完

complete (TAB)
カーソルの前にあるテキストの補完を試みます。 これは、 アプリケーション固有の動作をします。 通常、 引数としてファイル名を入力しているときには、 ファイル名を補完することができます。 コマンド名を入力しているときには、 コマンド名を補完することができます。 GDBに対してシンボル名を入力しているときには、 シンボル名を補完することができます。 Bashに対して変数名を入力しているときには、 変数名を補完することができます。
possible-completions (M-?)
カーソルの前にあるテキストの補完候補を一覧表示します。
insert-completions (M-*)
possible-completionsを実行すれば生成されたであろうテキストの補完候補をすべて、 ポイントの前に挿入します。
menu-complete ()
completeに似ていますが、 補完されるべき単語を、 補完候補の一覧の中の1つと置き換えます。 menu-completeを繰り返し実行すると、 補完候補の一覧から順番に1つずつ補完候補が挿入されていきます。 候補一覧の終端に達すると、 ベル音が鳴らされ、 補完前のテキストが復元されます。 引数nを指定すると、 補完候補の一覧の中でn個先に移動します。 一覧を逆方向に戻るために、 負の引数を指定することができます。 このコマンドは、 TABにバインドすることを意図したものですが、 デフォルトではバインドされていません。
delete-char-or-list ()
カーソルが行頭、 行末のいずれにもない場合、 (delete-charのように) そのカーソル位置にある文字を削除します。 行末にある場合は、 possible-completionsと同一の振る舞いします。 このコマンドは、 デフォルトではバインドされていません。

キーボード・マクロ

start-kbd-macro (C-x ()
カレントなキーボード・マクロの構成要素として入力される文字の保存を開始します。
end-kbd-macro (C-x ))
カレントなキーボード・マクロの構成要素として入力された文字の保存を終了して、 そのキーボード・マクロの定義を保存します。
call-last-kbd-macro (C-x e)
最後に定義されたキーボード・マクロを再実行します。 マクロの中の文字群が、 あたかもキーボードから入力されたかのように、 現われます。

その他のコマンド

re-read-init-file (C-x C-r)
inputrcファイルの内容を読み込み、 その中にあるバインディングや変数割り当てをすべて組み込みます。
abort (C-g)
カレントな編集コマンドの実行を停止し、 (bell-styleの設定次第では) 端末のベル音を鳴らします。
do-uppercase-version (M-a, M-b, M-x, ...)
メタ化された文字xが小文字である場合、 対応する大文字にバインドされているコマンドを実行します。
prefix-meta (ESC)
次に入力される文字をメタ化します。 これは、 メタ・キーのないキーボード用のコマンドです。 `ESC f'を入力するのは、 `M-f'を入力するのと同じことです。
undo (C-_, C-x C-u)
インクリメンタルな取り消し処理を実行します。 取り消す内容は、 各行ごとに別々に記憶されています。
revert-line (M-r)
行に加えられたすべての変更を取り消します。 これは、 undoコマンドを、 行を元の状態に戻すのに必要な回数繰り返して実行するようなものです。
tilde-expand (M-~)
カレントな単語に対して、 チルダ展開を実行します。
set-mark (C-@)
カレントなポイントにマークをセットします。 数値引数があれば、 その位置にマークがセットされます。
exchange-point-and-mark (C-x C-x)
ポイントとマークを交換します。 待避されていた位置がカレントなカーソル位置としてセットされ、 元のカーソル位置はマークとして待避されます。
character-search (C-])
文字を1つ読み取り、 その文字が次に現われるところにポイントを移動します。 負の数を指定すると、 その文字が以前に現われたところを探します。
character-search-backward (M-C-])
文字を1つ読み取り、 その文字が前に現われたところにポイントを移動します。 負の数を指定すると、 その文字が次に現われるところを探します。
insert-comment (M-#)
カレント行の先頭にcomment-begin変数の値が挿入され、 挿入後の行が、 あたかも改行が入力されたかのように、 受け付けられます。
dump-functions ()
Readlineの出力ストリームに、 すべての関数とそのキー・バインディングを出力します。 数値引数が指定されると、 inputrcファイルの一部として使用することのできる形式に、 出力がフォーマットされます。 このコマンドは、 デフォルトではバインドされていません。
dump-variables ()
Readlineの出力ストリームに、 値をセットすることのできるすべての変数とその値を出力します。 数値引数が指定されると、 inputrcファイルの一部として使用することのできる形式に、 出力がフォーマットされます。 このコマンドは、 デフォルトではバインドされていません。
dump-macros ()
マクロにバインドされているすべてのReadlineキー・シーケンスと、 そのキー・シーケンスが出力する文字列を出力します。 数値引数が指定されると、 inputrcファイルの一部として使用することのできる形式に、 出力がフォーマットされます。 このコマンドは、 デフォルトではバインドされていません。

Readlineのviモード

Readlineライブラリは、 viの編集機能のフルセットを提供してはいませんが、 簡単な行編集を行うのに十分な機能は備えています。 Readlineのviモードは、 POSIX 1003.2標準にしたがって動作します。

emacs編集モードとvi編集モードを対話的に切り替えるには、 コマンドM-C-j(toggle-editing-mode)を使用してください。 Readlineのデフォルトはemacsモードです。

viモードで行入力を行うときには、 あたかも`i'を入力したかのように、 最初から「挿入」モードになっています。 ESCを押すと「コマンド」モードになり、 標準的なviの移動キーによって行のテキストを編集することができます。 すなわち、 `k'により前の履歴行に移動すること、 `j'によって後ろの履歴行に移動すること、 などが可能です。


[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]