Как вставить целую команду из истории в текущую команду в 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'
Заставить его вставлять предыдущие записи при повторении — это упражнение для читателя ;-)