Bashの現在のコマンドに履歴の完全なコマンドを挿入するには?

Bashの現在のコマンドに履歴の完全なコマンドを挿入するには?

Bashの現在のコマンドに履歴の完全なコマンドを挿入するには?

私はいくつかの調査で、前のコマンドの最初の単語と最後の単語を挿入する2つのGNU Readlineキーバインディングを識別しました。残念ながら、これらのキーバインディングにパラメータを提供する方法(どのように?)がわからず、n提供しても履歴に長いコマンドを挿入することは不可能です。

Ctrl-Alt-y

前のコマンドに最初のパラメータを挿入します。パラメータnを使用して、前のコマンドのn番目の単語を挿入します。

Alt-.
Alt-_

前のコマンドに最後のパラメータを挿入します。パラメータnを使用して、前のコマンドのn番目の単語を挿入します。

GNU Readlineは履歴の完全なコマンドを現在のコマンドに挿入するのをサポートしていますか?

婦人声明:Bash コマンド置換を探していません。

答え1

希望の履歴拡張子(たとえば、!fooまたは!39)を入力します。拡大する:

history-expand-line (M-^)
現在の行で履歴拡張を実行します。

慰めはIIRCになりますAlt

答え2

バインディングを直接作成できます。バインドするキーを決定するだけです。例は次のとおりです。Ctrl-T

insert_last_line(){
     local l=$READLINE_LINE p=READLINE_POINT h=$(fc -nl -0)
     READLINE_LINE=${l:0:p}${h#* }${l:p}
}
bind -x '"\C-T": insert_last_line'

繰り返すと、前の項目を挿入することは読者に練習問題として残ります;-)

関連情報