shedit — シェル内での対話式コマンドおよびヒストリーの編集

形式

set –o editmode

EDITOR=editprog

VISUAL= editprog

使用上の注意

POSIX は、erase および kill 処理などに多くのキーを使用します。 デフォルトでは、シェルはこれらの使いやすい編集キーを使用して POSIX を編集するコマンド行を残します。しかし、これらの関数は特に強力または役立つものではありません。代替手段として、シェルには、対話式コマンド編集およびファイル名生成のための組み込み機 能があり、これらは新しいコマンドの作成に役立つだけでなく、前のコマンドの変更や再実行を容易にします。この能力は、前のコマンド行を編集のために別のプログラムに渡す fc コマンド によって提供されるものとは異なります。組み込み機能は emacsgmacs、または vi 画面エディターと似ており、以下のコマンドを使用可能にします (詳細は、set および vi を参照)。
set –o emacs
set –o gmacs
set –o vi

これらの機能はまた、vi で終了する値を 環境変数 EDITOR または VISUAL に 割り当てることにより、(対応するオプション・セットで) 使用可能にされます (sh 参照)。

フルスクリーン・エディターとは異なり、シェル編集は 1 行ウィンドウを使用し、プロンプトの終わりから最後の前の列に拡張します。複数行ヒストリー項目は、^J として表される 改行と共に表示されます。

出力デバイスの列数は、定義されている場合は COLUMNS 環境変数から取得されます。定義されていない場合は、 80 と見なされます。

右端の列に拡張されるコマンド行は水平方向にスクロールできます。ウィンドウの端を超えてカーソルを移動しようとすると、行がスクロールされ、ウィンドウのほぼ中央にカーソルが位置されます。二度目の最後の列は スクロール可能な行をマークする文字を表示します。< はデータがまだ左方にあることを示し、> はデータがまだ右方にあること を示し、* は両側にデータがあることを示します。

emacs/gmacs 編集モード

emacs/gmacs 編集モードが使用可能になっていると、キーボードからの普通の出力可能文字はコマンド行に入力され、エコーされます。さまざまな制御文字によって、カーソルの移動、コマンド ・ヒストリーのスクロール、および現行コマンドの変更などを行うためのコ マンド・シーケンスが導き出されます。emacsgmacs の違いは Ctrl-T の操作だけです。

認識されるコマンド・シーケンスは機能グループにリストされています。Meta– 表記 は EscK を表し、文字が後に続きます。用語はヒストリーにかかわるものです。多くの コマンドは、10 進数で Meta-digits として入力された、または 現行カウント (初期値は 1) の 4 倍を意味する Ctrl- として入力された オプショナルの先行カウントを受け入れます。

カーソル移動の組み合わせのリスト
nCtrl-B
カーソルを n 文字戻します。
nCtrl-F
カーソルを n 文字前方に移動します。
Ctrl-A
カーソルを行の初めに移動します。
Ctrl-E
カーソルを行の終わりに移動します。
nMeta–b
カーソルをワード (英数字のストリング) の初めから n 番目前に移動します。
nMeta–f
カーソルをワードの初めから n 番目前方に移動します。
Ctrl–]c
カーソルを現在行の次文字 c に前方へ移動します。
Meta–space
カーソル位置にマークを設定します。
Ctrl-@
カーソル位置にマークを設定します。
Ctrl-x Ctrl-X
カーソル位置とマークを交換します。
行検索の組み合わせのリスト。これらの数字は、 異なるヒストリー行を表示します。
nCtrl-P
ヒストリーから n 番目直前のコマンド行を選択します。
nCtrl-N
ヒストリーから n 番目次のコマンド行を選択します。
Meta–<
ヒストリーから最古のコマンド行を選択します。
Meta–>
ヒストリーから最新のコマンド行を選択します。
nCtrl-RstringEnter
string に一致する n 番目直前のコマンド行を選択します。n がゼロの場合は、現在行の後の次に一致するコマンドを選択します。
テキスト変更の組み合わせのリスト
n erase
n 文字カーソルの左方を削除します。これは消去文字です。
nBackspace
n 文字カーソルの左方を削除します。
nCtrl-H
n 文字カーソルの左方を削除します。
nCtrl-D
n 文字カーソルの右方を削除します。現在行が空の場合は、シェルは終了します。
nMeta–Ctrl-H
カーソルの前のワードの初めに n 番目まで削除します。
nMeta–h
カーソルの前のワードの初めに n 番目まで削除します。
nMeta-d
カーソルの後のワードの初めに n 番目まで削除します。
nCtrl-K
カーソルから行の終わりまで削除します。n がゼロの場合は、行の初めからカーソルまで削除します。
kill
現在行全体を削除します。これは行抹消文字です。
Ctrl-G
現在行全体を削除します。
Ctrl-W
カーソル位置からマーク (Meta-space または Ctrl-@ で設定) まで削除します。
Ctrl-T
emacs モードでは、現行文字と直前の文字を反転させ、カーソルを前方に移動します。カーソルが行の終わりにある、または gmacs モードの場合は、直前の 2 文字を反転させます。
Ctrl-Y
emacs モードで最後に削除したテキストを復元します。
Ctrl-C
カーソルの下の文字を大文字にします。
Ctrl-^
カーソルの下の文字を大文字にします。
Meta-c
カーソルの右方のワードを大文字にします。
Meta-l
カーソルの右方のワードを小文字にします。
Meta-u
カーソルの右方のワードを大文字にします。
nMeta-.
直前のコマンドの n 番目のワードを挿入します。n が指定されないかゼロの場合は、直前のコマンドの最後のワードを挿入します。
nMeta-_
直前のコマンドの n 番目のワードを挿入します。n が指定されないかゼロの場合は、直前のコマンドの最後のワードを挿入します。
Meta-*
現行のワードを * が付加されたワードと一致するファイルのリストで置き換えます。
Meta-Esc
パス名を完成するために使用します。入力した中で一致する既存の パス名が 1 つだけある場合は、そのパス名は完成され、スペースが 1 つ、完全なパス名の後に追加されます。一致するパス名がいくつかある 場合、シェルは一致するすべてのパス名に共通のすべての文字を追加することにより、入力したものを拡張します。
Meta-=
現行のワードに一致するすべてのパス名をリストします。
その他の組み合わせのリスト
Ctrl-J
現行のコマンド行を実行します。
Ctrl-M
現行のコマンド行を実行します。
Ctrl-L
現行のコマンド行を再表示します。
Ctrl-O
次のコマンド行を覚えておき、現行のコマンド行を実行した後、覚えておいた行を選択します。
Ctrl-U
後続のコマンドのカウントを 4 倍します (各 Ctrl-U に対し)。
Ctrl-V
シェルのバージョンを表示します。
次の文字を文字通りにとります。このように、コマンドおよび制御文字をコマンド行または 検索ストリングに入力できます。
eof
シェルを終了します。これはファイルの終わり文字です。
Ctrl-D
シェルを終了します。
Metan
後続のコマンドにカウントを入力します。

