Как вставить целую команду из истории в текущую команду в Bash?

Как вставить целую команду из истории в текущую команду в Bash?

Как вставить целую команду из истории в текущую команду в Bash?

Я провел небольшое исследование и определил две привязки клавиш GNU Readline, которые вставляют первое и последнее слово предыдущей команды. К сожалению, я не знаю, как предоставить аргумент nдля этих привязок клавиш (как?), и даже если бы я знал, это было бы невыполнимо для вставки длинных команд из истории.

Ctrl-Alt-y

Вставить первый аргумент в предыдущую команду. С аргументом n вставить n-ное слово из предыдущей команды.

Alt-.
Alt-_

Вставить последний аргумент предыдущей команды. С аргументом n вставить n-ное слово из предыдущей команды.

Поддерживает ли GNU Readline вставку целой команды из истории в текущую команду?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не ищу замену команд Bash.

решение1

Введите желаемое расширение истории (например, !fooили !39) ирасширьте его:

history-expand-line (M-^)
Выполнить расширение истории на текущей строке.

Мета будет Alt, IIRC.

решение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'

Заставить его вставлять предыдущие записи при повторении — это упражнение для читателя ;-)

Связанный контент