Bash で履歴からコマンド全体を現在のコマンドに挿入するにはどうすればよいですか?
調査した結果、前のコマンドの最初と最後の単語を挿入する GNU Readline キー バインディングが 2 つあることがわかりました。残念ながら、n
これらのキー バインディングに引数を指定する方法がわかりません (方法を教えてください)。また、たとえわかっていたとしても、履歴から長いコマンドを挿入することはできないでしょう。
Ctrl-Alt-y
前のコマンドの最初の引数を挿入します。引数 n を指定すると、前のコマンドの n 番目の単語が挿入されます。
Alt-.
Alt-_
前のコマンドの最後の引数を挿入します。引数 n を指定すると、前のコマンドの n 番目の単語が挿入されます。
GNU Readline は、履歴からコマンド全体を現在のコマンドに挿入することをサポートしていますか?
免責事項: Bash コマンドの置換を探しているわけではありません。
答え1
希望する履歴展開(または)を入力!foo
し!39
、拡大する:
history-expand-line (M-^)
現在の行で履歴展開を実行します。
私の記憶が正しければ、 Meta は になります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'
繰り返し時に以前のエントリを挿入するようにすることは、読者の課題として残されています ;-)