vi 編集モード

vi 編集機能が使用できるようになっていると、シェルは 新しいプロンプトが出るごとに、最初のうちは入力モードになります。キーボード入力は、通常、現行のコマンド行の現在位置に挿入されます。例外は、以下のアクション・キーです。
erase
カーソルの左方の文字を削除します。これは消去文字です。
バックスペース
カーソルの左方の文字を削除します。
eof
シェルを終了します。これはファイルの終わり文字です。
Ctrl-D
シェルを終了します。
Ctrl-W
カーソルの左方のワード (ホワイト・スペース区切りストリング) を削除します。
kill
現在行を削除します。これは行抹消文字です。
Ctrl-X
現在行を削除します。
Ctrl-J
現在行を削除します。
Ctrl-M
現在行を削除します。
Enter
現在行を実行します。
Esc
入力モードからコマンド・モードに切り替えます。

Esc キーを押すと、シェルはコマンド・モードに入り、キーボード入力はカーソルを再配置するコマンドとして解釈され、コマンド・ヒストリー間をスクロールし、テキストを削除または変更したり、あるいは入力モードに再度入ります。コマンド・モードでは、入力はエコーされずそのままです。多くのコマンドはオプショナルの カウント n をとりますが、これは先行する 10 進数 (エコーされない) として入力されます。コマンドはその回数実行されます。特に注記された場合を除き、n はデフォルトでは 1 となります。

Ctrl-V
次の文字を文字通りにとります。これらのアクション・キーをテキストと して入力するのに役立ちます。
\
以下のアクション・キーをエスケープします。次の文字が Ctrl-JCtrl-M、または Enter を除くアクション・キーの場合は、 は消去され、エスケープ文字は文字通りに入力されます。その他の場合は、 は入力され、次の文字は正常に扱われます。

カーソル移動

以下のコマンドはコマンド行でカーソルを再配置します。
nh
n 文字、後方移動します。
n1
n 文字、前方移動します。
0
行の最初の文字に移動します。
^
行の最初の非ブランク文字に移動します。
$
行の最後の文字に移動します。
nw
n 番目次のワード (英数字の、または非ブランク非英数字の ストリング) の初めに移動します。
nW
n 番目次のフルワード (非ブランクストリング) の初めに移動します。
nb
n 番目前のワードの初めに移動します。
nB
n 番目前のフルワードの初めに移動します。
ne
n 番目次のワードの終わりに移動します。
nE
n 番目次のフルワードの終わりに移動します。
nfc
n 番目次の文字 c に移動します。
nFc
n 番目前の文字 c に移動します。
ntc
n 番目次の文字 c の前の文字に移動します。
nTc
n 番目前の文字 c の後の文字に移動します。
n;
前の fFt、または T コマンドを繰り返します。
n,
前の fFt、または T コマンドを繰り返しますが、反対方向です。

行検索

