ここでは、 GNUのコマンドライン編集のインターフェイスを説明します。
以下のパラグラフでは、 キー・ストロークを表すための表記法について説明します。
文字列C-kはControl-Kと読み、 コントロール・キーが押されたままの状態でキーkが押された時に生成される文字を表します。
文字列M-kはMeta-Kと読み、 メタ・キー (があるものとして、それ) が押されたままの状態でキーkが押された時に生成される文字を表します。 メタ・キーがない場合、 同等のキー・ストロークを、 最初にESCキーを押し、 次にキーkを押すことで生成することができます。 どちらの手順も、 キーkをメタ化するといいます。
文字列M-C-kはMeta-Control-Kと読み、 C-kをメタ化することにより生成される文字を指します。
さらに、 いくつかのキーには名前があります。 DEL、 ESC、 LFD、 SPC、 RET、 TABはこの付録内でも、 初期化ファイルの中でも、 各々のキーを表します (詳細については、 Readline初期化ファイルを参照)。
しばしば対話的なセッションにおいて、 長いテキストを1行に記述した後で、 その行の先頭の単語のスペルが間違っていたことに気がつくことがあります。 Readlineライブラリは、 入力したテキストを操作するための一連のコマンドを提供しており、 これによって、 その行の大部分を入力し直すことなく、 タイプ・ミスしたところだけを修正することができます。 これらの編集コマンドを使って、 修正が必要なところにカーソルを移動させ、 テキストを削除したり、 修正テキストを挿入(insert)したりします。 その行の修正が終われば、 単にRETを押します。 RETを押すのに、 行末にいる必要はありません。 カーソルが行内のどこにあろうと、 その行全体が入力として受け付けられます。
行内に文字を入力するには、 単にその文字をタイプします。 タイプされた文字はカーソルの位置に表示され、 カーソルは1桁分右へ移動します。 1文字打ち間違えた場合は、 DELによって後退して打ち間違えた文字を削除することができます。
時には、 本当は入力したかった文字を入力せず、 その誤りに気がつくことなく、 さらに数文字を入力してしまうということがあります。 このような場合には、 C-bによってカーソルを左に移動し、 誤りを訂正することができます。 訂正後、 C-fによってカーソルを右に移動することができます。
行の途中にテキストを追加すると、 挿入(insert)された文字のためのスペースを空けるために、 カーソルの右側にある文字が右方向に押しやられることに気がつくでしょう。 同様に、 カーソル位置にあるテキストを削除すると、 文字が削除されたために生じる空白を埋めるために、 カーソルの右側にある文字が左方向に引き戻されます。 入力行のテキストを編集するための基本中の基本操作の一覧を以下に示します。
上記の一覧は、 ユーザが入力行を編集するのに必要な最も基本的なキー・ストロークを説明したものです。 ユーザの便利を考え、 C-b、 C-f、 C-d、 DELに加えて多くのコマンドが追加されてきました。 以下に、 行内をより迅速に動きまわるためのコマンドをいくつか示します。
C-fが1文字分先に進むのに対して、 M-fが1単語分先に進む点に注意してください。 大まかな慣例として、 コントロール・キーを使うと文字単位の操作になり、 メタ・キーを使うと単語単位の操作になります。
テキストをキル(kill)するとは、 行からテキストを削除し、 その際に、 そのテキストを後に引き出してその行内に挿入(yank)することができるように退避しておくことを指します。 あるコマンドの説明に「テキストをキル(kill)する」という記述があれば、 そのテキストを後に別の箇所 (あるいは同じ箇所) において再入手することができると考えて間違いありません。
以下に、テキストをキル(kill)するためのコマンドを一覧で示します。
次に、キル(kill)されたテキストを引き出して行内へ挿入(yank)する方法を示します。
キル(kill)コマンドを使うと、 テキストはキル・リング(kill-ring)に退避されます。 キル(kill)コマンドを任意の回数連続して実行すると、 キル(kill)されたテキストはすべて連結されて退避されます。 したがって、 挿入(yank)を行うと、 そのすべてを一気に手に入れることができます。 キル・リング(kill-ring)は個々の行に固有のものではありません。 以前入力した行においてキル(kill)したテキストを、 後になって別の行を入力している時に、 挿入(yank)することができます。
Readlineコマンドには数値引数を渡すことができます。 数値引数は、 繰り返し回数として使われたり、 引数の符号として使われたりします。 通常は先に進むようなコマンドに負の数を引数として指定すると、 前に戻るようになります。 例えば、 行の先頭までのテキストをキル(kill)するには、 M-- C-kとします。
コマンドに数値引数を渡す通常の方法は、 コマンドの前にメタ化された数値を入力することです。 入力した最初の数値が、 マイナス記号(-)の場合、 引数の符号は負になります。 引数を開始するために1つメタ化された数値を入力すれば、 その後は、 残りの数値を入力し、 続いてコマンドを入力することができます。 例えば、 C-dコマンドに引数として10を渡すためには、 M-1 0 C-dを入力します。
ReadlineライブラリにはGNU Emacs風のキー・バインディングが付いていますが、 ユーザが異なるキー・バインディングを使いたいということがあるかもしれません。 ユーザのホーム・ディレクトリ内の初期化ファイルにコマンドを記述することで、 Readlineを使うプログラムをカスタマイズすることができます。 このファイルの名前は、 `~/.inputrc'です。
Readlineライブラリを使うプログラムが起動されると、 `~/.inputrc'ファイルが読み込まれ、 キー・バインディングが設定されます。
さらに、 C-x C-rコマンドによってこの初期化ファイルが再読み込みされるので、 ユーザが初期化ファイルに加えた変更を組み込むことができます。
`~/.inputrc'ファイルの中では、4種の構成物のみ許されます。
set
コマンドを使うことで行います。
行編集コマンドとしてvi
を使いたいということを指定するには、
次のようにします。
set editing-mode vi現在のところ、 設定できる変数は極めて少ないので、 ここでそのすべてを取り上げます。
editing-mode
editing-mode
変数は、
どの編集モードを使うのかを制御します。
デフォルトでは、
GNU Readlineは、
キー・ストロークがEmacsによく似ているEmacs編集モードで起動します。
この変数は、
emacs
とvi
のどちらかに設定することができます。
horizontal-scroll-mode
On
とOff
のどちらかに設定することができます。
これをOn
に設定すると、
1行のテキストの長さがスクリーン幅よりも長い場合に、
編集中の行のテキストが次の行に折り返すことなく、
同じ行の上で水平方向にスクロールするようになります。
デフォルトでは、
この変数はOff
に設定されています。
mark-modified-lines
On
に設定されると、
変更されたヒストリ行の先頭にアスタリスク(`*')が表示されます。
この変数はデフォルトではOffです。
prefer-visible-bell
On
に設定されると、
視覚的なベル(8)
が利用できる場合には、
単に端末のベルを鳴らす代りに、
視覚的なベルを使用します。
デフォルトでは、
この値はOff
です。
Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: ">&output"上の例では、 C-uが関数
universal-argument
に割り当てられ、
C-oがその右側に記述されたマクロ
(行内に`>&output'というテキストを挿入(insert)するマクロ)
を実行するよう割り当てられます。
"\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'というテキストを挿入(insert)するよう、
それぞれ割り当てられています。
beginning-of-line (C-a)
end-of-line (C-e)
forward-char (C-f)
backward-char (C-b)
forward-word (M-f)
backward-word (M-b)
clear-screen (C-l)
accept-line (Newline, Return)
previous-history (C-p)
next-history (C-n)
beginning-of-history (M-<)
end-of-history (M->)
reverse-search-history (C-r)
forward-search-history (C-s)
delete-char (C-d)
backward-delete-char (Rubout)
quoted-insert (C-q, C-v)
tab-insert (M-TAB)
self-insert (a, b, A, 1, !, ...)
transpose-chars (C-t)
transpose-words (M-t)
upcase-word (M-u)
downcase-word (M-l)
capitalize-word (M-c)
kill-line (C-k)
backward-kill-line ()
kill-word (M-d)
backward-kill-word (M-DEL)
unix-line-discard (C-u)
unix-word-rubout (C-w)
yank (C-y)
yank-pop (M-y)
digit-argument (M-0, M-1, ... M--)
universal-argument ()
complete (TAB)
possible-completions (M-?)
re-read-init-file (C-x C-r)
abort (C-g)
prefix-meta (ESC)
undo (C-_)
revert-line (M-r)
vi
モード
Readlineライブラリはvi
の編集機能のフルセットを提供する訳ではありませんが、
簡単な行編集を行うのに十分な機能は備えています。
GNU Emacs編集モードとvi
編集モードを対話的に切り替えるには、
M-C-j
(toggle-editing-mode)
コマンドを使います。
vi
モードで行入力を行う時には、
あたかもiを入力したかのように、
最初から挿入モードになっています。
ESCを押すと編集モードに替わり、
標準的なvi
の移動キーにより行内テキストを編集することができます。
kにより1つ前のヒストリ行に、
jによって1つ後のヒストリ行に移動すること等ができます。