以下のコマンドは、現在表示されているコマンド行を変更します。
nj
ヒストリーから n 番目次のコマンド行を選択します。
n+
ヒストリーから n 番目次のコマンド行を選択します。
nk
ヒストリーから n 番目直前のコマンド行を選択します。
n–
ヒストリーから n 番目直前のコマンド行を選択します。
nG
ヒストリー番号 n を持つコマンド、または n が省略されている場合は 最後のコマンドを選択します。
/stringEnter
後方に検索して、string と一致する最初のコマンド行を選択します。string が 省略されると、直前の検索ストリングが使用されます。
?stringEnter
前方に検索して、string と一致する最初のコマンド行を選択します。string が 省略されると、直前の検索ストリングが使用されます。
n
最後のストリング検索 (‘/’ または ‘?’) コマンドを繰り返します。
N
最後のストリング検索を繰り返しますが、反対方向です。

テキスト変更

以下のコマンドは現行コマンド行のテキストを代替します。これらのコマンドのいくつかは テキスト・ブロックで作動し、カーソル移動コマンドの直後で定義されます。これはテキスト変更コマンド の m (movement の略) により指定されます。テキスト・ブロックは、現在のカーソル位置から移動コマンドにより決定される新しい位置まで拡張します。
i
入力モードに入り、カーソルの下の文字の前にテキストを挿入します。
I
行の最初の非ブランク文字の前に挿入します(^i)。
a
カーソルを前方に 1 文字移動して入力モードに入り、カーソルの下の元の文字の後にテキストを付加します。
A
行の終わりに付加します ($a)。
ndm
テキスト・ブロックを削除します。n が指定されると 、movement に適用されます。
dd
コマンド行全体を削除します。
D
カーソルから行の終わりまでを削除します (d$)。
nx
カーソルの右方へ n 文字削除します (ndl)。
nX
カーソルの左方へ n 文字削除します (ndh)。
ncm
テキスト・ブロックの変更。テキストのブロックを削除し、入力モードに入ります。n が指定されると 、movement に適用されます。
cc
コマンド行全体を変更します。
s
コマンド行全体を変更します。
ns
カーソルから次の n 文字変更します。
np
カーソルの下の文字の後に戻し、最後のブロックの n コピーを テキスト変更コマンドにより削除されます。
nP
カーソルの下の文字の前に戻し、最後のブロックの n コピーを テキスト変更コマンドにより削除されます。
rc
カーソルの下の単一文字を、文字 c で置き換え、カーソル位置を 1 つ進めます。
R
置換モード に入ります。これは入力モードの特殊な場合で、入力された各文字はカーソルの下の文字を上書きし、カーソル位置を 1 つ進めます。
u
現在行に対する最後のテキスト変更を取り消します。これ自体はテキスト変更コマンドで、最後の変更に対して切り替えとして働きます。
U
現在行に対するすべての変更を取り消します。
n
次の n 文字の大文字小文字を逆転し、それらの上にカーソルを進めます。
n.
最後のテキスト変更コマンドを繰り返します。n が指定されると、繰り返されるコマンドで元々指定されたカウントを上書きします。
n_
カーソルの下の文字の後に、前のコマンド行から n 番目の引数 を付加し (デフォルトは最後)、入力モードに入ります。
*
現行のワードを * が付加されるワードと一致する ファイル名のリストで置き換えます。一致するものがないと、音響アラーム音が鳴り、ワードの置換は行われません。 一致した場合は、カーソルはリストの最後に位置付けられ、入力モードに入ります。
\
パス名を完成するために使用します。入力した中で一致する既存の パス名が 1 つだけある場合は、そのパス名は完成され、スペースが 1 つ、完全なパス名の後に追加されます。一致するパス名がいくつかある 場合、シェルは一致するすべてのパス名に共通のすべての文字を追加することにより、入力したものを拡張します。
=
現行のワードに一致するすべてのパス名をリストします。

その他

nym
テキスト・ブロックを削除バッファーに引き込みます。コマンド行またはカーソル位置を代替しない で、テキスト・ブロックを後続の put または p コマンドで使用可能にします。 n が指定されると、移動に適用されます。
yy
コマンド行全体を引きます。
Y
y$ と同等です。行の残りを引きます。
#
I#Enter と同等です。
nv
fc –e ${VISUAL:–${EDITOR:–vi}} n を実行します。 n を省略した場合、現在行のヒストリー番号が 使用されます。
Ctrl-L
現在行を再表示します。
Ctrl-J
現在行を実行します。
cm
現在行を実行します。
Enter
現在行を実行します。
@letter
_letter という名の別名の値を挿入します。シンボル letter はポータブル文字セットからの 単一英字を表し、拡張としての追加文字をサポートできます。別名 _letter は 別の編集コマンドを含み、これらのコマンドは挿入の一部として実行されます。 _letter 別名が使用可能でないと、このコマンドは有効ではありません。

制限

2 次プロンプトが表示されている間 (つまり新規複数行コマンドの後続行を入力している間) に、編集する直前のヒストリー行を選択すると、予期しない結果が発生します。

関連情報

fcsetshvi